Mybatis是一个持久层的框架,是Apache下的顶级项目.它让程序员将主要精力放在实现业务的SQL上,通过所提供的映射方式,自由灵活生成满足需要SQL语句.Mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成Java对象.
一. MyBatis执行流程
实现需求:从User表中查询某条记录.并将这条记录封装为一个实体对象.
二. 环境搭建
1. 新建一个Maven项目.
在pom.xml文件中加入下面的jar包依赖.
1 xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0modelVersion> 6 7 <groupId>mybatisgroupId> 8 <artifactId>demoartifactId> 9 <version>1.0-SNAPSHOTversion> 10 11 <dependencies> 12 13 <dependency> 14 <groupId>mysqlgroupId> 15 <artifactId>mysql-connector-javaartifactId> 16 <version>6.0.3version> 17 dependency> 18 19 <dependency> 20 <groupId>org.mybatisgroupId> 21 <artifactId>mybatisartifactId> 22 <version>3.4.1version> 23 dependency> 24 25 <dependency> 26 <groupId>junitgroupId> 27 <artifactId>junitartifactId> 28 <version>4.12version> 29 dependency> 30 dependencies> 31 project>
2. 创建数据表
3. 编辑Mybatis配置文件
在resources下面创建mybatis-config.xml
在mybatis-config.xml中加入以下内容.这里需要注意的是:为了避免从DB中读取中文是乱码的问题,所以在url节点加入了characterEncoding=utf-8.另外,在运行mysql的JDBC驱动会出现时区的问题,所以加入了serverTimezone=UTC.
1 xml version="1.0" encoding="UTF-8" ?> 2 DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <environments default="development"> 7 <environment id="development"> 8 <transactionManager type="JDBC"/> 9 <dataSource type="POOLED"> 10 <property name="driver" value="com.mysql.cj.jdbc.Driver"/> 11 <property name="url" value="jdbc:mysql://localhost:3306/example?characterEncoding=utf-8&serverTimezone=UTC"/> 12 <property name="username" value="root"/> 13 <property name="password" value="123456"/> 14 dataSource> 15 environment> 16 environments> 17 configuration>
三. 编写代码
1. 在resource下面建立文件夹sqlmap.在此文件夹下建立UserMapper.xml映射文件.
UserMapper.xml的文件内容如下:
1 xml version="1.0" encoding="UTF-8" ?> 2 DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <mapper namespace="test"> 7 <select id="findUser" parameterType="int" resultType="User"> 8 select * from Blog where id = #{id} 9 select> 10 mapper>
这里需要注意的是,这里使用了namespace的概念.
id等同于这个节点的唯一标示福(statementID).parameterType标明查询条件的数据类型.resultType表示查询出记录后需要封装成什么类型.
另外,SQL语句中#{id}相当于preparedStatement的'?'占位符.
2. 修改mybatis-config.xml配置文件
相比起前面配置文件,这里在configuration中加入了mappers节点,在节点中加入UserMapper.xml映射文件的位置.
1 xml version="1.0" encoding="UTF-8" ?> 2 DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <environments default="development"> 7 <environment id="development"> 8 <transactionManager type="JDBC"/> 9 <dataSource type="POOLED"> 10 <property name="driver" value="com.mysql.cj.jdbc.Driver"/> 11 <property name="url" value="jdbc:mysql://localhost:3306/example?characterEncoding=utf-8&serverTimezone=UTC"/> 12 <property name="username" value="root"/> 13 <property name="password" value="123456"/> 14 dataSource> 15 environment> 16 environments> 17 <mappers> 18 <mapper resource="sqlmap/UserMapper.xml"/> 19 mappers> 20 configuration>
3. 编写实体类
1 public class User { 2 private int id; 3 private String name; 4 private int age; 5 6 public int getId() { 7 return id; 8 } 9 10 public void setId(int id) { 11 this.id = id; 12 } 13 14 public String getName() { 15 return name; 16 } 17 18 public void setName(String name) { 19 this.name = name; 20 } 21 22 public int getAge() { 23 return age; 24 } 25 26 public void setAge(int age) { 27 this.age = age; 28 } 29 30 @Override 31 public String toString() { 32 return "User{" + 33 "id=" + id + 34 ", name='" + name + '\'' + 35 ", age=" + age + 36 '}'; 37 } 38 }
4. 编写测试代码
1 import org.apache.ibatis.io.Resources; 2 import org.apache.ibatis.session.SqlSession; 3 import org.apache.ibatis.session.SqlSessionFactory; 4 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 5 import org.junit.Test; 6 7 import java.io.IOException; 8 import java.io.InputStream; 9 10 public class MybatisFirst { 11 @Test 12 public void findUserByIdTest() throws IOException { 13 // 使用类加载器加载mybatis-config.xml配置文件. 14 InputStream inputSteam = Resources.getResourceAsStream("mybatis-config.xml"); 15 // 通过配置文件创建会话工厂 16 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputSteam); 17 // 通过会话工厂获取与DB连接的会话 18 SqlSession sqlSession = sqlSessionFactory.openSession(); 19 // 通过会话执行SQL语句,注意selectOne的两个参数, 20 // 第一个参数:test.findUser - 使用namespace + '.' + statmentID获取要执行的SQL用语句 21 // 第二个参数:查询条件 22 // 获取结果,并将结果封装成User对象 23 User user = sqlSession.selectOne("test.findUser", 1); 24 // 打印对象内容 25 System.out.println(user); 26 // 关闭会话 27 sqlSession.close(); 28 } 29 }
四. 执行结果