目标
实现按照姓名进行模糊查询
步骤
1. 复习下 在sql 中模糊查询, 使用 like 关键字 % 任意字符, _ 一个字符
例如 查询 姓张的学生信息
select * from student where sname like '张%'
2. 修改 StudentMapper.java 增加查询方法
/**
* 按照姓名进行模糊查询
* @param name
* @return
*/
List<Student> findByName(String name);
说明:
在mybatis 中实现 模糊查询 有2种方式,
方式1: 使用 concat() 函数, 拼接
方式2: 在sql中 继续用 sname like #{sname} ,但此时要记得把参数进行%拼接
方式1 使用concat()
3. 修改StudentMapper.xml 增加 sql
<!--按照姓名进行模糊查询-->
<select id="findByName" parameterType="string" resultType="student">
select * from student where sname like concat('%',#{sname},'%')
</select>
编写测试类
@Test
public void testFindByName() throws IOException {
//获得SqlSession
SqlSession session = sqlSessionFactory.openSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
List<Student> list = mapper.findByName("凯");
list.forEach((e)->System.out.println(e));
}
测试结果
说明: 这种方式 在 调用时 只 传递 凯 这个字 就可以了, 模糊查询的方式 在sql 中
方式2 传参
修改StudentMapper.xml , 注释掉之前的模糊查询
增加以下内容
<select id="findByName" parameterType="string" resultType="student">
select * from student where sname like #{sname}
</select>
编写测试类
@Test
public void testFindByName2() throws IOException {
//获得SqlSession
SqlSession session = sqlSessionFactory.openSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
List<Student> list = mapper.findByName("%"+"凯"+"%");
list.forEach((e)->System.out.println(e));
}
测试结果
说明: 这种方式 在sql中 继续使用like , 但是调用时 需要用% 组装参数
总结
模糊查询本身需要具备些 sql的相关知识,如果不是很了解,建议学习下。
方式1 和方式2 主要是 在 映射文件上的区分及调用上的不同,但实现结果是一致的。