springboot hibernate jpa createNativeQuery使用原生sql查询并转换为pojo的model对象,方便好用

  • 先把entityManager.createNativeQuery生成的jpa接口的Query 强转为hibernateQuery 的query
  • 然后就可以调用hibernate的方法,设置属性,返回的list结果就是Map<String,Object>的有列名称columnName的对象
  • 然后用jackson的ObjectMapper().convertValue把map转换为pojo对象
  • 基本和jdbctemplate一样了
       //第一种 tuple
       Query query = entityManager.createNativeQuery("select * from proj limit 12;",  Tuple.class);
        List<Tuple> tuples = query.getResultList();
        List<Map<String, Object>> result = new ArrayList<>();
        for (Tuple single : tuples) {
            Map<String, Object> tempMap = new HashMap<>();
            for (TupleElement<?> key : single.getElements()) {
                tempMap.put(key.getAlias(), single.get(key));
            }
            result.add(tempMap);
        }

		// tuple 转对象
		List<Proj> projs = tuples.stream().map(t -> {
            Proj p=new Proj();
            p.setId(Long.valueOf(t.get(0, BigInteger.class).toString()));
            p.setProname(t.get("proname", String.class));
            return p;
        }).collect(Collectors.toList());

		//第二种
		org.hibernate.query.Query query = entityManager.createNativeQuery("select * from proj limit 10;").unwrap(org.hibernate.query.Query.class);
        query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
        List<Map<String,Object>> result = query.list();
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用JPA进行原生SQL查询时,可以借助Spring Data JPA的`@Query`注解和`nativeQuery=true`属性来实现。`@Query`注解是用来声明查询语句的,而`nativeQuery=true`则表示使用原生SQL查询。具体步骤如下: 1. 在Repository接口中定义一个方法,并使用`@Query`注解来声明原生SQL查询语句。例如:`@Query(value = "SELECT * FROM table_name WHERE condition", nativeQuery = true)` 2. 在方法中使用JPA的命名参数或占位符来传递参数。例如:`@Query(value = "SELECT * FROM table_name WHERE column_name = :param", nativeQuery = true)` 3. 如果需要返回实体对象,可以在Repository接口中定义一个与查询结果对应的构造函数,并在查询语句中使用`NEW`关键字来创建实体对象。例如:`@Query(value = "SELECT NEW com.example.EntityName(column1, column2) FROM table_name WHERE condition", nativeQuery = true)` 4. 调用Repository接口中定义的方法来执行原生SQL查询并获取结果。 需要注意的是,使用原生SQL查询可能会降低代码的可移植性,并且需要仔细处理SQL注入等安全问题。因此,在使用原生SQL查询时,建议谨慎使用,并遵循安全编码规范。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [spring boot jpa原生sql报Cannot resolve table错误解决方法](https://download.csdn.net/download/weixin_38622149/12744996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JPA用法与原声SQL](https://blog.csdn.net/qq_40206199/article/details/84860945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值