Mybatis映射
什么是映射器
MyBatis的映射器就是用来解决这一问题,映射器其实是一个Interface接口,我们通过编写简单的映射器接口,就可以将我们之前在Dao中做的重复的,看起来比较低级的代码给替换掉。也就是说我们以后不用向之前那样写代码,而是直接调用映射器接口即可完成SQL的调用。我们可以理解为 这个映射器 底层使用了动态代理的方式将复杂的代码进行了处理,屏蔽了细节。--- 如同JPA的接口
创建domain
java
public class Employee{
private Long id;
private String username;
private Integer age = 0;
private Boolean sex;
//...
}
创建接口映射器
创建实体类接口,我们一般给接口命名: XxxMapper ,如 EmployeeMapper ,跟EmployeeMapper.xml同名。
java
import java.util.List;
public interface EmployeeMapper {
int insert(Employee employee);
int updateById(Employee employee);
int deleteById(Long id);
Employee selectById(Long id);
List<Employee> selectAll();
}
创建SQL映射文件
SQL映射文件的namespace必须和 映射器接口的全限定名一直,这个非常重要,因为我们在调用映射器接口的时候,底层是通过该接口的 ==全限定名+方法名== 去匹配 SQL映射文件的==namespace+id==。
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">
<mapper namespace="org.test.mybatis._02_mapper.mapper.EmployeeMapper">
<resultMap id="baseResultMap" type="org.test.mybatis._02_mapper.domain.Employee">
<id column="id" property="id" />
<result column="username" property="username"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
</resultMap>
<select id="selectAll" resultMap="baseResultMap" >
select
id,
username,
age,
sex
from employee
</select>
</mapper>
注意:这里是另外一个Mapper,对应的是Employee,所以所有的 有用到实体类的地方都要使用Employee的全限定名。
再次强调:底层是通过映射器接口的 ==全限定名+方法名== 去匹配 SQL映射文件的==namespace+Id==,所以:
-
namespace 需要和 映射器接口的全限定名一致
-
sql的id必须和 映射器的 方法名一致。
这里暂时写了一个查询所有的方法,同学们自行完成其他的几个方法
注册Mapper
修改mybatis-config.xml文件,添加<mappers> , 注意修改成自己的路径
XML
<mappers>
<mapper resource="org/test/mybatis/mapper/ProductMapper.xml"/>
<mapper resource="org/test/mybatis/mapper/EmployeeMapper.xml"/>
</mappers>
实现CRUD
java
@Test
public void selectAll() {
try(SqlSession sqlSession = MyBatisUtil.openSession()){
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
employeeMapper.selectAll().forEach(e ->{
System.out.println(e);
});
}
}
写在最后:mybatis花了较多文章来写,因为其十分重要。后续将分享高级SQL的相关知识,笔者小,中,大厂均有面试经历,坚持每日分享JAVA全栈知识,希望能够和大家共同进步。