序言

上一篇关于JOOQ的随笔介绍了Springboot项目的创建以及JOOQ 代码生成器的使用。

那么在上次的项目基础上来看看实际的JOOQ怎么使用。

准备工作

先将项目的目录结构创建好

接下来CRUD的语法这篇文章会分别去写一个示例,看完之后基础的增删查改不在话下。

查询(select)

1 /**

2 * 查询3 *@return

4 */

5 public ResultgetAll(){6 Result result = this.create7 .selectFrom(BkUser.BK_USER)8 .orderBy(1)9 .fetch();10 returnresult;11 }

更新(update)

1 /**

2 * 更新3 */

4 public voidupdateUser(){5 //设置别名

6 BkUser a = BkUser.BK_USER.as("a");7 BkUserRecord user = newBkUserRecord();8 this.create9 .update(a)10 .set(a.ADDRESS,user.getAddress())11 .set(a.NAME,user.getName())12 .where(a.ID.equal(user.getId()))13 .execute();14 }

删除(delete)

1 /**

2 * 删除3 *@paramuserId4 */

5 public voiddeleteUserById(Integer userId){6 this.create7 .deleteFrom(BkUser.BK_USER)8 .where(BkUser.BK_USER.ID.eq(userId))9 .execute();10 }

新增(insert)

/*** 新增*/

public voidaddUser(){byte enabled = 1;this.create

.insertInto(BkUser.BK_USER)

.columns(BkUser.BK_USER.ADDRESS,

BkUser.BK_USER.ENABLED,

BkUser.BK_USER.NAME,

BkUser.BK_USER.PHONE,

BkUser.BK_USER.PASSWORD)

.values("后海",enabled,"小毛","10086","123456")

.execute();

}

完整代码

1 packagecom.bkn.breakingnews.modules.user.dao;2

3 importcom.bkn.breakingnews.model.tables.BkUser;4 importcom.bkn.breakingnews.model.tables.records.BkUserRecord;5 importcom.zaxxer.hikari.HikariDataSource;6 importorg.jooq.DSLContext;7 importorg.jooq.Result;8 importorg.jooq.SQLDialect;9 importorg.jooq.impl.DSL;10 importorg.springframework.beans.factory.annotation.Autowired;11 importorg.springframework.stereotype.Repository;12

13 /**

14 *@authorwuqi15 * @description user DAO16 * @date 2020/5/15 14:5217 */

18 @Repository19 public classUserDao {20 //注入Hikari的DataSource,

21 @Autowired22 HikariDataSource dataSource;23

24 /**

25 * 查询26 *@return

27 */

28 public ResultgetAll(){29 //DSL上下文是所有数据库操作的入口,意思就是要用jooq干任何事都要先实例化这个DSLContext

30 DSLContext create = DSL.using(this.dataSource,SQLDialect.MYSQL);31 Result result =create32 .selectFrom(BkUser.BK_USER)33 .orderBy(1)34 .fetch();35 returnresult;36 }37 /**

38 * 更新39 */

40 public voidupdateUser(){41 //设置别名

42 BkUser a = BkUser.BK_USER.as("a");43 BkUserRecord user = newBkUserRecord();44 user.setId(5);45 user.setAddress("印度");46 user.setName("阿三哥");47 DSL.using(this.dataSource,SQLDialect.MYSQL)48 .update(a)49 .set(a.ADDRESS,user.getAddress())50 .set(a.NAME,user.getName())51 .where(a.ID.equal(user.getId()))52 .execute();53 }54

55 /**

56 * 删除57 *@paramuserId58 */

59 public voiddeleteUserById(Integer userId){60 DSL.using(this.dataSource,SQLDialect.MYSQL)61 .deleteFrom(BkUser.BK_USER)62 .where(BkUser.BK_USER.ID.eq(userId))63 .execute();64 }65

66 /**

67 * 新增68 */

69 public voidaddUser(){70 byte enabled = 1;71 DSL.using(this.dataSource,SQLDialect.MYSQL)72 .insertInto(BkUser.BK_USER)73 .columns(BkUser.BK_USER.ADDRESS,74 BkUser.BK_USER.ENABLED,75 BkUser.BK_USER.NAME,76 BkUser.BK_USER.PHONE,77 BkUser.BK_USER.PASSWORD)78 .values("后海",enabled,"小毛","10086","123456")79 .execute();80 }81

82 }

测试类代码

1 packagecom.bkn.breakingnews;2

3 importcom.bkn.breakingnews.model.tables.BkUser;4 importcom.bkn.breakingnews.model.tables.records.BkUserRecord;5 importcom.bkn.breakingnews.modules.user.dao.UserDao;6 importcom.zaxxer.hikari.HikariDataSource;7 importorg.jooq.DSLContext;8 importorg.jooq.Result;9 importorg.jooq.SQLDialect;10 importorg.jooq.impl.DSL;11 importorg.junit.jupiter.api.Test;12 importorg.springframework.beans.factory.annotation.Autowired;13 importorg.springframework.boot.test.context.SpringBootTest;14

15 @SpringBootTest16 classBreakingnewsApplicationTests {17

18 @Autowired19 HikariDataSource dataSource;20

21 @Test22 voidcontextLoads() {23 DSLContext create =DSL.using(dataSource, SQLDialect.MYSQL);24 Result records =create.selectFrom(BkUser.BK_USER).fetch();25 System.out.println(records);26 }27

28 //将userDao注入进单元测试类

29 @Autowired30 UserDao userDao;31

32 @Test33 voidtestUser(){34 System.out.println("查询---");35 System.out.println(userDao.getAll());36 System.out.println("查询---");37

38 System.out.println("更新---");39 userDao.updateUser();40 System.out.println("更新后---");41 System.out.println(userDao.getAll());42

43 System.out.println("新增---");44 userDao.addUser();45 System.out.println("新增后---");46 System.out.println(userDao.getAll());47

48 System.out.println("删除---");49 userDao.deleteUserById(5);50 System.out.println("删除---");51 System.out.println(userDao.getAll());52

53 }54

55 }

测试结果

查询---更新---更新后---

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+

| id|name |phone |telephone |address|enabled|username|password |remark|

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+

| 3|系统管理员|18568887789|029-82881234|深圳南山 | 1|admin |$2a$10$ySG2lkvjFHY5O0./CPIE1OI8VJsuKYEzOYzqIa7A...|{null}|

| 5|阿三哥 |18568123489|029-82123434|印度 | 1|libai |$2a$10$oE39aG10kB/rFu2vQeCJTu/V/v4n6DRR0f8WyXRi...|{null}|

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+新增---新增后---

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+

| id|name |phone |telephone |address|enabled|username|password |remark|

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+

| 3|系统管理员|18568887789|029-82881234|深圳南山 | 1|admin |$2a$10$ySG2lkvjFHY5O0./CPIE1OI8VJsuKYEzOYzqIa7A...|{null}|

| 5|阿三哥 |18568123489|029-82123434|印度 | 1|libai |$2a$10$oE39aG10kB/rFu2vQeCJTu/V/v4n6DRR0f8WyXRi...|{null}|

| 6|小毛 |10086 |{null} |后海 | 1|{null} |123456 |{null}|

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+删除---删除---

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+

| id|name |phone |telephone |address|enabled|username|password |remark|

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+

| 3|系统管理员|18568887789|029-82881234|深圳南山 | 1|admin |$2a$10$ySG2lkvjFHY5O0./CPIE1OI8VJsuKYEzOYzqIa7A...|{null}|

| 6|小毛 |10086 |{null} |后海 | 1|{null} |123456 |{null}|

+----+-----+-----------+------------+-------+-------+--------+--------------------------------------------------+------+

总结

a.从代码中可以看出,java代码非常的简洁(别杠说这是因为sql逻辑简单),和Mybatis相比的话省去了配置Mapper.xml的步骤,

这一点还是比较吸引人的。

b.示例中用到的方法fetch()和execute()按照字面意思理解就可以

c.DSL上下文DSLContext就像一个入口,所有的sql相关操作都需要在上线文上执行,所以用之前都要进行实例化

d.where..and..or以及join的用法和增删改查一样都比较简单,一看就会,这里不做多介绍。写CRUD示例主要是能够让脑海中对JOOQ的语句有个印象。

e.下一篇文章会通过相对CRUD复杂一点的例子来讲讲比较常用的field()方法、with语句的用法。

jooq多表查询_JOOQ 入门(三)-- CRUD 语句相关推荐

  1. jooq多表查询_二、jOOQ 系列教程 - 基础CURD

    通过 DSLContext API 和 Record API,可以完成基础CURD操作.本篇主要通过一些实例代码,讲解最基础的用法.后面的相关篇幅中,也会说到一些扩展以及其他高级用法 从此篇幅开始,以 ...

  2. left join on用法_MySQL 多表查询 quot;Joinquot;+“case when”语句总结

    本部分讲述:join系列全部总结和case when语句用法 join系列:表加法.Cross join .inner join.left join.right join.full outer joi ...

  3. mysql同步三张表如何用事务_MySQL 多表查询与事务的操作

    表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...

  4. MySQL入门 (五) : CRUD 与资料维护

    1 取得表格资讯 1.1 DESCRIBE指令 「DESCRIBE」是MySQL资料库提供的指令,它只能在MySQL资料库中使用,这个指令可以取得某个表格的结构资讯,它的语法是这样的: 你在MySQL ...

  5. php 多表查询输出,ThinkPHP多表查询

    ThinkPHP多表查询处理 ThinkPHP多表连接查询处理 ThinkPHP关联查询(多表查询) 网上找到三种方法:table().join().原生SQL语句查询.(以下三种方法输出结果一致,并 ...

  6. Mysql多表查询效率的研究(一)

    Mysql多表查询效率的研究(一) 本文探究了mysql InnoDB引擎在多表查询的应用场景下,使用子表.内连接和左联接运行速度的差别,并且比较了索引使用与否对查询效率的影响. 第一部分简略地概括了 ...

  7. MySQL多表查询练习

    /* 多表查询 */-- 准备数据 -- 创建部门表 CREATE TABLE tb_dept (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) ...

  8. Oracle 联表查询

    笔者本是个Android开发工程师,处于工作需要不得不去客串几天java后台,谢谢接口. 以下是在写接口时用到的一个功能点,叫做联表查询,虽然不是我Android端的知识,但毕竟也是自己不懂的东西,总 ...

  9. 开发工程师必备————【Day14】数据库查询表关键字及多表查询思路

    今日内容概要 操作表的SQL语句补充 查询表关键字 多表查询思路 操作表的SQL语句补充 1.修改表名 alter table 表名 rename 新表名; 2.新增字段 alter table 表名 ...

最新文章

  1. 未授予用户在此计算机上的请求登陆类型处理办法
  2. 递归/回溯:Subsets II求子集(有重复元素)
  3. 学习Unix/Linux编程要学些什么
  4. 人工智能--遗传算法(旅行商问题)
  5. Go语言中Goroutine与线程的区别
  6. Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
  7. 从零开始学PowerShell(1)初见基础命令
  8. MongoDB Replication
  9. DataTable数据转成Json格式
  10. python 计算机程序设计-计算机程序设计(Python)
  11. php呼叫平台,什么是PHP运算符“?和“:”呼叫和他们做什么?
  12. Java打印条码,使用热敏条码打印机
  13. 汉仪字体安装后PPT找不到_字体不知道去哪下载?我教您
  14. iOS下Safari自动化测试
  15. 传值中处理jsp中文乱码问题
  16. 中国数字音乐——版权问题之公司分析
  17. 【Python】py3.6请求网站时报错:http.client.RemoteDisconnected: Remote end closed connection without response
  18. 2022年上海落户最快方式!本科2年落户上海!硕士1年落户上海!
  19. Andy’s First Dictionary(安迪的第一部词典)
  20. Python机器学习应用之监督学习-上证指数涨跌预测实例

热门文章

  1. (软件工程)GPU并行软件开发指北
  2. iStore 产品搜索
  3. excel-wps数据的去重、拆分、排序、筛选
  4. 计算机控制技术施保华试卷,计算机控制技术课后习题答案(施保华版).pdf
  5. 计算机过去与未来ppt背景图,过去无可挽回未来可以改变背景图高清图片大全
  6. JS校验二代身份证格式
  7. OpenVas 漏洞扫描器下载使用教程
  8. 昨天说的博杰股份 今天涨6.62% 我今天买了东华软件
  9. 活体检测PatchNet学习笔记
  10. 评测 N200和n100选哪个 N200和n100参数对比