JAVAWEB--Mybatis03

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全栈知识,希望能够和大家共同进步。

相关推荐
李先静6 分钟前
AWTK-WEB 快速入门(1) - C 语言应用程序
c语言·开发语言·前端
weixin_4467077420 分钟前
IDEA2024 maven构建跳过测试
java·maven
开朗觉觉26 分钟前
RabbitMQ高可用&&延迟消息&&惰性队列
java·rabbitmq·java-rabbitmq
zmd-zk27 分钟前
flink学习(3)——方法的使用—对流的处理(map,flatMap,filter)
java·大数据·开发语言·学习·flink·tensorflow
CSDN专家-赖老师(软件之家)30 分钟前
养老院管理系统+小程序项目需求分析文档
vue.js·人工智能·小程序·mybatis·springboot
昵称202130 分钟前
flink1.16+连接Elasticsearch7官方例子报错解决方案
java·flink·es7
圆蛤镇程序猿31 分钟前
【什么是SpringMVC】
开发语言
爱编程的小生42 分钟前
Easyexcel(6-单元格合并)
java·excel
2301_811274311 小时前
springboot嗨玩旅游网站
spring boot·后端·旅游
Domain-zhuo1 小时前
JS对于数组去重都有哪些方法?
开发语言·前端·javascript