快速上手
- 引入mybatis和mysql-connector依赖
- 创建mybatis配置文件,配置数据库链接参数,以及mapper文件地址
- 配置mapper文件,写入需要执行的sql语句
- 创建输入流读取mybatis配置文件
- 通过所输入流,使用SqlSessionFactoryBuilder对象的build方法创建SqlSessionFactory对象
- 通过SqlSessionFactory对象的openSession方法开启java程序与数据库的一个会话(sqlSession)
- 调用sqlSession中的select等方法传入在mapper文件中指定的sqlId来调用该sql
- 从该例子可以看出,Mybatis所构建的是实体类数据操作接口-实际数据库操作语句的结构模式
- 实体类中描述了数据库中的属性,通过自动映射机制,映射到对应表的列中
- 数据操作接口,这里称为mapper接口,定义了类对于数据库的行为(增删改查),其可以看作是实体类对象与数据操作之间的桥梁,用来联系java对象和xml配置文件
- 实际数据库操作语句通常存放在xml文件中,用之前提到的接口中的方法名来作为id形成:实体类-接口方法-sql语句的对应关系,使得客户端程序员可以使用方法来调用所对应的sql语句,形成所谓的面向对象编程思维。
准备数据模型
CREATE DATABASE `mybatis-example`;
USE `mybatis-example`;
CREATE TABLE `t_emp`(
emp_id INT AUTO_INCREMENT,
emp_name CHAR(100),
emp_salary DOUBLE(10,5),
PRIMARY KEY(emp_id)
);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("li",111.11);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("zhang",222.22);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("wang",333.33);
项目搭建
依赖文件与实体类
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
public class Employee {
private Integer empId;
private String empName;
private Double empSalary;
}
Mapper接口与MapperXML文件
- MyBatis框架下SQL语句编写位置发生改变,从原来的Java类改成XML或者是注解定义,推荐使用XML编写SQL语句
- MyBatis中的Mapper接口相当于Dao层,区别在于Mapper只需要建立接口,不需要提供实现类,具体的SQL写道Mapper文件中
package com.atli.mapper;
import com.atli.pojo.Employee;
public interface EmployeeMapper {
Employee selectEmployee(Integer empId);
}
- 在编写时注意方法名与SQL的id一致
- resultType等配置需要全类名(该配置文件是由流读入的)
- 方法返回值和resultType一致
- 方法的参数和SQL的参数一致
- 接口的全类名和映射配置文件的名称空间一致
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atli.mapper.EmployeeMapper">
<select id="selectEmployee" resultType="com.atli.pojo.Employee">
select emp_id empId,emp_name empName, emp_salary empSalary from
t_emp where emp_id = #{empId}
</select>
</mapper>
MyBaits配置文件
- 用于配置数据库连接信息,性能配置,mapper.xml配置等
- 习惯上命名为mybatis-config.xml,整合Spring后可以不用
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/EmployeeMapper.xml"/>
</mappers>
</configuration>
运行测试
public class MyBatisTest {
@Test
public void testSelectEmployee() throws IOException {
String mybatisConfigFilePath = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(mybatisConfigFilePath);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession();
EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
Employee employee = employeeMapper.selectEmployee(1);
System.out.println("employee = " + employee);
session.commit();
session.close();
}
}