zoukankan      html  css  js  c++  java
  • 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 文件中的标签进行约定;
  • 相关阅读:
    利用 Avisynth 2.5.8 的 ColorKeyMask 功能实现视频抠像
    Codebook model 视频抠像 xp sp3 + vs2005 + OpenCV 2.3.1
    call、apply、bind
    网络模型
    搜索关键字变色突出显示
    面向过程与面向对象编程的区别和优缺点
    webpack打包体积优化---插件 webpack-bundle-analyzer
    百度搜索关键词特效
    DNS原理及其解析过程
    亿级高并发数据库调优与最佳实践法则
  • 原文地址:https://www.cnblogs.com/haibaowang/p/11858586.html
Copyright © 2011-2022 走看看