1.简介

上面第 2 章学习,讲解的方式为 基础配置文件实现 CRUD 的方式,但是确是非官方推荐的做法,Mybatis 官方推荐的是:mapper 动态代理方式实现 CRUD(即 Myabtis 的接口开发);

  •  mapper 动态代理方式实现 CRUD 的实现原则:约定优于配置,配置优于硬编码;
  • 约定的目标:省略掉原编码中的 statement(举例:String statement = "namespace."+"select.id"),即根据约定,直接可以定位出 mapper.xml 文件中指定的 SQL 语句;

2.实现步骤

  • 第一步:导入 jar 包,创建表和实体类过程不再赘述;
  • 第二步:基于 实体类创建对应的接口,需要遵循如下配置:

       ▶约定【1】:接口的名字必须与 mapper.xml 文件中的 namespace 的值一致,实现 接口 和 指定 xml 文件的映射关系;

                         

public interface EmployeeMapper {
}

 

  • 第三步:在上面定义的接口中定义方法;定义的方法必须与 mapper.xml 文件中的 CRUD 标签一一进行映射,即需要满足如下约定:

       ▶约定【1】:方法名必须和 mapper.xml 文件中的 id 值一致;

                      ▶约定【2】:方法的输入参数必须和 mapper.xml 文件中的 parameterType 类型一致;

                      ▶约定【3】:方法的返回值类型必须和 mapper.xml 文件中的 resultType 类型一致;

              如我们现有 mapper.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">
<!--namespace为映射mapper文件的全路径名,不要写.xml后缀-->
<mapper namespace="com.entity.employeeMapper">
    <select id="queryEmployeeById" resultType="com.entity.Employee" parameterType="int">
    </select>
</mapper>

      此时在接口中定义的方法如下:

public interface EmployeeMapper {
    Employee queryEmployeeById(int empId);
}
  •  第四步:编写测试类,验证动态代理实现 CRUD

    ★【1】第一种通过动态代理实现根据职员编号查询到该职员;

    public static void queryOneEmployee() throws Exception {
        //第一步:加载 Mybatis-config.xml 文件,并使用 字符串输入流 Reader 进行读取;
        Reader reader = Resources.getResourceAsReader( "mybatis-config.xml" );
        //第二步:创建 SqlSession 的单例工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build( reader );
        //第三步:创建访问数据库的Session--connection
        SqlSession session = sessionFactory.openSession();
        //第四步:通过反射找到对应的接口
        EmployeeMapper employeeMapper = session.getMapper( EmployeeMapper.class );
        //第五步:执行接口中定义的方法
        Employee employee = employeeMapper.queryEmployeeById( 1 );
        System.out.println( "职工编号为1的员工的基本信息为::" + employee );
        //第六步:关闭会话
        session.close();
    }

3.总结

基于动态代理实现 CRUD 的过程如下:

  • 第一:接口名要和对应的映射 xml 文件命名一致,基于接口可以映射到该 xml 文件;
  • 第二:接口中定义的方法要依据 mapper.xml 文件中的标签进行约定;