jooq多表查询_JOOQ 入门(三)-- CRUD 语句
序言
上一篇关于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 语句相关推荐
- jooq多表查询_二、jOOQ 系列教程 - 基础CURD
通过 DSLContext API 和 Record API,可以完成基础CURD操作.本篇主要通过一些实例代码,讲解最基础的用法.后面的相关篇幅中,也会说到一些扩展以及其他高级用法 从此篇幅开始,以 ...
- left join on用法_MySQL 多表查询 quot;Joinquot;+“case when”语句总结
本部分讲述:join系列全部总结和case when语句用法 join系列:表加法.Cross join .inner join.left join.right join.full outer joi ...
- mysql同步三张表如何用事务_MySQL 多表查询与事务的操作
表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...
- MySQL入门 (五) : CRUD 与资料维护
1 取得表格资讯 1.1 DESCRIBE指令 「DESCRIBE」是MySQL资料库提供的指令,它只能在MySQL资料库中使用,这个指令可以取得某个表格的结构资讯,它的语法是这样的: 你在MySQL ...
- php 多表查询输出,ThinkPHP多表查询
ThinkPHP多表查询处理 ThinkPHP多表连接查询处理 ThinkPHP关联查询(多表查询) 网上找到三种方法:table().join().原生SQL语句查询.(以下三种方法输出结果一致,并 ...
- Mysql多表查询效率的研究(一)
Mysql多表查询效率的研究(一) 本文探究了mysql InnoDB引擎在多表查询的应用场景下,使用子表.内连接和左联接运行速度的差别,并且比较了索引使用与否对查询效率的影响. 第一部分简略地概括了 ...
- MySQL多表查询练习
/* 多表查询 */-- 准备数据 -- 创建部门表 CREATE TABLE tb_dept (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) ...
- Oracle 联表查询
笔者本是个Android开发工程师,处于工作需要不得不去客串几天java后台,谢谢接口. 以下是在写接口时用到的一个功能点,叫做联表查询,虽然不是我Android端的知识,但毕竟也是自己不懂的东西,总 ...
- 开发工程师必备————【Day14】数据库查询表关键字及多表查询思路
今日内容概要 操作表的SQL语句补充 查询表关键字 多表查询思路 操作表的SQL语句补充 1.修改表名 alter table 表名 rename 新表名; 2.新增字段 alter table 表名 ...
最新文章
- 未授予用户在此计算机上的请求登陆类型处理办法
- 递归/回溯:Subsets II求子集(有重复元素)
- 学习Unix/Linux编程要学些什么
- 人工智能--遗传算法(旅行商问题)
- Go语言中Goroutine与线程的区别
- Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
- 从零开始学PowerShell(1)初见基础命令
- MongoDB Replication
- DataTable数据转成Json格式
- python 计算机程序设计-计算机程序设计(Python)
- php呼叫平台,什么是PHP运算符“?和“:”呼叫和他们做什么?
- Java打印条码,使用热敏条码打印机
- 汉仪字体安装后PPT找不到_字体不知道去哪下载?我教您
- iOS下Safari自动化测试
- 传值中处理jsp中文乱码问题
- 中国数字音乐——版权问题之公司分析
- 【Python】py3.6请求网站时报错:http.client.RemoteDisconnected: Remote end closed connection without response
- 2022年上海落户最快方式!本科2年落户上海!硕士1年落户上海!
- Andy’s First Dictionary(安迪的第一部词典)
- Python机器学习应用之监督学习-上证指数涨跌预测实例