版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tangyaya8/article/details/83692803
问题
用自定义的查询和用Idea提示生成的查询方法模糊查询,打印出来的SQL一模一样,但是查询结果不一样
@Query("SELECT p FROM Person p WHERE p.firstName LIKE ?1%")
public List<Person> findPersonBySort(String userName, Sort sort);
//用Query Creation查询
List<Person> findPersonByFirstNameLikeOrderByLastNameDesc(String name);
查询结果:
从查询结果可以看出,第一个查询出来了我们想要的结果,第二方法却查出来的是空;
问题原因:
既然最终生成的sql语句一样,说明在放置参数的时候,两个不一样。
我们知道,模糊查询的时候我们要把模糊条件查询的占位符当做参数传进mysql中,让mysql帮我们解析。
因为方法一,写了%
,但是方法2中like后面应该直接跟着的是查询条件,而没有%占位符;
解决问题:
@Test
public void getPersonLike() {
System.out.println(dao.findPersonBySort("ta", new Sort(Sort.Direction.DESC, "lastName")));
System.out.println(dao.findPersonByFirstNameLikeOrderByLastNameDesc("ta%"));
}
手动拼接参数。
运行结果: