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

原文地址:https://www.cnblogs.com/niujifei/p/15242253.html