这篇文章主要介绍jooq如何集成springboot ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
我们这里借助 h3dabase 来搭建演示项目,因此有兴趣的小伙伴在文末可以直接获取项目地址启动即可体验,不需要额外的安装和配置 mysql 了
本文采用SpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ IDEA
进行开发
下面给出核心的依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jooq</artifactId>
</dependency>
<dependency>
<groupId>com.h3database</groupId>
<artifactId>h3</artifactId>
</dependency>
接下来设置一下数据库相关的配置信息,在资源目录resources
下,新建配置文件application.properties
#Database Configuration
spring.datasource.url=jdbc:h3:~/h3-jooq-db
spring.datasource.username=test
spring.datasource.password=
spring.datasource.driverClassName=org.h3.Driver
jooq 有一个特点,是需要我们自己来生成表结构对象,所以我们先初始化一下 h3dabase 的数据结构
表结构定义文件schema-h3.sql
, 请注意表结构与 mysql 的表创建姿势不太一样哦
DROP TABLE IF EXISTS poet;
CREATE TABLE poet (
`id` int NOT NULL,
`name` varchar(20) NOT NULL default '',
CONSTRAINT pk_t_poet PRIMARY KEY (ID)
);
数据初始化data-h3.sql
INSERT INTO `poet` (`id`, `name`)
VALUES
(1, '李白'),
(2, '艾可翁'),
(3, '敖陶孙'),
(4, '安稹'),
(5, '艾性夫'),
(6, '奥敦周卿'),
(7, '安鏖'),
(8, '阿鲁威'),
(9, '安鸿渐'),
(10, '安邑坊女');
我们接下来借助 maven 插件来初始化数据, pom.xml
文件中,添加如下配置
<!-- The H2 test schema is loaded here -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<executions>
<execution>
<id>create-database-h3</id>
<phase>generate-sources</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
<configuration>
<driver>org.h3.Driver</driver>
<url>jdbc:h3:~/h3-jooq-db</url>
<username>test</username>
<password></password>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>src/main/resources/schema-h3.sql</srcFile>
<srcFile>src/main/resources/data-h3.sql</srcFile>
</srcFiles>
</configuration>
<dependencies>
<dependency>
<groupId>com.h3database</groupId>
<artifactId>h3</artifactId>
<version>1.4.200</version>
</dependency>
</dependencies>
</plugin>
如下图的 case,完成数据的初始化
在实际开始 jooq 的 curd 之前,需要先生成对应的表结构对象,这里也是借助 maven 插件来完成
同样在pom.xml
中添加如下配置
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<executions>
<execution>
<id>generate-h3</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<jdbc>
<!-- 数据库相关配置 -->
<driver>org.h3.Driver</driver>
<url>jdbc:h3:~/h3-jooq-db</url>
<username>test</username>
<password></password>
</jdbc>
<generator>
<database>
<!-- 数据库的基本信息 -->
<name>org.jooq.meta.h3.H2Database</name>
<includes>.*</includes>
<excludes></excludes>
<inputSchema>PUBLIC</inputSchema>
</database>
<generate>
<deprecated>false</deprecated>
<instanceFields>true</instanceFields>
<pojos>true</pojos>
</generate>
<target>
<!-- 自动生成的类的包名,以及路径 -->
<packageName>com.git.hui.boot.jooq.h3</packageName>
<directory>src/main/java</directory>
</target>
</generator>
</configuration>
</plugin>
如上图的方式执行完毕之后,会得到生成的代码
接下来我们给出 CURD 的基本使用姿势
import static com.git.hui.boot.jooq.h3.tables.Poet.POET;
@Service
public class PoetService {
@Autowired
DSLContext dsl;
public int create(int id, String author) {
return dsl.insertInto(POET).set(POET.ID, id).set(POET.NAME, author).execute();
}
public PoetRecord get(int id) {
return dsl.selectFrom(POET).where(POET.ID.eq(id)).fetchOne();
}
public int update(int id, String author) {
return dsl.update(POET).set(POET.NAME, author).where(POET.ID.eq(id)).execute();
}
public int delete(int id) {
return dsl.delete(POET).where(POET.ID.eq(id)).execute();
}
public List<PoetRecord> getAll() {
return dsl.selectFrom(POET).fetch();
}
}
注意上面的使用,很好理解了,基本上能愉快的写 sql,就可以愉快的使用 jooq,上面的这种链式写法,对于 sql 的阅读是非常友好的;这里的重点是DSLContext
,它是JooqAutoConfiguration
自动加载的,这里直接拿来使用了(关于更多的配置与多数据源的问题,后面介绍)
在 pom 中引入web
依赖,设计一些基本的测试 case
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
增删改查 case
@RestController
public class PoetRest {
@Autowired
private PoetService poetService;
@RequestMapping(path = "add")
public int add(Integer id, String name) {
return poetService.create(id, name);
}
@GetMapping(path = "get")
public String get(Integer id) {
PoetRecord record = poetService.get(id);
return r2str(record);
}
@GetMapping(path = "list")
public List<String> list() {
List<PoetRecord> list = poetService.getAll();
return list.stream().map(this::r2str).collect(Collectors.toList());
}
@GetMapping(path = "update")
public int update(int id, String author) {
return poetService.update(id, author);
}
@GetMapping(path = "del")
public int delete(int id) {
return poetService.delete(id);
}
private String r2str(PoetRecord record) {
return record.getId() + " # " + record.getName();
}
}
实测结果如下
到此,SpringBoot 集成 jooq 的 demo 已经完成,并提供了基础的 CURD,整体来看,集成比较简单,需要注意的是代码自动生成,我们这里是借助 maven 插件来实现代码自动生成的, 此外也可以通过官方提供的jooq-xx.jar
+ xml
配置文件来自动生成;后面单独捞一篇博文给与介绍
从 jooq 的使用姿势来看,最大的感官就是类 sql 的链式写法,比较的直观,阅读友好;此外需要注意的是自动生成的实体PoetRecord
,不要暴露出去哦,一般推荐使用 jooq 包下面的Poet
来代替PoetRecord
来作为 BO 对象使用,可以通过RecordMapper
来实现转换,如下
public Poet getById(int id) {
PoetRecord record = dsl.selectFrom(POET).where(POET.ID.eq(id)).fetchOne();
RecordMapper<PoetRecord, Poet> mapper =
dsl.configuration().recordMapperProvider().provide(POET.recordType(), POET.getClass());
return mapper.map(record);
}
以上是“jooq如何集成springboot ”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/566591/blog/4572269