在进行模糊查询编写SQL语句的时候,如果使用“${}”进行字符串拼接,则无法防止SQL注入问题;
如果使用concat函数进行拼接,则只针对MySQL数据库有效;如果使用的是Oracle数据库,则要使用连接符号“||”。
这样,映射文件中的 SQL 就要根据不同的情况提供不同形式的实现,这显然是比较麻烦的,且不利于项目的移植。 为此,MyBatis提供了< bind>元素来解决这一问题,我们完全不必使用数据库语言,只要使用MyBatis的语言即可与所需参数连接。
代码
select * from t_customer
where
username like #{pattern_username}
述配置代码中,使用< bind>元素定义了一个name为pattern_username的变量,< bind>元素中value的属性值就是拼接的查询字符串,其中_parameter.getUsername()表示传递进来的参数(也可以直接写成对应的参数变量名,如username)。在SQL语句中,直接引用< bind>元素的name属性值即可进行动态SQL组装。
测试 /**
* 元素的使用:根据客户名模糊查询客户信息
*/
@Test
public void findCustomerByNameTest() {
// 通过工具类生成SqlSession对象
SqlSession session = MybatisUtils.getSession();
// 创建Customer对象,封装查询的条件
Customer customer = new Customer();
customer.setUsername("j");
// 执行SqlSession的查询方法,返回结果集
List customers = session.selectList("com.itheima.mapper"
+ ".CustomerMapper.findCustomerByName", customer);
// 输出查询结果信息
for (Customer customer2 : customers) {
// 打印输出结果
System.out.println(customer2);
}
// 关闭SqlSession
session.close();
}
运行结果: