Springboot使用QueryDsl实现融合数据查询

Springboot+QueryDsl技术
1、添加依赖
<!--基于JPA-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--QueryDSL支持-->
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <scope>provided</scope>
</dependency>
<!--QueryDSL支持-->
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>
2、添加配置
@Configuration
public class PeopleQueryConfig {
  @Bean
  public JPAQueryFactory jpaQuery(EntityManager entityManager) {
    return new JPAQueryFactory(entityManager);
  }
}
3、添加实体类
@Data
@Entity
@Table(name = "t_msg_log")
public class MsgLog extends PkUUID implements Serializable {
 
  private static final long serialVersionUID = -1479947068453421077L;
 
  @Column(name = "mobile", length = 16)
  private String mobile;
 
  @Column(name = "openid", length = 64)
  private String openid;
 
  @Column(name = "tsrname", length = 64)
  private String tsrname;
 
  @Column(name = "msg_direction", length = 2)
  @Convert(converter = MsgDirectionConverter.class)
  private MsgDirection msgDirection;
 
  @Column(name = "msg_type", length = 16)
  @Enumerated(EnumType.STRING)
  private MsgType msgType;
 
  @Column(name = "msg_channel", length = 2)
  @Convert(converter = MsgChannelConverter.class)
  private MsgChannel msgChannel;
 
  @Lob
  @Column(name = "msg_content")
  private String msgContent;
 
  @Column(name = "is_passive")
  private Boolean isPassive;
 
  @Column(name = "status", length = 2)
  @Convert(converter = MsgStatusConverter.class)
  private MsgStatus status;
 
  @Column(name = "send_time")
  private Date sendTime;
 
  @Column(name = "schedule_flag", length = 2)
  @Convert(converter = ScheduleFlagConverter.class)
  private ScheduleFlag scheduleFlag;
 
  @Column(name = "src_msg_id")
  private String srcMsgId;
 
  /**
   * enum
   */
  public enum MsgType {
    text, image, video, voice, news, link, template, location
  }
 
  @RequiredArgsConstructor
  public enum MsgDirection implements ValuedEnum<String> {
    User2Agent("0"), Agent2User("1");
    @Getter
    private final String value;
  }
 
  @RequiredArgsConstructor
  public enum MsgChannel implements ValuedEnum<String> {
    SMS("0"), WECHAT("1");
    @Getter
    private final String value;
 
  }
 
  @RequiredArgsConstructor
  public enum MsgStatus implements ValuedEnum<String> {
    Success("1"), Failure("-1");
    @Getter
    private final String value;
  }
 
  @RequiredArgsConstructor
  public enum ScheduleFlag implements ValuedEnum<String> {
    ScheduledMsg("0"), InstantMsg("1");
    @Getter
    private final String value;
  }
 
 
}

4、JPA-DAO类

DAO 类继承QueryDslPredicateExecutor

@Repository
public interface MsgLogRepository extends JpaRepository<MsgLog,String>,QueryDslPredicateExecutor<MsgLog>{
 
}
5、Controller
@RestController
@RequestMapping("/msgLog/")
public class MsgLogController {
  private static final Logger LOGGER = LoggerFactory.getLogger(MsgLogController.class);
 
  @Autowired
  private MsgLogRepository msgLogRepository;
 
  /**
   * 根据条件查询回话内容
   * @param predicate
   * @return
   */
  @RequestMapping(value = "list")
  public List<MsgLogResp> list(@QuerydslPredicate(root = MsgLog.class) Predicate predicate){
    Iterable<MsgLog> msgLogs = msgLogRepository.findAll(predicate);
    LOGGER.info("msgLogs = "+ JsonUtil.toJson(msgLogs));
 
    List<MsgLog> msgLogList = new ArrayList<>();
    msgLogs.forEach((MsgLog msgLog)-> msgLogList.add(msgLog));
    return msgLogList.stream().map(new Function<MsgLog, MsgLogResp>() {
      @Nullable
      @Override
      public MsgLogResp apply(@Nullable MsgLog msgLog) {
        return new MsgLogResp(msgLog);
      }
    }).collect(Collectors.toList());
  }
 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,目前还没有Spring Boot 3的版本发布,最新的版本是Spring Boot 2.5.4。QueryDSL是一个用于构建类型安全的SQL查询的框架,它可以与Spring Boot集成使用。在Spring Boot使用QueryDSL可以方便地进行数据查询操作,而不需要编写原生的SQL语句。 要在Spring Boot使用QueryDSL,首先需要添加相关的依赖。在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-core</artifactId> <version>5.0.0</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>5.0.0</version> </dependency> ``` 接下来,需要配置QueryDSL的插件,以生成Q类文件。在pom.xml文件添加以下插件配置: ```xml <build> <plugins> <plugin> <groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 然后,在你的实体类使用QueryDSL的注解来定义查询条件。例如: ```java @Entity public class User { @Id private Long id; private String name; private Integer age; // getters and setters } ``` 接下来,运行`mvn clean compile`命令,生成Q类文件。 最后,在你的Repository接口使用QueryDSL进行查询操作。例如: ```java @Repository public interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> { } ``` 现在你可以在Service或Controller使用UserRepository进行查询操作了。例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getUsersByName(String name) { QUser qUser = QUser.user; return (List<User>) userRepository.findAll(qUser.name.eq(name)); } } ``` 这样就可以根据name字段进行查询了。 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值