ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MyBatis(五)动态SQL 之 bind绑定

2021-09-08 13:03:33  阅读:149  来源: 互联网

标签:sqlSessionFactory bind Employee sqlSession emp SQL MyBatis null


一、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对参数改造,在实际工作中灵活应用即可。

 

标签:sqlSessionFactory,bind,Employee,sqlSession,emp,SQL,MyBatis,null
来源: https://www.cnblogs.com/niujifei/p/15242253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有