springboot +JPA自定义查询返回部分字段的返回值类型,用Integer类型作为模糊查询的条件
今天遇到一个问题记录下来。
使用的是springboot 2.1.1
jpa连接MySQL数据库
数据库表:
我想通过sid的模糊查询来生成下拉列表。
开始想用jpa提供的一种方法名称查询,于是在dao中定义了public List findBySidLike(Integer sid) 方法
但是Integer类型的参数不能在前后添加百分号。把参数改成String类型jpa还不同意,说找不到String类型的sid。郁闷~
后来使用自定义的SQL查询语句
@Query(value=“select sid,sname,clazz,……from subject where sid like concat(’%’,?1,’%’)”)
public List myFunction(String sid)
这样,参数终于可以拼接了。
但是还有问题,报错说结果集某某类型(jpa返回的类型)不能转换为List(我要求返回的类型)。
于是又到网上查,说是要再定义一个类来接受结果等等,没看懂。
后来终于看到不知是哪位大神的记录,说类似这样的查询返回的是List<Map<String,Object>>或List<List>
List<Map<String,Object>>
[
{
"1":a,
"2":b,
"3":c
},
{
"1":a,
"2":b,
"3":c
},
{
"1":a,
"2":b,
"3":c
}
]
List<List<Object>>
[
[a.b.c],
[a.b.c],
[a.b.c]
]
于是将返回值类型改为List<Map<String,Object>>
终于成功。