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 文件中的标签进行约定;
  • 相关阅读:
    Ftp、Ftps与Sftp之间的区别
    Previous Workflow Versions in Nintex Workflow
    Span<T>
    .NET Core 2.0及.NET Standard 2.0 Description
    Announcing Windows Template Studio in UWP
    安装.Net Standard 2.0, Impressive
    SQL 给视图赋权限
    Visual Studio for Mac中的ASP.NET Core
    How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
    用于Azure功能的Visual Studio 2017工具
  • 原文地址:https://www.cnblogs.com/haibaowang/p/11858586.html
Copyright © 2011-2022 走看看