基于spring data jpa @query返回map的踩坑记录
作者:Cumtvictor 时间:2023-11-27 22:51:00
spring data jpa @query返回map踩坑记录
最近用spring data jpa,网上看的一些教程,有的说是返回的Object[]数组,有的说是直接返回的对象,亲身验证了一下,发现主要看写法和返回结果。
用的版本是这样的:
dao代码如下:
public interface UserRepository extends JpaRepository<User, Integer> {
/**
* 查询某些具体列,用Object[]数组接收
* @param realName
* @return
*/
@Query(value = "select u.userId,u.userName,u.realName from User u where u.realName = :realName")
public Object[] getUserByRealName2(@Param("realName") String realName);
/**
* 查询整个实体对象所有信息,可以直接用实体对象接收
* @param realName
* @return
*/
@Query(value = "select u from User u where u.realName = :realName")
public User getUserByRealName3(@Param("realName") String realName);
/**
* 返回List<Map>信息
* @param realName
* @return
*/
@Query(value = "select new map(u as user) from User u where u.realName = :realName")
public List<Map<String, Object>> getUserByRealName(@Param("realName") String realName);
/**
* 返回map对象
* @param realName
* @return
*/
@Query(value = "select new map(u.realName as userName,o.orgName as orgName) from User u, Org o where u.realName = :realName")
public Map<String, Object> getUserByRealName1(@Param("realName") String realName);
}
测试的代码如下,完全没什么问题。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:conf/root-context.xml"})
public class UserDaoTest {
@Autowired
private UserRepository userRepository;
@Test
public void test() {
Object[] u2 = userRepository.getUserByRealName2("admin");
User u3 = userRepository.getUserByRealName3("admin");
List<Map<String, Object>> u = userRepository.getUserByRealName("test");
String userName = ((User) u.get(0).get("user")).getRealName();
System.out.println(userName);
Map<String, Object> u1 = userRepository.getUserByRealName1("admin");
String name = ((User) u1.get("userName")).getRealName();
System.out.println(name);
assert(userName.equals("admin"));
}
}
设置JPA的Query返回Map对象
说明正常执行jpa查询的时候需要传一个对应实体进行映射返回的数据,这样有时候如果一个sql是复合sql关联很多表,就需要新建实体有点麻烦,通过下面方式就能将返回结果映射成map。
这样就能随意获取返回结果的内容
Query query = this.entityManager.createNativeQuery(sql);
//设置JPA的Query返回Map对象
query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).setParameter("createuser", userInfo.getUsercode()).setParameter("type", type);
List<Map<String,String>> res = query.getResultList();
来源:https://blog.csdn.net/ghhgc/article/details/98951792
标签:spring,data,jpa,@query,map
0
投稿
猜你喜欢
C#创建临时文件的方法
2023-06-16 14:32:36
Redis6搭建集群并在SpringBoot中使用RedisTemplate的实现
2023-10-31 14:48:05
Android手动检查并申请权限方法
2023-08-04 23:14:17
Android TextView中文字通过SpannableString设置属性用法示例
2023-07-26 07:11:51
MyBatis-Plus 查询返回实体对象还是map
2023-11-28 03:20:19
Android布局之帧布局FrameLayout详解
2023-08-07 04:45:29
详解Java设计模式——命令模式
2023-11-23 05:00:07
25行Java代码将普通图片转换为字符画图片和文本的实现
2023-11-24 02:04:26
RxJava2.x实现定时器的实例代码
2023-08-06 17:41:01
解决Spring Cloud feign GET请求无法用实体传参的问题
2023-11-17 14:14:05
Java如何跳过https的ssl证书验证详解
2023-08-24 11:34:56
jdk8使用stream实现两个list集合合并成一个(对象属性的合并)
2023-08-05 16:49:30
Java应用开源框架实现简易web搜索引擎
2023-08-22 20:20:54
Flutter网络请求的3种简单实现方法
2023-06-21 10:53:22
Hibernate一级缓存和二级缓存详解
2023-11-16 11:58:11
Android中通过RxJava进行响应式程序设计的入门指南
2023-06-27 08:17:46
Android SharedPreferences数据存储详解
2023-08-05 13:32:47
Android 清除SharedPreferences 产生的数据(实例代码)
2023-07-06 15:48:52
Java SpringMVC框架开发之数据导出Excel文件格式实例详解
2023-11-10 21:11:18
Java 归并排序算法、堆排序算法实例详解
2023-11-25 09:43:25