SpringBoot——jpa中根据Named_query和自定义查询的差异

版权声明:本文为博主原创文章,未经博主允许不得转载。 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%"));
    }

手动拼接参数。

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tangyaya8/article/details/83692803