博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jooq使用示例
阅读量:4511 次
发布时间:2019-06-08

本文共 6438 字,大约阅读时间需要 21 分钟。

一.说明

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

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

二.代码

  一切尽在代码中……

  参考文档:

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;@Componentpublic 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
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 = new PageDto(pageNum, pageSize, count); // 查询数据 List
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
fetchList(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); return list; } /** * 根据销售id查询详细 * @param saId * @return */ public AadSaConfig detail(String saId) { List
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
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 void delete(String saId) { dslContext.delete(aadSaConfig).where(aadSaConfig.SA_ID.eq(saId)).execute(); } /** * 根据销售名称查询销售信息 * @param saName * @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(Record2
record : resultRecord) { Map
item = new HashMap
(); 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搭建项目相关的分享,会逐渐补充完善。

转载于:https://www.cnblogs.com/xiayuscc/p/11063878.html

你可能感兴趣的文章
【Unity3D】获取鼠标在三维空间(世界坐标系)的位置
查看>>
Python虚拟机函数机制之名字空间(二)
查看>>
线段树
查看>>
SharePoint2010联合搜索——Google、百度
查看>>
php静态
查看>>
python基础之文件操作
查看>>
PAT B1033 旧键盘打字
查看>>
Fedora 8/9更新换源和更新中断解决方法
查看>>
[唐胡璐]Selenium技巧 - 定制元素属性检查,并写到ReportNG中
查看>>
hdu 1695 莫比乌斯基础题
查看>>
做题记录 To 2019.2.13
查看>>
Cg(C for Graphic)语言表达式与控制语句(转)
查看>>
C++中Static的作用
查看>>
一套完整的javascript面试题
查看>>
Centos7安装gitlab-ce
查看>>
centos7修改hostname
查看>>
正则表达式中的懒惰匹配与非捕获组
查看>>
Android 开发服务类 03_ServletForGETMethod
查看>>
一些基础名词及含义(更新中)
查看>>
sql索引优化 (从网上学习的时候总结的)
查看>>