• MyBatis(五)动态SQL 之 bind绑定


    一、bind 标签

      bind作用:可以将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值。

      在接口中声明方法:

    public List<Employee> getEmpsTestBind(Employee employee);

      在对应xml文件中配置:

        <!--
            bind 将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值
            public List<Employee> getEmpsTestBind(Employee employee);
        -->
        <select id="getEmpsTestBind" resultType="Employee">
            <bind name="_lastName" value="'%' + lastName + '%'"/>
            select * from tbl_employee where last_name like #{_lastName}
        </select>
    
        <select id="getEmpsTestBind" resultType="Employee">
            select * from tbl_employee where last_name like #{lastName}
        </select>

      测试:

      对于没有使用 bind 标签的时候,如果传递的参数 lastName是"%o%",这个时候会自动拼接到SQL中。

         @Test
         public void testBind() throws IOException {
              //1、获取 sqlSessionFactory
              SqlSessionFactory sqlSessionFactory = getsqlSessionFactory();
    
              //2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句
              SqlSession sqlSession = sqlSessionFactory.openSession();
    
              try {
                   EmployeeMapperDynamicSQL mapper = sqlSession.getMapper(EmployeeMapperDynamicSQL.class);
                   Employee emp = new Employee(null, "Tom", null, null);
                   emp.setLastName("%o%");
                   List<Employee> emps = mapper.getEmpsTestBind(emp);
                   emps.forEach(System.out::println);
              } finally {
                   sqlSession.close();
              }
         }

      如果使用了 bind 标签,如果传递的参数 lastName 是 "o",我们可以在bind标签里面进行组合并将其绑定上下文,等到用的时候直接用 name 获取即可。

       @Test
         public void testBind() throws IOException {
              //1、获取 sqlSessionFactory
              SqlSessionFactory sqlSessionFactory = getsqlSessionFactory();
    
              //2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句
              SqlSession sqlSession = sqlSessionFactory.openSession();
    
              try {
                   EmployeeMapperDynamicSQL mapper = sqlSession.getMapper(EmployeeMapperDynamicSQL.class);
                   Employee emp = new Employee(null, "Tom", null, null);
                   emp.setLastName("o");
                   List<Employee> emps = mapper.getEmpsTestBind(emp);
                   emps.forEach(System.out::println);
              } finally {
                   sqlSession.close();
              }
         }

      bind的用法比较灵活,可以在传入参数的时候固定参数,也可以在标签里面使用bind对参数改造,在实际工作中灵活应用即可。

  • 相关阅读:
    js常用工具函数
    vue-cli跨域问题解决
    charles抓包404问题(左侧不显示配置)
    vuex存储与本地储存(localstorage、sessionstorage)的区别(笔记)
    借助axios的拦截器实现Vue.js中登陆状态校验的思路(笔记)
    cornerstone使用注意点
    本地仓库连接远程仓库,git本地新建项目上传到远程git仓库上正确流程
    做一个不那么差的程序员
    解决 php Call to undefined function shm_attach()
    Redis 常用的数据结构
  • 原文地址:https://www.cnblogs.com/niujifei/p/15242253.html
Copyright © 2020-2023  润新知