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