首页 > 其他分享 >Querydsl 使用和工具类

Querydsl 使用和工具类

时间:2023-11-21 16:45:53浏览次数:28  
标签:searchFunction return Querydsl public 使用 import 工具 modelEntity persistence

Querydsl 简化使用

1、在使用Querydsl时,需要定义EntityManager EntityManagerFactory 会存在许多重复性的代码,下面将使用进行归口,减少重复的引入操作

import com.blazebit.persistence.Criteria;
import com.blazebit.persistence.CriteriaBuilderFactory;
import com.blazebit.persistence.querydsl.BlazeJPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.ToLongFunction;

/**
 * 用于查询的类;只读
 * @version 1.0
 */
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class SearchService {

    @PersistenceContext
    private final EntityManager entityManager;
    @PersistenceUnit
    private final EntityManagerFactory entityManagerFactory;

    public <R> R search(BiFunction<EntityManager, EntityManagerFactory, R> searchFunction) {
        return searchFunction.apply(entityManager, entityManagerFactory);
    }

    public <R> R search(Function<JPAQueryFactory, R> searchFunction) {
        JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
        return searchFunction.apply(queryFactory);
    }

    public <R> R searchBlaze(Function<BlazeJPAQuery<?>, R> searchFunction) {
        CriteriaBuilderFactory criteriaBuilderFactory = Criteria.getDefault().createCriteriaBuilderFactory(this.entityManagerFactory);
        BlazeJPAQuery<?> queryFactory = new BlazeJPAQuery<>(this.entityManager, criteriaBuilderFactory);
        return searchFunction.apply(queryFactory);
    }

    /**
     * 直接获取EntityManager 进行查询
     */
    public <R> R searchNative(Function<EntityManager, R> searchFunction) {
        return searchFunction.apply(entityManager);
    }

    /**
     * 用于执行更新和删除
     * @param	executeFunction 执行的内容
     * @return   java.lang.Long
     */
    @Transactional(rollbackFor = Exception.class)
    public Long execute(ToLongFunction<JPAQueryFactory> executeFunction) {
        JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
        return executeFunction.applyAsLong(queryFactory);
    }
}

简单使用展示 QClass 和 BooleanBuilder 、Bean 的引入 不进行赘述

public Page<Model> findAll(QueryCommand command) {
        QModelEntity modelEntity = QModelEntity.modelEntity;
        BooleanBuilder builder = builderPredicate(command, modelEntity);
        Pageable pageable = command.getPageable();
        return searchService.search(query -> {
            List<Model> models = query.select(Projections.fields(Model.class,
                    modelEntity.id,
                    modelEntity.orgId,
                    modelEntity.relatedId,
                    modelEntity.type,
                    modelEntity.source,
                    modelEntity.createdAt,
                    modelEntity.createdBy,
                    modelEntity.updatedAt,
                    modelEntity.updatedBy,
                    modelEntity.config
            )).from(modelEntity).where(builder).orderBy(modelEntity.id.desc()).offset(pageable.getOffset()).limit(pageable.getPageSize()).fetch();

            int size = query.select(modelEntity.id).from(modelEntity).where(builder).fetch().size();

            return new PageImpl<>(declarationsModels, pageable, size);
        });
    }

标签:searchFunction,return,Querydsl,public,使用,import,工具,modelEntity,persistence
From: https://www.cnblogs.com/herebug/p/17846931.html

相关文章

  • uniapp使用第三方插件image-tools进行图片转base64
    最近做的这个项目原来是原生android开发的,然后图片上传功能是 前端获取图片->图片转成base64字符串(base64编码)->传递给服务器后端->服务器接受base64字符串数据->获取到的base64转成图片jpg(解码)->存入服务器,并写入数据库后来因为原生安卓太麻烦了,转成了uniapp进行开......
  • 如何优雅的使用微信小程序的wx.request请求(封装request.js工具类)
    首先官方的文档不是支持Promise风格的请求我们通过官方文档可以看到微信小程序发请求的一些具体参数,下面的代码展示了用wx.request()发送的一个标准请求:wx.request({     url:"https://xxx.com",     method:"POST",     data:{   ......
  • 互联网企业通常使用什么品牌的SSL证书?
    信息化时代,人们的工作生活大部分都与网络息息相关,而数量庞大的互联网企业不仅每天承载着较大的互联网流量,同时也面临着各种各样网络攻击的风险。对此,给网站安装SSL证书成为互联网企业最基本的数据保护措施之一。SSL证书可以实现网站HTTPS加密保护及身份的可信认证,防止传输数据的泄......
  • Redis集群的实例什么情况使用redis集群和哨兵
    当考虑Redis集群和哨兵的使用时,我们可以考虑一个在线购物系统的场景,其中需要处理用户会话数据。这个例子将涵盖横向扩展、高可用性和故障处理的方面。场景描述:假设你的在线购物系统使用Redis存储用户会话数据,以提供个性化的购物体验。用户的会话数据包括购物车、用户偏好设置等......
  • 使用docker 搭建xtrabackup服务,实现mysql全量和增量备份
    mysql数据库的备份是运维的重中之重,是保障服务灾难恢复的最后一道屏障在我的构想里,一个完备的mysql容灾体系应该包括高可用架构和一套基础的数据库备份方案高可用架构:MM+ Keepalived,PXC(PerconaXtraDBCluster)或者GR(GroupReplication),来保证故障恢复,并附带一个延迟备库(延迟1......
  • 使用chroot定制系统
    假设下载的桌面系统为ubuntu.iso。一、进入iso并安装软件包首先创建一个目录,如my-ubuntu,然后将ubuntu.iso挂载到这个目录上,或者不用挂载,直接解压也行,总之要能进入到iso里面去:sudomount-oloop/path/to/ubuntu.iso/home/it8343/my-ubuntu然后cd到my-ubuntu这......
  • 一个Git clone仓库的指定目录命令对比国内外常见AI(六)使用小悟空
    通常情况下,我们会克隆整个Git仓库,但有时候我们只需要其中某一个目录或文件,这时候只克隆子目录会更加方便。这个需求好像不是经常用到,搜索结果也是五花八门,有些完全达不到要求,正好用这个机会测试一下最近大火的AI看看是否足够智能。小悟空(抖音出品,个人感觉普通提问回答还可以,专业提......
  • 使用OpenAI Assistants三分钟搭建个人知识库AI助手网站
    Assistants介绍随着OpenAI将Assistants助手API对外发布,我们搭建个人知识库变的如此简单。开发者将自己的应用通过AssistantsAPI与OpenAI对接,就可以让每一位客户拥有不一般体验的个人知识库。由于Assistants相关API有30+,本文只列举完成一个最小功能闭环涉及的接口。关于Assistant......
  • 笔记:华为路由器的使用方法与CTL终端基本操作
    使用华为路由器的方法与基本操作:在本文中可能出现下列命令行格式,它们所代表的含义如下。格式意义粗体命令行关键字(命令中保持不变、必须照输的部分)采用加粗字体表示。斜体命令行参数(命令中必须由实际值进行替代的部分)采用斜体表示。[]表示用“[......
  • 微信附近人wxid采集工具,可通过QQ附近人提取转换,易语言版接口代码
    这个调用的是一个POST接口,我用fiddler抓取的,并非是逆向或者是破解奥,是正常公开的接口,我只是对数据对了一些编码转换和整理,可以提取附近人的数据包,然后通过数据包可以直接加微信,就这么简单,但是还是存在一些技术原理,ck是我自己账号的我就不提供了。框架设计界面: 数据包可以直接......