JPA的Dto Projection驼峰命名问题(未解决)

JPA在做查询的时候,默认是查询全部的字段,当想要查询部分字段的时候,就需要做字段映射,最简单的办法就是使用Map<String, Object>充当映射。见如下代码:

@Query(value = "select aid, article_name, author_id, author_username, description, modified_time, read_count, cover, likes_count " +
            "from article where author_username = ?1 and is_delete = 0", nativeQuery = true)
List<Map<String, Object>> findAllArticlesByUsername(String username);
另一种方法是使用Dto映射

做项目遇到一个问题:
在使用Jpa映射的时候:
Dto接口

package com.gsjt.******.projection;
import java.util.Date;

public interface ArticleBasicDto {
    Integer getAid();
    String getArticleName();
    Integer getAuthorId();
    String getAuthorUsername();
    String getDescription();
    Date getModifiedTime();
    Integer getReadCount();
    String getCover();
}

数据库字段
在这里插入图片描述
Repository接口中的查询方法

@Query(value = "select aid, article_name, author_id, author_username, description, modified_time, read_count, cover from article where author_id = ?1", nativeQuery = true)
List<ArticleBasicDto> findAllArticlesByUid(Integer uid);

得到的结果
在这里插入图片描述

可以看到只要是有驼峰命名的数据库字段映射都找不到为null,没有驼峰命名的字段就没有问题。

按照其他博客的解法:
http://www.javashuo.com/article/p-ejhcjlbk-nq.html
https://www.cnblogs.com/412013cl/p/10868041.html

暂时没有解决!!!

留作疑问

暂时修改Dto接口类的命名解决
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JPAProjection是一种用于查询结果集的机制,用于选择实体类的部分属性或者聚合函数的返回结果,以满足不同的业务需求。下面是几个Projection的用法案例: 1.选择实体类的部分属性 ```java public interface UserProjection { String getName(); Integer getAge(); } @Repository public interface UserRepository extends JpaRepository<User, Long> { List<UserProjection> findByName(String name); } ``` 这段代码中,UserProjection是一个接口,其中定义了需要查询的实体属性的getter方法。在UserRepository中,调用findByName方法时,返回的是UserProjection类型的List集合,其中只包含了name和age两个属性。 2.使用构造函数表达式 ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT new com.example.demo.projection.UserProjection(u.name, u.age) FROM User u WHERE u.name = ?1") List<UserProjection> findByName(String name); } public class UserProjection { private String name; private Integer age; public UserProjection(String name, Integer age) { this.name = name; this.age = age; } // getters and setters } ``` 这段代码中,使用构造函数表达式创建UserProjection对象,可以查询实体类的部分属性或者聚合函数的返回结果。同时也可以在查询结果中添加计算字段,例如:`SELECT new com.example.demo.projection.UserProjection(u.name, u.age+1) FROM User u WHERE u.name = ?1`。 3.使用@Value注解 ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT u.name AS name, u.age AS age FROM User u WHERE u.name = ?1") List<UserProjection> findByName(String name); } public interface UserProjection { @Value("#{target.name}") String getName(); @Value("#{target.age}") Integer getAge(); } ``` 这段代码中,使用@Value注解从查询结果中获取实体属性的值,可以查询实体类的部分属性或者聚合函数的返回结果。同时也可以在查询结果中添加计算字段,例如:`SELECT u.name AS name, u.age+1 AS age FROM User u WHERE u.name = ?1`。 4.使用接口默认方法 ```java public interface UserProjection { String getName(); Integer getAge(); default String getFullName() { return getName() + "(" + getAge() + ")"; } } @Repository public interface UserRepository extends JpaRepository<User, Long> { List<UserProjection> findByName(String name); } ``` 这段代码中,定义了UserProjection接口的默认方法getFullName,可以在查询结果中添加计算字段。在UserRepository中,调用findByName方法时,返回的是UserProjection类型的List集合,其中包含了name、age和fullName三个属性。 以上就是Projection的几个用法案例。Projection可以灵活地选择实体类的部分属性或者聚合函数的返回结果,以满足不同的业务需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值