10.2 MyBatis动态SQL 10.2.6 bind标签
bind
标签元素可以从OGNL
表达式创建一个变量并将其绑定到上下文。
实例
mapper接口方法
1
| List<Employee> seletEmployeeLikeName(Employee employee);
|
Mapper.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <select id="seletEmployeeLikeName" resultType="domain.Employee"> <bind name="pattern" value="_parameter.getName()+'__'"/> select * from tb_employee where loginname like #{pattern} </select>
|
bind标签解释
创建OGNL
表达式并绑定到上下文的pattern
属性中
_parameter
表示seletEmployeeLikeName
方法传递的参数(Employee
对象)
_parameter.getName()
表示调用参数的getName
方法,也就是,调用Employee
对象的getName()
方法
- 两个下划线
__
是like
子句的通配符,
- 一个下划线可以匹配一个字符,
- 两个下划线表示可以匹配两个字符
like
子句还有一个通配符%
(百分号)这个通配符可以匹配任意多个字符
- 整个表达式表示匹配以
_parameter.getName()
获取到的员工名字开头,并且后面还有两个任意字符的字符串
测试类
/MyDynamicSQLTest/src/test/BindTest.java1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class BindTest { public static void main(String[] args) { SqlSession sqlSession = null; sqlSession = SqlSessionFratoryTools.getSqlSession(); EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class); Employee find = new Employee(); find.setName("xiao"); List<Employee> employees = employeeMapper.seletEmployeeLikeName(find); employees.forEach(employee -> System.out.println(" " + employee)); } }
|
运行结果:
1 2 3 4 5
| DEBUG [main] ==> Preparing: select * from tb_employee where loginname like ? DEBUG [main] ==> Parameters: xiao__(String) DEBUG [main] <== Total: 1 Employee [id=3, loginname=xiaoli, password=xiaoli, name=小丽, sex=女, age=23, phone=123456789123, sal=7800.0, state=active]
|
可以看到,程序已经成功查询出登录名以xiao
开头,并且后面只有两个字符的员工.