JOOQ学习笔记:分页、排序、字段重命名的写法
环境
JOOQ: “3.9.6”
java:1.8
springboot:1.5.10.RELEASE
前言
最近进小黑屋赶项目;
公司封装的分页方法,字段接收上,不能满足我,所以我就自己写了一个,
顺便了解了解JOOQ
的写法。
具体需求是个很简单的查询,传入页码、排序字段后,指定一个DTO类型来接收返回的字段。
代码
方法签名:
DAO层面的方法:
public Pagination<T> findItemDTOPage(Pageable pageable, List<Condition> conditions)
其中Pageable
是springboot包下的org.springframework.data.domain
;用于Controller
接收分页参数的。
第二个参数List<Condition> conditions
中Condition
是JOOQ
包下的:org.jooq
。
简单查询
比如现在查询第一页的数据,每页显示10条。
前端传的参数就是:page=0,size=10
。
默认排序是created
倒序;
如图,方法第二个参数使用了@PageableDefault
注解来指定默认排序。pageable
来接收page、size和sort字段
;
那么DAO
层的方法如下:
public Pagination<PurchaseRequestItemDTO> findItemDTOPage(Pageable pageable, List<Condition> prItemCondition) {// 组装排序字段
List<SortField<?>> sortFields = Lists.newArrayList();
// pageable来自springboot包
Sort sort = pageable.getSort();
// 从这里可以看出,支持多字段排序
// 但是多字段排序方向是一个方向 要么升序,要么降序
sort.forEach(order -> {String property = order.getProperty();Field<?> field = PURCHASE_REQUEST_ITEM.field(property);if (field != null) {// Sort.Direction.ASC是JOOQ的// order.getDirection()是springboot的SortOrder sortOrder = order.getDirection() == Sort.Direction.ASC ? SortOrder.ASC : SortOrder.DESC;SortField<?> sortField = field.sort(sortOrder);sortFields.add(sortField);}
});List<PurchaseRequestItemDTO> purchaseRequestItemDTOS =dsl.select(PURCHASE_REQUEST.fields()).select(PURCHASE_REQUEST_ITEM.fields()).select(PURCHASE_REQUEST.field(PURCHASE_REQUEST.ID).as("purchaseRequestId"),PURCHASE_REQUEST_ITEM.field(PURCHASE_REQUEST.AUDITOR).as("approver"),PURCHASE_REQUEST.field(PURCHASE_REQUEST.CREATED).as("purchaseRequestCreated")).from(PURCHASE_REQUEST_ITEM.innerJoin(PURCHASE_REQUEST).on(PURCHASE_REQUEST.ID.eq(PURCHASE_REQUEST_ITEM.PURCHASE_REQUEST_ID))).where(prItemCondition).orderBy(sortFields).limit(pageable.getOffset(), pageable.getPageSize()).fetchInto(PurchaseRequestItemDTO.class);
// Pagination公司封装的返回前端的分页类
Pagination<PurchaseRequestItemDTO> pagination = new Pagination<>();
pagination.setContent(purchaseRequestItemDTOS);
pagination.setPage(pageable.getPageNumber());
pagination.setSize(pageable.getPageSize());
return pagination;
}
分析:
1、PURCHASE_REQUEST.fields()
获取该表的所有字段。
2、PURCHASE_REQUEST.field(PURCHASE_REQUEST.ID).as("purchaseRequestId")
字段重命名;这样写太啰嗦了,也可以:
PURCHASE_REQUEST.ID.as("purchaseRequestId")
3、where()
方法有很多重载方法,支持集合、数组,字段,SQL等查询,具体可以看源码;
4、orderBy()
方法,也有多种重载方法。
5、limit()
第一个参数偏移量,第二个参数是每次偏移的数量。
6、fetchInto()
这个方法参数是指定模型类,来接收查询出来的字段数据。
如果是关联查询,比如上面的代码,我使用的是自定义DTO
类来接收的。
公司里使用某个表类(JOOQ自动生成的表类)来接收,这样会导致另一张表的字段没办法获取。所以自定义好些。
总结
熟悉JOOQ
后,感觉比mybatis
方便。
JOOQ学习笔记:分页、排序、字段重命名的写法相关推荐
- ElasticSearch 6.x 学习笔记:12.字段类型
ElasticSearch 6.x 学习笔记:12.字段类型 欢迎转载. https://blog.csdn.net/chengyuqiang/article/details/79048800 12. ...
- Java 对象转Json,@JSONField对象字段重命名和顺序问题
一.引入maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson&l ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- Python 学习笔记 列表 排序 xxx XXX
Python 学习笔记 列表 排序 xxx XXX print("-" * 30) cars = ['bmw', 'audi', 'toyota', 'subaru'] cars. ...
- mysql字段重命名_MySQL中使用SQL语句对字段进行重命名
MySQL中,如何使用SQL语句来对表中某一个字段进行重命名呢?我们将使用alter table 这一SQL语句. 重命名字段的语法为:alter table change . 现在我们来尝试把tes ...
- Python学习笔记:通过Headers字段模拟浏览器访问亚马逊界面爬取
学习笔记:哔哩哔哩 Python 爬虫视频教程全集(62P)| 6 小时从入门到精通 0. 学习视频地址 https://www.bilibili.com/video/BV1pt41137qK?p=1 ...
- oracle 字段重命名大表,Oracle表字段的增、刪、改、表的重命名及主鍵的增、刪、改...
一.表字段的增刪改: 添加字段的語法:alter table tablename add (column datatype [default value][null/not null],-.); 修改 ...
- soapUI学习笔记--用例字段参数化
字段参数化的简单操作 1.把Request新增一个TestCase 增加TestCase,下方会出现: 2.案例中,请求参数只有一个.先运行下请求,可以运行成功(保证接口是通的) 3.添加参数.见图中 ...
- 31 天重构学习笔记5. 提升字段
摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接 ...
最新文章
- 程序员最害怕的5件事,你中招了吗?
- 绝地求生自定义服务器租一天多少钱,绝地求生自定义服务器怎么样?绝地求生自定义服务器使用攻略...
- php中is_int用法,php – is_int()和ctype_digit()之间有区别吗?
- ceph rgw java_ceph rgw multisite基本用法
- vs cpp生成h文件_lib 和 dll 的区别、生成以及使用详解
- [Alpha]Scrum Meeting#5
- Linux多线程工作笔记0003---C语言中%p,%u,%lu都有什么用处
- java-cef系列视频第二集:搭建开发环境
- 使用rem单位布局的时候有什么好处_好程序员web前端技术分享移动端页面布局
- 植被指数-RVI、NDVI、DVIEVI、GVI、PVI、EVI
- latex----目录格式设置
- asp二进制mysql_asp 二进制保存数据库
- 雅思两次7.5经验分享~希望帮你冲击雅思高分!
- 教你如何试用华为云服务器
- Iqoo手机删除内置应用
- 2021年“上海区块链周”参会随感(二)2021-04-12
- 停电让服务器自动关机,服务器断网/断电自动关机小工具 断网/断电5分钟后自动关机...
- ASEMI整流桥KBJ610,KBJ610浪涌电流,KBJ610反向电流
- 一些vue功能和css样式
- 程序媛是怎样找老公的(2017版)
热门文章
- 对DestoryWindow的解释.
- ISO26262对软件开发的规定
- 国外可以发外链的网站,外贸网站外链平台
- 测试小故事6:术业有专攻
- Pytorch中的repeat以及repeat_interleave用法
- uni-app H5 上传图片
- 八数码(Eight Digits)问题:宽度优先搜索、全局择优搜索、A*算法(C语言实现)
- 主机地址、网络地址、主机路由、网络路由
- 今天公开猎头顾问业绩过百万的秘密,谷露猎头系统3.0版谍报速递
- 零基础数据挖掘入门系列(三) - 数据清洗和转换技巧