一.说明

  最近使用的项目,采用了jooq。

  通过学习api文档和自我调试,写了一些代码,在此处进行记录。

二.代码

  一切尽在代码中……

  参考文档:http://www.jooq.org/doc/3.11/manual-single-page/

package com.transsnet.sims.business;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.commons.lang3.StringUtils;
import org.jooq.Condition;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.Record1;
import org.jooq.Record2;
import org.jooq.Result;
import org.jooq.SelectJoinStep;
import org.jooq.UpdateSetFirstStep;
import org.jooq.UpdateSetMoreStep;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import com.transsnet.sims.common.dto.PageDto;
import com.transsnet.sims.common.dto.PosDto;
import com.transsnet.sims.common.dto.RetailerDto;
import com.transsnet.sims.common.dto.SaDto;
import com.transsnet.sims.storage.easybuy_aad.Tables;
import com.transsnet.sims.storage.easybuy_aad.tables.daos.AadSaConfigDao;
import com.transsnet.sims.storage.easybuy_aad.tables.pojos.AadSaConfig;
import com.transsnet.sims.storage.easybuy_aad.tables.records.AadSaConfigRecord; @Component
public class DemoBis { @Autowired
private AadSaConfigDao aadSaConfigDao;
@Autowired
private DSLContext 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
* @param pageNum
* @param pageSize
* @param dto
* @return
*/
public PageDto pageList(int pageNum, int pageSize, SaDto dto) {
SelectJoinStep<Record> selectRecord = dslContext.select().from(aadSaConfig);
SelectJoinStep<Record1<Integer>> 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 = new PageDto(pageNum, pageSize, count); // 查询数据
List<AadSaConfig> list = selectRecord.where(eq).orderBy(aadSaConfig.ID.desc())
.limit(pageSize)
.offset(pageSize * (pageNum - 1))
.fetchInto(AadSaConfig.class);
pageDto.setList(list); return pageDto;
} /**
* 查询list
* @param dto
* @return
*/
public List<AadSaConfig> fetchList(SaDto dto) {
SelectJoinStep<Record> 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<AadSaConfig> list = selectRecord.where(eq).orderBy(aadSaConfig.ID.desc())
.fetchInto(AadSaConfig.class); return list;
} /**
* 根据销售id查询详细
* @param saId
* @return
*/
public AadSaConfig detail(String saId) {
List<AadSaConfig> beans = aadSaConfigDao.fetchBySaId(saId);
if(!CollectionUtils.isEmpty(beans)) {
return beans.get(0);
}
return null;
} /**
* 新增记录
*/
@Transactional
public void create(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 void update(SaDto dto) {
UpdateSetFirstStep<AadSaConfigRecord> updateRecord = dslContext.update(aadSaConfig);
UpdateSetMoreStep<AadSaConfigRecord> 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 void delete(String saId) {
dslContext.delete(aadSaConfig).where(aadSaConfig.SA_ID.eq(saId)).execute();
} /**
* 根据销售名称查询销售信息
* @param saName
* @return
*/
public List<Map<String, String>> fetchSaByName(String saName){
// 查询指定的字段
Result<Record2<String, String>> resultRecord = dslContext.select(aadSaConfig.SA_ID, aadSaConfig.SA_NAME)
.from(aadSaConfig)
.where(aadSaConfig.SA_NAME.like("%" + saName + "%"))
.fetch();
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
// 获取查询出来的字段值
for(Record2<String, String> record : resultRecord) {
Map<String, String> item = new HashMap<String, String>();
item.put("label", record.getValue(aadSaConfig.SA_NAME));
item.put("value", record.getValue(aadSaConfig.SA_ID));
list.add(item);
}
return list;
} /**
* 联表更新数据
* @param dto
*/
public void updatePos(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();
}
}

三.注意

  这里只是用法示例,很多字段被省略,而且现有的实体类都已经构建好了。

  Jooq搭建项目相关的分享,会逐渐补充完善。

jooq使用示例的更多相关文章

  1. jooq实践

    用法 sql语句 SELECT AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, COUNT(*) FROM AUTHOR JOIN BOOK ON AUTHOR.ID = B ...

  2. ORM “杀器”之 JOOQ

    ORM “杀器”之 JOOQ IN 后端编程,JAVA,敏捷开发,数据库 JOOQ是啥? JOOQ 是基于Java访问关系型数据库的工具包,轻量,简单,并且足够灵活,可以轻松的使用Java面向对象语法 ...

  3. [jOOQ中文] 七个步骤快速入门

    https://segmentfault.com/a/1190000010415384 关于jOOQ jOOQ: The easiest way to write SQL in Java jOOQ是一 ...

  4. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  5. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  6. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  7. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  8. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  9. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

随机推荐

  1. .Netcore HttpClient源码探究

    源码搜索与概述 搜索HttpClient源码 https://source.dot.net/#System.Net.Http/System/Net/Http/HttpClient.cs 1.HttpC ...

  2. bugku-misc 9-16

    宽带信息泄露 拿到一个bin后缀的文件,知道是一个二进制文件,但是题目提到的和宽带有关,flag就是用户名.可以使用RoutePassView这个工具,使用的时候记得关闭杀毒软件. 工具可以在这里下载 ...

  3. rancher2.2.2搭建pipeline

    1.通过docker容器安装gitlab代码库 docker run --detach \--hostname 192.168.102.62 \ --env GITLAB_OMNIBUS_CONFIG ...

  4. Linux下的USB总线驱动(一)

    版权所有,转载请说明转自 http://my.csdn.net/weiqing1981127 一.USB理论 1.      USB概念概述 USB1.0版本速度1.5Mbps(低速USB) USB1 ...

  5. JavaScript学习05(操作DOM)

    操作DOM DOM(文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被结构化为对象树: 通过这个对象模型,Java ...

  6. shell——sed编辑器

    目录 一.sed编辑器 1.1.sed编辑器工作流程 读取: 执行: 显示: 1.2.格式 1.3.常用选项 1.4.常用操作 1.5.替换 一.sed编辑器 sed是一种流编辑器,流编辑器会在编辑器 ...

  7. 21JavaScript笔记(1)

    JavaScript 基于对象和事件驱动 简单描述性语言 函数优先 解释型(即时编译型) 具有安全性的脚本语言 1.js组成 核心语法(ECMAScript):开放的.标准的脚本语言规范,主要包含了语 ...

  8. 做iOS自动化测试必须知道的一些知识

    WDA facebook wda 2015年Facebook 开源了一款 iOS 移动测试框架WebDriverAgent,WebDriverAgent 在 iOS 端实现了一个 WebDriver ...

  9. Django 模版语法 测试环境 ORM单表查询

    模版语法 传值 视图函数向前端html页面传值,基本上所有的数据类型都可以渲染在前端页面上. views.py from django.shortcuts import render, redirec ...

  10. docker 安装mysql设置不区分表名大小写,创建minio,设置开机自启动

    环境deepin mysql : docker run -p 3306:3306 --name tyer-mysql --restart=always -v $PWD/conf:/etc/mysql/ ...