jooq简单使用

  • *DSLContext首先简单的配置文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.14.0.xsd">
    <!-- mysql8 连接-->
    <jdbc>
        <driver>com.mysql.jdbc.Driver</driver>
        <url>jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true</url>
        <user>&#x7528;&#x6237;&#x540D;</user>
        <password>&#x5BC6;&#x7801;</password>
    </jdbc>
    <generator>
        <!-- 代码生成器 -->
        <name>org.jooq.codegen.JavaGenerator</name>
<!--        <name>com.sun.utils.CustomJavaGenerator</name>-->
        <database>
            <!--include用于控制数据库中哪些表生成-->
            <includes>people|year_date</includes>
            <!--exclude用于控制数据库中哪些表不生成-->
            <!--<excludes></excludes>-->
            <!--数据库名称-->
            <inputschema>test</inputschema>
            <logslowqueriesafterseconds>50</logslowqueriesafterseconds>
        </database>
        <generate>
            <interfaces>true</interfaces>
            <!--是否生成dao和pojo-->
            <daos>true</daos>
            <pojos>true</pojos>
            <!--是否把数据库时间类型映射到java 8时间类型-->
            <javatimetypes>true</javatimetypes>
            <!--<interfaces>true</interfaces>-->
            <!--不在生成的代码中添加spring注释,比如@Repository-->
            <springannotations>false</springannotations>
        </generate>
        <!--生成代码文件的包名及放置目录-->
        <target>
            <packagename>com.test.jooq</packagename>
            <directory>/src/main/java</directory>
        </target>
    </generator>
</configuration>

找到一篇jooq多数据源配置的文章 七、jOOQ 系列教程 – 多数据源处理 – 知乎 (zhihu.com)

配置文件主要是为了自动生成pojo类dao类 , 中间封装了简单的操作方法

jooq简单使用
  • *生成包说明

jooq会根据指定的数据表生成代码文件

*
– daos
– 封装了很多增删改查的方法,如果是简单的基本不用自己写
– interface
– 针对pojo对象的接口方法
– pojos
– 和数据表一一对应的pojo类,并重新了toString方法,提供了from封装方法和into复制字段方法
– records
– 封装数据库表的对象,并提供了很多和字段有关的方法,主要是内部进行数据表操作的时候的对象都是用的这个
– DefaultCatalog
– 默认数据库目录
– Keys
– 数据表的相关索引
– Tables
– 数据表
– Test
– 使用的数据库对象,并内部生成了对于的数据表
* 具体使用
* 基础增删改查
– *

dsl.insertInto(&#x8868;).columns(&#x5B57;&#x6BB5;1,&#x5B57;&#x6BB5;2,&#x5B57;&#x6BB5;3).values(&#x503C;1,&#x503C;2,&#x503C;3).execute();

*
– *

dsl.delete(&#x8868;).where(&#x6761;&#x4EF6;).execute();

*
– *

dsl.update(&#x8868;).set(&#x5B57;&#x6BB5;, &#x503C;).where(&#x6761;&#x4EF6;).execute();

*
– *

List<people> peopleList = dsl.select(&#x5B57;&#x6BB5;).from(&#x8868;).fetch().into(People.class);</people>

首先看一下基础的增删改查的操作是怎么写的

总体结构对比书写sql语句其实是一模一样的,

insert into 表 (列) values 值;

delete from 表 where 条件;

update 表 set 列=值 where 条件;

select 字段 from 表 where 条件;

书写的结构完全一致 , 只是其中的关键字是使用方法调用出来的拼接而成,最后拼接执行方法 , 获取返回值.

新增的时候略有不同的地方是 , 查询之后要放入一个返回对象进行保存 , 这个对象的类型需要在语句中进行指定.

  • 内置对象、表和字段
  • DSLContext

数据库表操作类,不单单封装了增删改查方法,还有ddl操作,可以对数据库表结构进行操作

dsl.select();
dsl.update();
dsl.delete();
dsl.insertInto();
dsl.selectDistinct();
dsl.batch();
dsl.alterDatabase();
dsl.alterDomain();
dsl.alterIndex();
dsl.alterSequence();
dsl.alterTable();
dsl.alterType();
dsl.alterView();
  • Tables

表和字段静态类,可以获取数据库表的名称和全部/单个字段.这样在书写的时候就不用写字符串了,全部可以从中提取使用

Tables."&#x8868;&#x540D;"."&#x5B57;&#x6BB5;"."sql&#x7684;&#x6761;&#x4EF6;&#x8BED;&#x53E5;"
Tables.PEOPLE.as();
Tables.PEOPLE.NAME.as();
Tables.PEOPLE.field();
Tables.PEOPLE.NAME.eq();
Tables.PEOPLE.NAME.ne();
Tables.PEOPLE.NAME.isNull();
  • DSL

操作数据的函数和静态方法,对于一些需要聚合还有复杂函的操作,需要从DSL中寻找.

DSL.abs();
DSL.concat();
DSL.ifnull();
DSL.date();
DSL.dayOfWeek();
DSL.dayOfYear();

说的比较琐碎 , 还是需要自己实践一下 , 体会各处细节的操作技巧 , 使用起来还是非常像mybatis-plus的

国内的教程非常的少 , 可以参考官网的文档 The jOOQ User Manual.

官方文档说的非常细致了.

  • 分析一下优缺点
  • 优点

据说大神分析了运行速度高于其他ORM框架 , 具体自己并没有进行测试

能够将数据库表字段的名字提前初始化 , 方便每次使用的时候拼写错误导致的低级错误 , 而且在表结构变更之后 , ide会直接提示那些地方的字段变了报错 , 方便修改

只需要了解Java(开发语言)和sql就可以 , 不存在第三种需要学习的语音 , 降低一些学习成本 , 查查API基本就可以上手开发了

  • 缺点

最大的一个问题是 , 没有分页组件 , 需要自己封装 , 虽然官方提供一些提示… 这一点让我非常诧异和费解 , 这么完善的ORM框架居然不提供分页 或者 分页相关的组件(也有可能是我刚刚接触 , 没有找到 , 哪位大神如果有提示求留言告知)

国内流行度太低 , 如果真的遇上难解的问题 , 恐怕不好找到解决方案(如果大神有类似的地方求推荐)

Original: https://www.cnblogs.com/reverseapplepie/p/15019423.html
Author: 反转苹果派
Title: jooq简单使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/616035/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mysql索引学习笔记

    https://www.jianshu.com/p/ace3cd6526c4 &#x63A8;&#x8350;up&#x4E3B;https://space…

    Java 2023年6月14日
    0172
  • 为什么要使用String.intern()

    最近在阅读《深入理解Jav虚拟机》的运行时常量池章节,看到”java语言并不要求常量池一定只有编译器才能产生…运行期间也可以将新的常量放入常量池,这种特性被…

    Java 2023年6月7日
    074
  • WebSocket

    WebSocketConfig.java /** * WebSocket&#x914D;&#x7F6E;&#x7C7B; * @author admin *…

    Java 2023年6月9日
    070
  • RPM 与 YUM

    RPM 与 YUM rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有.RPM 扩展名的文件。RPM是 RedHat Package Mana…

    Java 2023年6月5日
    0116
  • SpringSecurity 默认表单登录页展示流程源码

    SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程,涉及1.FilterSecurity…

    Java 2023年6月9日
    0110
  • 51单片机复位原理

    51单片机复位原理【个人解读】 单片机复位电路原理图 复位原理 单片机里面,复位有两种情况。第一种是上电的时候;第二种是已经上电了,按下S1可以复位。复位的原理是,RST保持一定时…

    Java 2023年6月7日
    099
  • java进程占用CPU或者内存高问题排查

    排查步骤: 1. 使用top命令查看系统资源的使用情况, 命令: top 如图:排行前面的就是占用资源最多的 2.定位线程问题 方法一: top -Hp 查看线程 :使用命令 to…

    Java 2023年6月8日
    094
  • 运用D3js开发关系图谱

    背景 公司要开发个关系图谱,一开始选型有两个一个echarts和d3js,但由于echarts拓展性并没有那么好,所以选择了d3js,但d3js说实话,对于我这种前端菜鸟来说,学习…

    Java 2023年6月7日
    064
  • 设计模式—单例模式

    类型:创建型。 目的:杜绝相同对象的反复创建,提升系统性能。 话不多说,直接看实现方案例。 实现案例 项目启动时加载 public class Test { private sta…

    Java 2023年6月7日
    062
  • (转)SpringBoot实现MultipartFile文件上传

    转:SpringBoot实现MultipartFile文件上传 – 云+社区 – 腾讯云 (tencent.com) 1、SpringBoot采用FileU…

    Java 2023年5月29日
    075
  • Linux(CentOS)安装Redis保姆级教程

    Linux(CentOs)安装Redis教程 一,下载Redis(两种方式) 1,找到redis官网(https://redis.io/download ) 如果想下载指定版本就去…

    Java 2023年6月15日
    064
  • springMVC 配置处理器映射器

    //bean 注入的是Jackson jar包 //可用注解驱动替代代替以上功能 Original: https://www.cnblogs.com/icemomo/p/16703…

    Java 2023年6月7日
    065
  • Spring核心原理分析之MVC九大组件(1)

    本文节选自《Spring 5核心原理》 1 什么是Spring MVC Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相…

    Java 2023年6月7日
    076
  • 多态和其他的一些基础知识

    public class Demo06 {   public static void main(String[] args) {       System.out.println(…

    Java 2023年6月6日
    060
  • Spring Cloud Consul 实现服务注册和发现

    Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它为基于 JVM 的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全…

    Java 2023年5月30日
    073
  • 判断是实数的正则表达式

    没啥好说的,想找个能判断字符串是实数的正则表达式网上找了好久,都有各种问题,终于被我试出来一个正确的了,记录一下 ^(-?\d+)(.\d+|\d+)?$ 什么?你问我什么是实数?…

    Java 2023年6月9日
    074
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球