JPA查询单个字段和多个字段返回类型总结
原文地址:https://blog.csdn.net/weixin_40326509/article/details/80865646
在使用springboot中,需要使用JPQL和SQL去查询记录。
获取一整条记录,返回的类型就是对应的实体类或者实体类的集合。
当不是全部字段时,返回类型就不能是实体类了。
以下是用JPQL和SQL获取单个字段或多个字段的返回类型:
JPA查询单个字段:
@Query(value="select age from User u where u.name=?1")
T find(String userName);
当只有一条记录时,T可以是查询字段对应的类型,这里是String;也可以是Object;同时也可以用List表示,这里是List<String>或者List<Object>。
Notes:如果T是Object[],但是在提取元素使用的时候,不能是
String age=(String)find(String userName),运行时报object类型不能转换成XXX类型,可能需要instanceof 判断一下吧。
直接打印 System.out.println(find(String userName)[0]),会是一个object对象,并不是age的值。
当有多条记录时,T用List表示,这里是List<String>或者List<Object>。或者是List<Object[]>。
JPA查询对个字段:
@Query(value="select age,sex from User u where u.name=?1")
T find(String userName);
无论返回的是单条记录还是多条记录,T 都只能是List<Object[]>。
Notes:返回多个字段并且是单条记录的时候,T很自然的就会用Object[],这时候这个数组的长度永远只会是1,并且还会有类型转换问题,这是个坑。
总结:
单个字段单条记录时,返回类型最好用对应字段的类型或者Object。
单个子弹多条记录时,返回类型最好用List<Object>或者List<字段对应类型>。
多个字段时,不论是多条记录还是单条记录,返回类型都应该是List<Object[]>
---