jooq多表查询_jooq使用示例-程序员宅基地

技术标签: jooq多表查询  

packagecom.transsnet.sims.business;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.commons.lang3.StringUtils;importorg.jooq.Condition;importorg.jooq.DSLContext;importorg.jooq.Record;importorg.jooq.Record1;importorg.jooq.Record2;importorg.jooq.Result;importorg.jooq.SelectJoinStep;importorg.jooq.UpdateSetFirstStep;importorg.jooq.UpdateSetMoreStep;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;importorg.springframework.transaction.annotation.Transactional;importorg.springframework.util.CollectionUtils;importcom.transsnet.sims.common.dto.PageDto;importcom.transsnet.sims.common.dto.PosDto;importcom.transsnet.sims.common.dto.RetailerDto;importcom.transsnet.sims.common.dto.SaDto;importcom.transsnet.sims.storage.easybuy_aad.Tables;importcom.transsnet.sims.storage.easybuy_aad.tables.daos.AadSaConfigDao;importcom.transsnet.sims.storage.easybuy_aad.tables.pojos.AadSaConfig;importcom.transsnet.sims.storage.easybuy_aad.tables.records.AadSaConfigRecord;

@Componentpublic classDemoBis {

@AutowiredprivateAadSaConfigDao aadSaConfigDao;

@AutowiredprivateDSLContext dslContext;private com.transsnet.sims.storage.easybuy_aad.tables.AadSaConfig aadSaConfig =Tables.AAD_SA_CONFIG;private com.transsnet.sims.storage.easybuy_aad.tables.AadPosConfig aadPosConfig =Tables.AAD_POS_CONFIG;private com.transsnet.sims.storage.easybuy_aad.tables.AadRetailerConfig aadRetailerConfig =Tables.AAD_RETAILER_CONFIG;private com.transsnet.sims.storage.easybuy_aad.tables.AadIndexTable aadIndexTable =Tables.AAD_INDEX_TABLE;/*** 分页查询list

*@parampageNum

*@parampageSize

*@paramdto

*@return

*/

public PageDto pageList(int pageNum, intpageSize, SaDto dto) {

SelectJoinStep selectRecord =dslContext.select().from(aadSaConfig);

SelectJoinStep> selectCountRecord =dslContext.selectCount().from(aadSaConfig);//写一个一定成立的条件,这里写主键不为空

Condition eq =aadSaConfig.ID.isNotNull();//按需要拼接查询条件

if(StringUtils.isNotBlank(dto.getSaId())) {

eq= eq.and(aadSaConfig.SA_ID.like("%" + dto.getSaId() + "%"));

}if(StringUtils.isNotBlank(dto.getStatus())) {

eq=eq.and(aadSaConfig.STATUS.eq(dto.getStatus()));

}//查询总数

Integer count = selectCountRecord.where(eq).fetchOne().into(Integer.class);//构造分页组件

PageDto pageDto = newPageDto(pageNum, pageSize, count);//查询数据

List list =selectRecord.where(eq).orderBy(aadSaConfig.ID.desc())

.limit(pageSize)

.offset(pageSize* (pageNum - 1))

.fetchInto(AadSaConfig.class);

pageDto.setList(list);returnpageDto;

}/*** 查询list

*@paramdto

*@return

*/

public ListfetchList(SaDto dto) {

SelectJoinStep selectRecord =dslContext.select().from(aadSaConfig);//写一个一定成立的条件,这里写主键不为空

Condition eq =aadSaConfig.ID.isNotNull();//按需要拼接查询条件

if(StringUtils.isNotBlank(dto.getSaId())) {

eq= eq.and(aadSaConfig.SA_ID.like("%" + dto.getSaId() + "%"));

}if(StringUtils.isNotBlank(dto.getStatus())) {

eq=eq.and(aadSaConfig.STATUS.eq(dto.getStatus()));

}//查询数据

List list =selectRecord.where(eq).orderBy(aadSaConfig.ID.desc())

.fetchInto(AadSaConfig.class);returnlist;

}/*** 根据销售id查询详细

*@paramsaId

*@return

*/

publicAadSaConfig detail(String saId) {

List beans =aadSaConfigDao.fetchBySaId(saId);if(!CollectionUtils.isEmpty(beans)) {return beans.get(0);

}return null;

}/*** 新增记录*/@Transactionalpublic voidcreate(SaDto dto) {//查询销售序列值,行锁select for update

Integer index =dslContext.select(aadIndexTable.INDEX).from(aadIndexTable)

.where(aadIndexTable.TABLE.eq("aad_sa_config").and(aadIndexTable.FIELD.eq("sa_id")))

.forUpdate()

.fetchOneInto(Integer.class);//填充销售ID为定长字段,5位长度

String saId = "SA" + String.format("%05d", index);

dslContext.insertInto(aadSaConfig)

.set(aadSaConfig.SA_ID, saId)//销售Id按规则自增

.set(aadSaConfig.STATUS, dto.getStatus())

.execute();//添加记录成功后需要将index加1

dslContext.update(aadIndexTable).set(aadIndexTable.INDEX, ++index)

.where(aadIndexTable.TABLE.eq("aad_sa_config").and(aadIndexTable.FIELD.eq("sa_id")))

.execute();

}/*** 更新记录*/

public voidupdate(SaDto dto) {

UpdateSetFirstStep updateRecord =dslContext.update(aadSaConfig);

UpdateSetMoreStep setRecord = null;if(StringUtils.isNotBlank(dto.getSaName())) {

setRecord=updateRecord.set(aadSaConfig.SA_NAME, dto.getSaName().toUpperCase());

}if(StringUtils.isNotBlank(dto.getStatus())) {

setRecord=updateRecord.set(aadSaConfig.STATUS, dto.getStatus());

}if(setRecord == null) {return;

}

setRecord.where(aadSaConfig.SA_ID.eq(dto.getSaId())).execute();

}/*** 删除记录*/

public voiddelete(String saId) {

dslContext.delete(aadSaConfig).where(aadSaConfig.SA_ID.eq(saId)).execute();

}/*** 根据销售名称查询销售信息

*@paramsaName

*@return

*/

public List>fetchSaByName(String saName){//查询指定的字段

Result> resultRecord =dslContext.select(aadSaConfig.SA_ID, aadSaConfig.SA_NAME)

.from(aadSaConfig)

.where(aadSaConfig.SA_NAME.like("%" + saName + "%"))

.fetch();

List> list = new ArrayList>();//获取查询出来的字段值

for(Record2record : resultRecord) {

Map item = new HashMap();

item.put("label", record.getValue(aadSaConfig.SA_NAME));

item.put("value", record.getValue(aadSaConfig.SA_ID));

list.add(item);

}returnlist;

}/*** 联表更新数据

*@paramdto*/

public voidupdatePos(PosDto dto) {/** 最初是想使用insert into select,但是jooq中只能整表复制,但我们只需要某几个字段

* 尝试过先insert,然后再update,但这样比较消耗性能

* 试了几次后发现最好还是先把所需数据查出来,再进行插入*/

//获取商户相关信息,赋值到门店上

RetailerDto retailer = dslContext.selectFrom(aadRetailerConfig).where(aadRetailerConfig.RETAILER_ID.eq(dto.getRetailerId())).fetchOneInto(RetailerDto.class);//新增数据

dslContext.insertInto(aadPosConfig)

.set(aadPosConfig.POS_ID, dto.getPosId())

.set(aadPosConfig.POS_NAME, dto.getPosName())

.set(aadPosConfig.RETAILER_ID, retailer.getRetailerId())

.set(aadPosConfig.RETAILER_NAME, retailer.getRetailerName())

.execute();

}

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39986027/article/details/111854781

智能推荐

maven项目打包命令_maven打包命令-程序员宅基地

文章浏览阅读1w次。maven项目常用打包命令以及使用_maven打包命令

JAVA中URI转String_java.net.uri 转string-程序员宅基地

文章浏览阅读5.3k次。定义语法:public static URI create(String str)用例:URI uri = URI.create("http://java2s.com");_java.net.uri 转string

CentOS 7部署laravel_centos 7 laravel框架的.env-程序员宅基地

文章浏览阅读1.4k次。目录LNMP环境安装安装和配置 git安装 Composer安装 redisLaravel 项目安装拉取 github 上的 Laravel 项目代码安装依赖配置环境变量数据配置权限配置Nginx 配置elasticsearch0.安装JDK111.下载Elasticsearch72.下载完了解压压缩包3.移动目录4.新建一..._centos 7 laravel框架的.env

android 插入耳机 使用自身mic录音_苹果iPhone 12携最新系统强势登场,10款主流TWS耳机兼容性测试...-程序员宅基地

文章浏览阅读517次。北京时间2020年10月14日凌晨,苹果第二次秋季发布会成功落幕,会上发布了旗下搭载最新 iOS14 系统的 iPhone 12 系列智能手机和最新一代 HomePod mini 智能音箱,为了环保理念,苹果在此次发布会之后,官方商店在售 iPhone 系列所有产品均已不再标配 EarPods 有线耳机。因此购买了 iPhone 12 的小伙伴就需要自行配置耳机,而TWS真无线耳机凭借着..._android 耳机录音

Java - PAT - 1003. 我要通过!(20)_java实现1003-程序员宅基地

文章浏览阅读2.7k次。题目地址:1003. 我要通过!(20)1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。_java实现1003

TCP通信丢包主要问题及具体问题分析_tcp的客户端发送报文给服务器,不产生丢包或网络阻塞,但是数据不一致是因为-程序员宅基地

文章浏览阅读7.3k次。今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠的传输,肯定也会存在掉包的情况。 如果通信中发现缺少数据或者丢包,那么,最大的可能在于程序发送的过程或者接收的过程出现问题。 例如服务器给客户端发大量数据,Send的频率很高,_tcp的客户端发送报文给服务器,不产生丢包或网络阻塞,但是数据不一致是因为

随便推点

c语言如何自定义运算公式,怎样用C语言编写数学公式 如何用C语言输入数学公式...-程序员宅基地

文章浏览阅读8k次。导航:网站首页 >怎样用C语言编写数学公式 如何用C语言输入数学公式怎样用C语言编写数学公式 如何用C语言输入数学公式相关问题:匿名网友:1、C语言有现场的常用数学函数,所在函数库为math.h、stdlib.h。函数名及解释:int abs(int i) 返回整型参数i的绝对值double cabs(struct complex znum) 返回复数znum的绝对值double fabs(..._c语言定义公式

算法竞赛入门经典第2版题解目录-程序员宅基地

文章浏览阅读522次。第3章 数组和字符串编号标题难度

Linux源码编译安装_linux源代码编译安装-程序员宅基地

文章浏览阅读4.7k次,点赞9次,收藏44次。文章目录1.获取安装包地址并下载2.解压安装包3../configure配置4.make编译5.make install 安装6.测试1.获取安装包地址并下载下载源代码安装包文件,以 APACHE 服务为例,我们需要进入https://httpd.apache.org/找到httpd的软件包。如果想要在虚拟机中下载,则复制链接地址,然后使用 wget 链接地址 下载2.解压安装包使用 tar xvf 压缩包名字 将压缩包解压,解压后会在同级目录下出现一个以软件包为名字的文件夹,也可 -C 指_linux源代码编译安装

Java 对象转化为Map_java 撖寡情頧柒ap-程序员宅基地

文章浏览阅读3.9w次,点赞8次,收藏29次。方式一: 利用FastJson 把对象转化为Map/** * * @MethodName: getUserInfoDataByUserId * @Description: 根据useId查询用户信息,封装成map key:属性名,value:属性值 * home.php?mod=space&uid=952169 userId 用户userId * @return */ public Map<String, String&_java 撖寡情頧柒ap

Vscode的相对路径读取问题及处理_解决vscode 相对路径-程序员宅基地

文章浏览阅读3.8w次,点赞43次,收藏96次。Vscode的相对路径读取问题及处理差异首先说一下vscode相对路径与一般编辑器的不同符号vscode一般的“./2.txt”相对于工作路径(.vscode文件夹所在的位置)相对于当前运行文件“2.txt”相对于工作路径相对于当前运行文件“/2.txt”相对于磁盘根目录相对于磁盘根目录问题处理案例:工作路径如下,执行文件为 readfi..._解决vscode 相对路径

MySQL 基本操作_alter table zhsq_yw_person drop birth-程序员宅基地

文章浏览阅读922次。MySQL_alter table zhsq_yw_person drop birth