基于spring data jpa @query返回map的踩坑记录

 更新时间:2021年11月22日 10:01:48   作者:Cumtvictor  
这篇文章主要介绍了基于spring data jpa @query返回map的踩坑记录,具有很好的参考价值,如有错误或未考虑完全的地方,望不吝赐教

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();

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java多线程及线程安全实现方法解析

    Java多线程及线程安全实现方法解析

    这篇文章主要介绍了Java多线程及线程安全实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 深入了解Java中的Filter过滤器

    深入了解Java中的Filter过滤器

    Filter也称之为过滤器,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。下面我们来简单学习一下吧
    2019-05-05
  • Java套接字(Socket)网络编程入门

    Java套接字(Socket)网络编程入门

    这篇文章主要介绍了Java套接字(Socket)网络编程入门,Socket可以理解为是对TCP/IP协议的抽象,需要的朋友可以参考下
    2015-10-10
  • mybatis3使用@Select等注解实现增删改查操作

    mybatis3使用@Select等注解实现增删改查操作

    这篇文章主要介绍了mybatis3使用@Select等注解实现增删改查操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • maven依赖冲突加载顺序与解决

    maven依赖冲突加载顺序与解决

    这篇文章主要介绍了项目中同时引用了相同依赖的不同版本,也就是冲突,maven 是如何选择的,了解了有助于解决项目中的依赖问题,需要的朋友可以参考下
    2024-01-01
  • Java中的SpringAOP、代理模式、常用AspectJ注解详解

    Java中的SpringAOP、代理模式、常用AspectJ注解详解

    这篇文章主要介绍了Java中的SpringAOP、代理模式、常用AspectJ注解详解,Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务,例如审计和事务管理进行内聚性的开发,需要的朋友可以参考下
    2023-09-09
  • Springboot工具类ReflectionUtils使用教程

    Springboot工具类ReflectionUtils使用教程

    这篇文章主要介绍了Springboot内置的工具类之ReflectionUtils的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java 字节数组类型(byte[])与int类型互转方法

    Java 字节数组类型(byte[])与int类型互转方法

    下面小编就为大家带来一篇Java 字节数组类型(byte[])与int类型互转方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Spring Boot实现消息的发送和接收使用实战指南

    Spring Boot实现消息的发送和接收使用实战指南

    这篇文章主要为大家介绍了Spring Boot实现消息的发送和接收使用实战指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 在Spring Boot中使用swagger-bootstrap-ui的方法

    在Spring Boot中使用swagger-bootstrap-ui的方法

    这篇文章主要介绍了在Spring Boot中使用swagger-bootstrap-ui的方法,需要的朋友可以参考下
    2018-01-01

最新评论