接下来我们开始进入 jooq 的增删改查的使用姿势系列,本篇将主要介绍如何利用 jooq 来实现添加数据
I. 项目搭建
本项目借助SpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ IDEA
进行开发
1. 项目依赖
关于如何创建一个 SpringBoot 的项目工程,不再本文的描述范围内,如有兴趣可以到文末的个人站点获取
在这个示例工程中,我们的选用 h2dabase 作为数据库(方便有兴趣的小伙伴直接获取工程源码之后,直接测试体验),因此对应的 pom 核心依赖如下
1 | xml复制代码<dependencies> |
2. 数据库初始化
我们借助jooq-codegen-maven
插件来自动生成数据库相关的代码,对这一段逻辑感兴趣的小伙伴可以参考博文:【DB 系列】Jooq 代码自动生成
后文中使用的表结构如下
1 | sql复制代码DROP TABLE IF EXISTS poet; |
3. 配置文件
h2database 的连接配置如 application.properties
1 | ini复制代码#Database Configuration |
II. 新增记录
接下来我们进入正式的数据插入的使用姿势介绍,一般来说新增数据会区分单个和批量两种方式,下面我们分别进行介绍
1. Record 实体类新增方式
在 jooq 中,借助自动生成的 Record 类来实现新增是最简单的 case,如下
1 | java复制代码 |
注意:
- 实体类的创建方式:
PoetPO record = dsl.newRecord(table);
,不要直接 new 一个对象出来使用
2. 链式写法
下面介绍的这种写法和 sql 非常相似,也是我个人用的比较多的方式,特点就是一目了然
1 | java复制代码public boolean save2(int id, String name) { |
3. InsertQuery 方式
上面两种写法比较常见,而直接使用 InsertQuery 的方式,在实际的业务开发中可能并没有上面的优雅,但某些特殊场景下还是很有用的
1 | java复制代码/** |
注意一下上面的用法,InsertQuery
本身的使用没有什么值得说到的,重点在上面的实现中,并没有利用自动生成的代码,如
- table:
DSL.table(表名)
- field:
DSL.field(列名,类型)
通过上面的的 case,我们可以知道在不自动生成 DB 对应的代码前提下,如何进行数据库的操作
4. Record 实体批量保存
借助dsl.batchInsert
来批量添加实体,属于最基础的使用姿势了
1 | java复制代码private PoetPO bo2po(PoetBO bo) { |
5. 链式批量保存
同样是类 sql 的链式插入方式,需要注意一下与前面的单条记录的链式插入的区别,下面这种写法和 sql 的批量插入的写法及其相似
1 | java复制代码/** |
6. InsertQuery 批量保存
上面介绍了 InsetQuery 的单条插入方式,下面的批量写法基本上没有太大的区别
1 | java复制代码/** |
7. 测试 case
接下来测试一下上面的 6 个方法执行
1 | java复制代码public void test() { |
输出结果如下
1 | csharp复制代码[1,1] |
II. 其他
0. 项目
系列博文
项目源码
1. 一灰灰 Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
- 一灰灰 Blog 个人博客 blog.hhui.top
- 一灰灰 Blog-Spring 专题博客 spring.hhui.top
本文转载自: 掘金