• Mybatis框架学习_3_基于约定或动态代理实现增删改查


    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 文件中的标签进行约定;
  • 相关阅读:
    Codeforces Round #299 (Div. 2) B. Tavas and SaDDas 水题
    Codeforces Round #299 (Div. 2) A. Tavas and Nafas 水题
    Codeforces Round #262 (Div. 2) E. Roland and Rose 暴力
    2015 UESTC 数据结构专题N题 秋实大哥搞算数 表达式求值/栈
    hdu 3340 Rain in ACStar 线段树区间等差数列更新
    hust 1385 islands 并查集+搜索
    2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
    2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈
    2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交
    2015 UESTC 数据结构专题D题 秋实大哥与战争 SET的妙用
  • 原文地址:https://www.cnblogs.com/haibaowang/p/11858586.html
Copyright © 2020-2023  润新知