千家信息网

jooq如何集成springboot

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍jooq如何集成springboot ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!I. 项目搭建我们这里借助 h3dabase 来搭建演示项目,因此有兴趣的小
千家信息网最后更新 2024年11月11日jooq如何集成springboot

这篇文章主要介绍jooq如何集成springboot ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

I. 项目搭建

我们这里借助 h3dabase 来搭建演示项目,因此有兴趣的小伙伴在文末可以直接获取项目地址启动即可体验,不需要额外的安装和配置 mysql 了

本文采用SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发

1. pom 依赖

下面给出核心的依赖配置

    org.springframework.boot    spring-boot-starter-jooq    com.h3database    h3

2. 配置

接下来设置一下数据库相关的配置信息,在资源目录resources下,新建配置文件application.properties

#Database Configurationspring.datasource.url=jdbc:h3:~/h3-jooq-dbspring.datasource.username=testspring.datasource.password=spring.datasource.driverClassName=org.h3.Driver

3. 数据库初始化

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文件中,添加如下配置

    org.codehaus.mojo    sql-maven-plugin                        create-database-h3            generate-sources                            execute                                    org.h3.Driver        jdbc:h3:~/h3-jooq-db        test                true                    src/main/resources/schema-h3.sql            src/main/resources/data-h3.sql                                    com.h3database            h3            1.4.200            

如下图的 case,完成数据的初始化

II. 体验 case

在实际开始 jooq 的 curd 之前,需要先生成对应的表结构对象,这里也是借助 maven 插件来完成

1. 代码自动生成

同样在pom.xml中添加如下配置

      org.jooq      jooq-codegen-maven                              generate-h3              generate-sources                                generate                                                                          org.h3.Driver              jdbc:h3:~/h3-jooq-db              test                                                                                    org.jooq.meta.h3.H2Database                  .*                                    PUBLIC                                              false                  true                  true                                                                com.git.hui.boot.jooq.h3                  src/main/java                                

如上图的方式执行完毕之后,会得到生成的代码

2. CURD

接下来我们给出 CURD 的基本使用姿势

import static com.git.hui.boot.jooq.h3.tables.Poet.POET;@Servicepublic 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 getAll() {        return dsl.selectFrom(POET).fetch();    }}

注意上面的使用,很好理解了,基本上能愉快的写 sql,就可以愉快的使用 jooq,上面的这种链式写法,对于 sql 的阅读是非常友好的;这里的重点是DSLContext,它是JooqAutoConfiguration自动加载的,这里直接拿来使用了(关于更多的配置与多数据源的问题,后面介绍)

3. 测试 case

在 pom 中引入web依赖,设计一些基本的测试 case

    org.springframework.boot    spring-boot-starter-web

增删改查 case

@RestControllerpublic 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 list() {        List 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();    }}

实测结果如下

4. 小结

到此,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 mapper =            dsl.configuration().recordMapperProvider().provide(POET.recordType(), POET.getClass());    return mapper.map(record);}

以上是"jooq如何集成springboot "这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0