Mybatis简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
中文官网地址:http://www.mybatis.org/mybatis-3/zh/index.html
GitHub地址:https://github.com/mybatis/mybatis-3/tree/master/src/site
MyBatis入门
1、准备一个数据库,本例使用的是mysql数据库,建一张员工表(Employee),并且插入一条数据,sql如下:
1 -- ---------------------------- 2 -- Table structure for employee 3 -- ---------------------------- 4 DROP TABLE IF EXISTS `employee`; 5 CREATE TABLE `employee` ( 6 `id` int(11) NOT NULL AUTO_INCREMENT, 7 `last_name` varchar(255) DEFAULT NULL, 8 `gender` char(1) DEFAULT NULL, 9 `email` varchar(255) DEFAULT NULL, 10 PRIMARY KEY (`id`) 11 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 12 13 -- ---------------------------- 14 -- Records of employee 15 -- ---------------------------- 16 BEGIN; 17 INSERT INTO `employee` VALUES (1, 'test', '1', 'test@163.com'); 18 COMMIT;
2、新建一个Maven工程,引入mybatis依赖以及连接mysql数据库依赖
1 <!-- Mybatis --> 2 <dependency> 3 <groupId>org.mybatis</groupId> 4 <artifactId>mybatis</artifactId> 5 <version>3.4.6</version> 6 </dependency> 7 8 <!-- mysql --> 9 <dependency> 10 <groupId>mysql</groupId> 11 <artifactId>mysql-connector-java</artifactId> 12 <version>8.0.13</version> 13 </dependency>
3、添加Mybatis全局配置文件mybatis-config.xml,放在src/main/resources目录下,内容如下:
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 <!-- 配置数据库连接信息 --> 10 <dataSource type="POOLED"> 11 <property name="driver" value="com.mysql.jdbc.Driver" /> 12 <property name="url" value="jdbc:mysql://localhost:3306/test_mybatis?allowPublicKeyRetrieval=true" /> 13 <property name="username" value="admin" /> 14 <property name="password" value="123456" /> 15 </dataSource> 16 </environment> 17 </environments> 18 <mappers> 19 <!-- 添加映射文件到Mybatis的全局配置文件中 --> 20 <mapper resource="mapper/EmployeeMapper.xml" /> 21 </mappers> 22 </configuration>
4、添加映射文件EmployeeMapper.xml到src/main/resources/mapping目录下,内容如下:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <!-- 4 namespace:名称空间 5 id:唯一标识 6 resultType:返回值类型 7 #{id}:从传过来的参数中取出id值 8 --> 9 <mapper namespace="com.hd.test.mapper.EmployeeMapper"> 10 <select id="getEmployeeById" 11 resultType="com.hd.test.pojo.Employee"> 12 select id, last_name lastName, gender, email from employee where id = 13 #{id} 14 </select> 15 </mapper>
5、定义一个Java类Employee.java
1 package com.hd.test.pojo; 2 3 public class Employee { 4 5 private Integer id; 6 private String lastName; 7 private String gender; 8 private String email; 9 public Integer getId() { 10 return id; 11 } 12 public void setId(Integer id) { 13 this.id = id; 14 } 15 public String getLastName() { 16 return lastName; 17 } 18 public void setLastName(String lastName) { 19 this.lastName = lastName; 20 } 21 public String getGender() { 22 return gender; 23 } 24 public void setGender(String gender) { 25 this.gender = gender; 26 } 27 public String getEmail() { 28 return email; 29 } 30 public void setEmail(String email) { 31 this.email = email; 32 } 33 @Override 34 public String toString() { 35 return "Employee [id=" + id + ", lastName=" + lastName + ", gender=" + gender + ", email=" + email + "]"; 36 } 37 38 39 }
8、一定一个测试Mybatis的Java类TestMybatis.java
1 package com.hd.test.mybatis; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSession; 8 import org.apache.ibatis.session.SqlSessionFactory; 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 10 import org.junit.Test; 11 12 import com.hd.test.pojo.Employee; 13 14 15 public class TestMybatis { 16 17 @Test 18 public void test() throws IOException { 19 // 1、根据mybatis全局配置文件,获取SqlSessionFactory 20 String resource = "mybatis-config.xml"; 21 // 使用MyBatis提供的Resources类加载mybatis的配置文件,获取输入流 22 InputStream inputStream = Resources.getResourceAsStream(resource); 23 // 构建sqlSession的工厂 24 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 25 26 // 2、从SqlSession工厂中,获取sqlsession,用来执行sql 27 SqlSession session = sqlSessionFactory.openSession(); 28 try { 29 // 查询selectOne 30 // @param statement Unique identifier matching the statement to use. 一个唯一标识 31 // @param parameter A parameter object to pass to the statement. 参数 32 Employee employee = (Employee) session.selectOne("com.hd.test.mapper.EmployeeMapper.getEmployeeById", 1); 33 // 输出信息 34 System.out.println(employee); 35 } finally { 36 // 关闭session 37 session.close(); 38 } 39 } 40 41 }
8、junit测试方法,输出结果:
接口式编程
1、在上例的基础上编写一个Java接口EmployeeMapper
package com.hd.test.mapper; import com.hd.test.pojo.Employee; public interface EmployeeMapper { public Employee getEmployeeById(Integer id); }
注意,sql配置文件要与接口一一对应
2、编辑测试方法内容如下:
1 @Test 2 public void test() throws IOException { 3 // 1、根据mybatis全局配置文件,获取SqlSessionFactory 4 String resource = "mybatis-config.xml"; 5 // 使用MyBatis提供的Resources类加载mybatis的配置文件,获取输入流 6 InputStream inputStream = Resources.getResourceAsStream(resource); 7 // 构建sqlSession的工厂 8 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 9 10 // 2、从SqlSession工厂中,获取sqlsession,用来执行sql 11 SqlSession session = sqlSessionFactory.openSession(); 12 try { 13 // 3、获取接口的实现对象 14 EmployeeMapper mapper = session.getMapper(EmployeeMapper.class); 15 Employee employee = mapper.getEmployeeById(1); 16 // 输出信息 17 System.out.println(mapper); 18 System.out.println(employee); 19 } finally { 20 // 关闭session 21 session.close(); 22 } 23 }
3、junit测试方法,输出结果: