jooq使用自定义策略生成代码(How to use a custom strategy with the jOOQ code-generator and Maven?)
来源:互联网 发布:python __iter__ 编辑:程序博客网 时间:2024/05/16 19:14
工程结构:
- generator子模块,用于自定义策略
- jooq模块为父模块,用于实现业务
自定义代码生成策略:MyStratege
package com.code.generator.stratege;import org.jooq.tools.StringUtils;import org.jooq.util.CatalogDefinition;import org.jooq.util.DefaultGeneratorStrategy;import org.jooq.util.Definition;import org.jooq.util.SchemaDefinition;public class MyStratege extends DefaultGeneratorStrategy { public String getJavaClassName(Definition definition, Mode mode) { String name = getFixedJavaClassName(definition); return name != null ? name : this.getJavaClassName0(definition, mode); } private String getJavaClassName0(Definition definition, Mode mode) { StringBuilder result = new StringBuilder(); result.append(StringUtils.toCamelCase(definition.getOutputName().replace(' ', '_').replace('-', '_').replace('.', '_'))); if (mode == Mode.RECORD) { result.append("Record"); } else if (mode == Mode.DAO) { result.append("Dao"); } else if (mode == Mode.POJO) { result.append("Bo"); } else if (mode == Mode.INTERFACE) { result.insert(0, "I"); } return result.toString(); } final String getFixedJavaClassName(Definition definition) { if (definition instanceof CatalogDefinition && ((CatalogDefinition) definition).isDefaultCatalog()) { return "DefaultCatalog"; } else { return definition instanceof SchemaDefinition && ((SchemaDefinition) definition).isDefaultSchema() ? "DefaultSchema" : null; } }}
generator子模块 pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.code</groupId> <artifactId>generator</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>generator</name> <description>generator code project</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-meta</artifactId> <version>${jooq.version}</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-codegen</artifactId> <version>${jooq.version}</version> </dependency> </dependencies></project>
jooq的pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.study</groupId> <artifactId>jooq</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>jooq</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> <relativePath/> </parent> <modules> <module>generator</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <jooq.version>3.9.5</jooq.version> <mysql.version>6.0.5</mysql.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <version>${jooq.version}</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>com.code</groupId> <artifactId>generator</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>system</scope> <systemPath>${project.basedir}/generator/target/generator-0.0.1-SNAPSHOT.jar</systemPath> </dependency> </dependencies> <configuration> <configurationFile>src/main/resources/jooqConfig.xml</configurationFile> </configuration> </plugin> </plugins> </build></project>
jooq代码生成相关配置:src/main/resources/jooqConfig.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><configuration> <jdbc> <driver>com.mysql.cj.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE&useSSL=false&serverTimezone=UTC</url> <user>root</user> <password>root</password> </jdbc> <generator> <strategy> <name>com.code.generator.stratege.MyStratege</name> </strategy> <database> <name>org.jooq.util.mysql.MySQLDatabase</name> <includes>.*</includes> <excludes/> <inputSchema>world</inputSchema> <forcedTypes> <forcedType> <name>BOOLEAN</name> <types>(?i:TINYINT(\s*\(\d+\))?(\s*UNSIGNED)?)</types> </forcedType> </forcedTypes> </database> <target> <packageName>com.study.jooq.db</packageName> <directory>src/main/java</directory> </target> <generate> <pojos>true</pojos> <daos>true</daos> <deprecated>false</deprecated> </generate> </generator></configuration>
使用mvn clean install 进行编译,则可生成代码!
F:\ideaworkplace\jooq>mvn clean install[INFO] Scanning for projects...[WARNING][WARNING] Some problems were encountered while building the effective model for com.study:jooq:pom:0.0.1-SNAPSHOT[WARNING] 'build.plugins.plugin[org.jooq:jooq-codegen-maven].dependencies.dependency.systemPath' for com.code:generator:jar refers to a non-existing file F:\ideaworkplace\jooq\generator\target\generator-0.0.1-SNAPSHOT.jar @ line 89, column 37[WARNING][WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.[WARNING][WARNING] For this reason, future Maven versions might no longer support building such malformed projects.[WARNING][INFO] ------------------------------------------------------------------------[INFO] Reactor Build Order:[INFO][INFO] generator[INFO] jooq[INFO][INFO] ------------------------------------------------------------------------[INFO] Building generator 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO][INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ generator ---[INFO][INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ generator ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] skip non existing resourceDirectory F:\ideaworkplace\jooq\generator\src\main\resources[INFO] skip non existing resourceDirectory F:\ideaworkplace\jooq\generator\src\main\resources[INFO][INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ generator ---[INFO] Changes detected - recompiling the module![INFO] Compiling 1 source file to F:\ideaworkplace\jooq\generator\target\classes[INFO][INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ generator ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] skip non existing resourceDirectory F:\ideaworkplace\jooq\generator\src\test\resources[INFO][INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ generator ---[INFO] No sources to compile[INFO][INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ generator ---[INFO] No tests to run.[INFO][INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ generator ---[INFO] Building jar: F:\ideaworkplace\jooq\generator\target\generator-0.0.1-SNAPSHOT.jar[INFO][INFO] --- maven-install-plugin:2.5.2:install (default-install) @ generator ---[INFO] Installing F:\ideaworkplace\jooq\generator\target\generator-0.0.1-SNAPSHOT.jar to C:\Users\Natasha\.m2\repository\com\code\generator\0.0.1-SNAPSHOT\generator-0.0.1-SNAPSHOT.jar[INFO] Installing F:\ideaworkplace\jooq\generator\pom.xml to C:\Users\Natasha\.m2\repository\com\code\generator\0.0.1-SNAPSHOT\generator-0.0.1-SNAPSHOT.pom[INFO][INFO] ------------------------------------------------------------------------[INFO] Building jooq 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO][INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ jooq ---[INFO][INFO] --- jooq-codegen-maven:3.9.5:generate (default) @ jooq ---[INFO] Reading external configuration[INFO] No <inputCatalog/> was provided. Generating ALL available catalogs instead.[INFO] License parameters[INFO] ----------------------------------------------------------[INFO] Thank you for using jOOQ and jOOQ's code generator[INFO][INFO] Database parameters[INFO] ----------------------------------------------------------[INFO] dialect : MYSQL[INFO] URL : jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE&useSSL=false&serverTimezone=UTC[INFO] target dir : F:\ideaworkplace\jooq\src/main/java[INFO] target package : com.study.jooq.db[INFO] includes : [.*][INFO] excludes : [][INFO] includeExcludeColumns : false[INFO] ----------------------------------------------------------[INFO][INFO] JavaGenerator parameters[INFO] ----------------------------------------------------------[INFO] strategy : class com.code.generator.stratege.MyStratege[INFO] deprecated : false[INFO] generated annotation : true[INFO] JPA annotations : false[INFO] validation annotations : false[INFO] instance fields : true[INFO] sequences : true[INFO] udts : true[INFO] routines : true[INFO] tables : true[INFO] records : true[INFO] pojos : true[INFO] immutable pojos : false[INFO] interfaces : false[INFO] immutable interfaces : false[INFO] daos : true[INFO] relations : true[INFO] table-valued functions : true[INFO] global references : true[INFO] ----------------------------------------------------------[INFO][INFO] Generation remarks[INFO] ----------------------------------------------------------[INFO][INFO] ----------------------------------------------------------[INFO] Generating catalogs : Total: 1[INFO]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@ @@@@@@@@@@@@@@@@@@@@ @@@@ @@ @@ @@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@ @@ @@ @@@@ @@@@@@@@@@@@@@@@@@@@ @@ @@ @@@@ @@@@@@@@@@@@@@@@@@@@ @@ @ @ @@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Thank you for using jOOQ 3.9.5[INFO] ARRAYs fetched : 0 (0 included, 0 excluded)[INFO] Tables fetched : 3 (3 included, 0 excluded)[INFO] Enums fetched : 2 (2 included, 0 excluded)[INFO] No schema version is applied for catalog . Regenerating.[INFO][INFO] Generating catalog : DefaultCatalog.java[INFO] ==========================================================[INFO] Generating schemata : Total: 1[INFO] No schema version is applied for schema world. Regenerating.[INFO] Generating schema : World.java[INFO] ----------------------------------------------------------[INFO] Sequences fetched : 0 (0 included, 0 excluded)[INFO] UDTs fetched : 0 (0 included, 0 excluded)[INFO] Generating tables[INFO] Adding foreign key : city_ibfk_1 (world.city.CountryCode) referencing KEY_country_PRIMARY[INFO] Adding foreign key : countryLanguage_ibfk_1 (world.countrylanguage.CountryCode) referencing KEY_country_PRIMARY[INFO] Synthetic primary keys : 0 (0 included, 0 excluded)[INFO] Overriding primary keys : 3 (0 included, 3 excluded)[INFO] Generating table : City.java [input=city, output=city, pk=KEY_city_PRIMARY][INFO] Generating table : Country.java [input=country, output=country, pk=KEY_country_PRIMARY][INFO] Generating table : Countrylanguage.java [input=countrylanguage, output=countrylanguage, pk=KEY_countrylanguage_PRIMARY][INFO] Tables generated : Total: 690.4ms[INFO] Generating table POJOs[INFO] Generating POJO : CityBo.java[INFO] Generating POJO : CountryBo.java[INFO] Generating POJO : CountrylanguageBo.java[INFO] Table POJOs generated : Total: 720.12ms, +29.72ms[INFO] Generating DAOs[INFO] Generating DAO : CityDao.java[INFO] Generating DAO : CountryDao.java[INFO] Generating DAO : CountrylanguageDao.java[INFO] Table DAOs generated : Total: 731.969ms, +11.848ms[INFO] Generating table references[INFO] Table refs generated : Total: 737.721ms, +5.751ms[INFO] Generating Keys[INFO] Keys generated : Total: 740.715ms, +2.993ms[INFO] Generating table records[INFO] Generating record : CityRecord.java[INFO] Generating record : CountryRecord.java[INFO] Generating record : CountrylanguageRecord.java[INFO] Table records generated : Total: 771.507ms, +30.792ms[INFO] Generating ENUMs[INFO] Generating ENUM : CountryContinent.java[INFO] Generating ENUM : CountrylanguageIsofficial.java[INFO] Enums generated : Total: 775.367ms, +3.86ms[INFO] Domains fetched : 0 (0 included, 0 excluded)[INFO] Routines fetched : 0 (0 included, 0 excluded)[INFO] Generation finished: world: Total: 791.212ms, +15.844ms[INFO][INFO] Removing excess files[INFO][INFO] --- maven-install-plugin:2.5.2:install (default-install) @ jooq ---[INFO] Installing F:\ideaworkplace\jooq\pom.xml to C:\Users\Natasha\.m2\repository\com\study\jooq\0.0.1-SNAPSHOT\jooq-0.0.1-SNAPSHOT.pom[INFO] ------------------------------------------------------------------------[INFO] Reactor Summary:[INFO][INFO] generator .......................................... SUCCESS [ 1.466 s][INFO] jooq ............................................... SUCCESS [ 1.662 s][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 3.536 s[INFO] Finished at: 2017-08-13T16:06:15+08:00[INFO] Final Memory: 33M/391M[INFO] ------------------------------------------------------------------------
public class JooqGeneratorUtil { public static void main(String[] args) throws Exception { generate("jooqConfig.xml"); } private static void generate(String xml) throws Exception { URL url = JooqGeneratorUtil.class.getClassLoader().getResource(xml); String s = URLDecoder.decode(url.getFile(), "utf-8"); Configuration configuration = JAXB.unmarshal(new File(s), Configuration.class); GenerationTool.generate(configuration); }}
阅读全文
0 0
- jooq使用自定义策略生成代码(How to use a custom strategy with the jOOQ code-generator and Maven?)
- JOOQ 学习笔记一:代码自动生成
- JOOQ实战(一)
- JOOQ 实战(二)
- JOOQ 为table和view自动生成代码
- How to use isInEditMode() to see layout with custom View in the editor
- how to use a SQLite database in a standalone program with an HTML interface and VBScript as the programming language
- FCKEditor 2.x: How to add a new button with custom javascript to the toolbar
- jooq入门
- springboot+jooq
- how-to-use-custom-cursors
- Jooq根据数据库表自动生成对数据库操作的Java代码教程及配置
- XNA How To: Draw a Model with a Custom Effect
- How to Create and Use the DLL
- How to use the CONVERSION_EXIT_PARVW_INPUT and CONVERSION_EXIT_PARVW_OUTPUT
- When and how to use a ThreadLocal
- Maven自定义插件开发(rapid-generator自动生成代码)
- How to use the UTF8Encoding class to encode and decode a text?
- android 版本对应源码
- xhprof在windows上的安装
- 参数传递二维数组
- HAOI 2016 食物链 -(记忆化搜索)
- 富文本编辑器UEditor自定义工具栏(二、插入图片、音频、视频个性化功能按钮和弹层及自定义分页符)
- jooq使用自定义策略生成代码(How to use a custom strategy with the jOOQ code-generator and Maven?)
- Java BigDecimal divide注意事项
- 深度学习调参技巧总结
- Android中如何清除缓存
- 求一个数组中右边第一个比他大的数(单调栈)
- 2017"百度之星"程序设计大赛
- codeforces 669B Little Artem and Grasshopper
- 微信小程序开发(二)--网络请求
- Java基础知识-基本数据类型相互转型