MyBatis(十一)——模糊查询like

关于模糊查询,我们介绍三种方式,像使用$ {} 这种形式虽然也可以实现功能,但是会引起SQL注入,这里就不再赘述了,推荐使用第三种形式。

1、在程序中拼接

在java程序中,把like的内容组装好。 把这个内容传入到sql语句。

接口。方法定义:

List<Student> selectStudentLikeName(String name);

mapper文件:

<select id="selectStudentLikeName" resultType="com.macay.entity.Student">
    select * from student where name like #{name}
</select>

测试类:

@Test
public void selectStudentLikeName() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    StudentDao mapper = sqlSession.getMapper(StudentDao.class);
    String str = "m";
    // String name = "%" + str + "%";
    String name = new StringBuffer("%").append(str).append("%").toString();
    // name = "%m%"
    List<Student> students = mapper.selectStudentLikeName(name);
    System.out.println(students);
    sqlSession.close();
}
2、sql语句中使用空格拼接

sql语句like的格式: where name like “%“空格#{name}空格”%”

接口。方法定义:

List<Student> selectStudentLikeName2(String name);

mapper文件:

<select id="selectStudentLikeName2" resultType="com.macay.entity.Student">
    select * from student where name like "%" #{name} "%"
</select>

测试类:

@Test
public void selectStudentLikeName2() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    StudentDao mapper = sqlSession.getMapper(StudentDao.class);
    List<Student> students = mapper.selectStudentLikeName2("m");
    System.out.println(students);
    sqlSession.close();
}
3、sql语句中使用CONCAT()函数连接参数形式

在MySQL中我们也可以使用CONCAT()拼接字符串:

sql语句like的格式: where name like CONCAT(’%’,#{name},’%’)
接口。方法定义:

List<Student> selectStudentLikeName3(String name);

mapper文件:

<select id="selectStudentLikeName3" resultType="com.macay.entity.Student">
    select * from student where name like CONCAT('%',#{name},'%')
</select>

测试类:

@Test
public void selectStudentLikeName3() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    StudentDao mapper = sqlSession.getMapper(StudentDao.class);
    List<Student> students = mapper.selectStudentLikeName3("m");
    System.out.println(students);
    sqlSession.close();
}
}
注意:

MySQL的concat支持多个参数,但是Oracle的concat只支持两个参数,所有要是数据库是Oracle,相应的SQL也就要改变成:CONCAT(CONCAT(a,b), c) 这种形式。

<select id="selectStudentLikeName3" resultType="com.macay.entity.Student">
    select * from student where name like CONCAT(CONCAT('%', #{name}), '%')
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值