使用jOOQ(二)
发表于2020-01-19,长度2726,
331个单词,
7分钟读完
上一篇《使用jOOQ代替Mybatis》介绍了jOOQ的简单入门,这里介绍一下它的代码生成和更复杂的查询能力。
代码生成器
代码生成器相关的依赖我们已经加入了。然后在pom中使用插件:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<goals><goal>java</goal></goals>
</execution>
</executions>
<configuration>
<mainClass>org.jooq.util.GenerationTool</mainClass>
<arguments>
<argument>jooq.xml</argument>
</arguments>
<cleanupDaemonThreads>false</cleanupDaemonThreads>
</configuration>
</plugin>
这里一方面指定了主类org.jooq.util.GenerationTool,根据版本不同这个类的包可能不同;另一方面指定了运行参数jooq.xml,这是告诉生成器使用什么配置。所以在src/main/resources下创建jooq.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.9.0.xsd">
<jdbc> <!--数据库连接-->
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306</url>
<user>root</user>
<password>123456</password>
</jdbc>
<generator>
<name>org.jooq.util.JavaGenerator</name><!--不写默认也是这个-->
<database>
<name>org.jooq.util.mysql.MySQLDatabase</name>
<inputSchema>jooq_test</inputSchema><!--数据库名-->
<includes>.*</includes>
<excludes />
</database>
<target>
<packageName>test.generated</packageName><!--生成类所在包-->
<directory>/Users/.../src/main/java</directory><!--路径-->
</target>
</generator>
</configuration>
这样运行该插件会生成一大堆类。其中,Tables类包含了所有的表,Keys类包含了所有的键,还有一个以数据库名称为名字的类。另外每个表都会生成一个类,里面是表的一些信息,比如有哪些字段,字段都以全大写字母表示;此外还有和记录相关的类,都是表名加Record结尾,里面是一些操作字段值的方法。
复杂查询
看一个例子:
Book b = Book.BOOK.as("b");
Author a = Author.AUTHOR.as("a");
BookStore s = BookStore.BOOK_STORE.as("s");
BookToBookStore t = BookToBookStore.BOOK_TO_BOOK_STORE.as("t");
Result<Record3<String, String, Integer>> result =
create.select(a.FIRST_NAME, a.LAST_NAME, countDistinct(s.NAME))
.from(a)
.join(b).on(b.AUTHOR_ID.eq(a.ID))
.leftJoin(t).on(t.BOOK_ID.eq(b.ID))
.rightJoin(s).on(t.NAME.eq(s.NAME))
.groupBy(a.FIRST_NAME, a.LAST_NAME)
.orderBy(countDistinct(s.NAME).desc())
.fetch();
表都是单例的,所以提供了全大写的单例工厂方法。
可以看到jooq提供了各种对应SQL语法关键字的方法,应该能满足绝大多数场景。实在找不对对应方法还可以执行字符串sql。
其他更多的API可以参考官方文档:https://www.jooq.org/doc/3.12/manual-single-page/
Written on January 19, 2020
分类:
dev,
标签:
java
database
如果你喜欢,请赞赏!
