一、导入jar包。
二、加入配置文件。
1、在config下创建log4j.properties如下:
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
2、在config下创建SqlMapConfig.xml,如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 和spring整合后 environments配置将废除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> </configuration>
三、根据表结构创建pojo类。pojo类作为mybatis进行sql映射使用,po类通常与数据库表对应。
1、数据库user表如下图:
2、User.java如下:
Public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 get/set…
四、创建sql映射文件,在config下的sqlmap目录下创建sql映射文件User.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:命名空间,用于隔离sql --> <mapper namespace="test"> </mapper>
五、加载映射文件。mybatis框架需要加载Mapper.xml映射文件,将users.xml添加在SqlMapConfig.xml,如下:
六、实现根据id查询用户的功能。
1、原生sql:select * from `user` where id=1
2、在user.xml映射文件中编写按id查询用户的功能。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:命名空间,用于隔离sql --> <mapper namespace="test"> <!-- id:statement的id 或者叫做sql的id--> <!-- parameterType:声明输入参数的类型 --> <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 --> <!-- #{}:输入参数的占位符,相当于jdbc的? --> <select id="queryUserById" parameterType="int" resultType="cn.itcast.mybatis.pojo.User"> SELECT * FROM `user` WHERE id = #{id} </select> </mapper>
3、测试程序。创建一个Test类,编写实现方法。
(1). 创建SqlSessionFactoryBuilder对象
(2). 加载SqlMapConfig.xml配置文件
(3). 创建SqlSessionFactory对象
(4). 创建SqlSession对象
(5). 执行SqlSession对象执行查询,获取结果User
(6). 打印结果
(7). 释放资源
public class MybatisTest { private SqlSessionFactory sqlSessionFactory = null; @Before public void init() throws Exception { // 1. 创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 2. 加载SqlMapConfig.xml配置文件 InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 3. 创建SqlSessionFactory对象 this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); } @Test public void testQueryUserById() throws Exception { // 4. 创建SqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 5. 执行SqlSession对象执行查询,获取结果User // 第一个参数是User.xml的statement的id,第二个参数是执行sql需要的参数; Object user = sqlSession.selectOne("queryUserById", 1); // 6. 打印结果 System.out.println(user); // 7. 释放资源 sqlSession.close(); } }
七、模糊查询。
1、原生sql:select * from `user` where username like '%陈%'
2、方法一:user.xml配置文件如下
<!-- 如果返回多个结果,mybatis会自动把返回的结果放在list容器中 --> <!-- resultType的配置和返回一个结果的配置一样 --> <select id="queryUserByUsername1" parameterType="string" resultType="cn.itcast.mybatis.pojo.User"> SELECT * FROM `user` WHERE username LIKE #{username} </select>
2.1、测试程序:
@Test public void testQueryUserByUsername1() throws Exception { // 4. 创建SqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 5. 执行SqlSession对象执行查询,获取结果User // 查询多条数据使用selectList方法 List<Object> list = sqlSession.selectList("queryUserByUsername1", "%陈%"); // 6. 打印结果 for (Object user : list) { System.out.println(user); } // 7. 释放资源 sqlSession.close(); }
3、方法二:user.xml配置文件如下
<!-- 如果传入的参数是简单数据类型,${}里面必须写value --> <select id="queryUserByUsername2" parameterType="string" resultType="cn.itcast.mybatis.pojo.User"> SELECT * FROM `user` WHERE username LIKE '%${value}%' </select>
3.1、测试程序:
@Test public void testQueryUserByUsername2() throws Exception { // 4. 创建SqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 5. 执行SqlSession对象执行查询,获取结果User // 查询多条数据使用selectList方法 List<Object> list = sqlSession.selectList("queryUserByUsername2", "王"); // 6. 打印结果 for (Object user : list) { System.out.println(user); } // 7. 释放资源 sqlSession.close(); }
八、总结:
1、#{} 和 ${}的区别。
#{} :(1)可将java类型自动转换为jdbc类型。
#{}表示一个占位符,可通过#{} 实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。
(2)能够有效防止sql注入。
(3)若传输单个简单类型值,#{} 括号中可以是任意值。
${} :(1)不能自动转换。${}表示sql的拼接串,通过${}可将parameterType拼接到sql中,但不进行自动转换。
(2)不能防止sql注入。
(3)若传输单个简单类型值,${} 括号中只能是value。
2、parameterType和resultType。
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中。
3、selectOne和selectList。
selectOne只能查询一条数据,否则抛出异常。
selectList可以查询一条或多条数据。
标签:xml,创建,sqlSession,SqlSession,user,应用,sql,Mybatis From: https://www.cnblogs.com/sfwu/p/16834310.html