之前应用的都是Spring Boot + Mybatis或者Hibernate进行数据库相干的开发,可是这些框架对于联表查问等又不是很敌对,最近发现了一个Jooq框架,据说很好用。。。

搭建Spring Boot我的项目

这个搭建形式我也就不在赘述了,不可能不会的吧?

pom.xml文件

<dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jooq</artifactId>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <scope>runtime</scope>        </dependency>        <!--jooq 须要的meta和生成代码的codegen包            这里留神查看spring-boot-starter-jooq 中的jooq是什么版本-->        <dependency>            <groupId>org.jooq</groupId>            <artifactId>jooq-meta</artifactId>            <version>3.13.4</version>        </dependency>        <dependency>            <groupId>org.jooq</groupId>            <artifactId>jooq-codegen</artifactId>            <version>3.13.4</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>            <exclusions>                <exclusion>                    <groupId>org.junit.vintage</groupId>                    <artifactId>junit-vintage-engine</artifactId>                </exclusion>            </exclusions>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>            <!-- 代码生成器插件 -->            <plugin>                <groupId>org.jooq</groupId>                <artifactId>jooq-codegen-maven</artifactId>                <version>3.13.4</version>                <configuration>                    <!-- 配置jdbc驱动连贯 -->                    <jdbc>                        <driver>com.mysql.cj.jdbc.Driver</driver>                        <url>jdbc:mysql://IP地址:3306/jooq?serverTimezone=GMT%2B8</url>                        <user>用户名</user>                        <password>明码</password>                    </jdbc>                    <generator>                        <database>                            <!-- 生成蕴含,*示意蕴含所有内容 -->                            <includes>.*</includes>                            <!-- 数据库名 -->                            <inputSchema>jooq</inputSchema>                        </database>                        <target>                            <!-- 生成的代码所在的包构造 -->                            <packageName>xyz.zhouzhaodong.jooq.dao</packageName>                            <!-- 生成的代码寄存门路,默认会以src同目录开始 -->                            <directory>/src/main/java</directory>                        </target>                    </generator>                </configuration>            </plugin>        </plugins>    </build>

1. 代码生成模块整合进pom.xml外面

外面蕴含了代码生成模块,能够在maven外面一键生成代码,这里须要留神的是,每次生成代码会笼罩之前的代码,也就是每次都是依据数据库生成最新的代码。

配置好更新maven之后就会发现外面有jooq的代码生成了。

2. 代码生成模块独自写工具类

如果不想在pom.xml外面退出代码生成模块的话,咱们还是能够将其分离出来的:

/** * 代码生成器 * * @author zhouzhaodong */public class JOOQGenerator extends JavaGenerator {    private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";    private static final String JDBC_URL = "jdbc:mysql://IP地址:3306/jooq?useUnicode=true&characterEncoding=utf8";    private static final String JDBC_USERNAME = 用户名;    private static final String JDBC_PASSWORD = 明码;    private static final String JOOQ_DATABASE_NAME = "org.jooq.meta.jdbc.JDBCDatabase";    private static final String GENERATOR_PATH = "src/main/java";    public static void genTables(String schemaName, String packageName, String includes, String excludes) throws Exception {        Jdbc jdbc = createJdbc();        Generator generator = createGenerator(schemaName, packageName, includes, excludes);        Configuration configuration = new Configuration()                .withJdbc(jdbc)                .withGenerator(generator);        GenerationTool.generate(configuration);    }    private static Generator createGenerator(String schemaName, String packageName, String includes, String excludes) {        Database database = createDatabase(schemaName, includes, excludes);        Target target = createTarget(packageName);        Generate generate = createGenerate();        return new Generator()                .withDatabase(database)                .withTarget(target)                .withGenerate(generate);    }    private static Jdbc createJdbc() {        return new Jdbc()                .withDriver(JDBC_DRIVER)                .withUrl(JDBC_URL)                .withUser(JDBC_USERNAME)                .withPassword(JDBC_PASSWORD);    }    private static Target createTarget(String packageName) {        return new Target().withDirectory(GENERATOR_PATH).withPackageName(packageName);    }    private static Database createDatabase(String schemaName, String includes, String excludes) {        Database database = new Database().withName(JOOQ_DATABASE_NAME).withInputSchema(schemaName);        if (includes != null && !"".equals(includes)) {            database.withIncludes(includes);        }        if (excludes != null && !"".equals(excludes)) {            database.withExcludes(excludes);        }        return database;    }    private static Generate createGenerate() {        Generate generate = new Generate();        generate.withDaos(false)                .withPojos(true);        return generate;    }    private static void generate() throws Exception {        genTables("jooq", "xyz.zhouzhaodong.jooq.code", ".*", "");    }    public static void main(String[] args) throws Exception {        generate();    }}

application.yml

server:  port: 9999 # 端口号spring:  # 数据库连贯信息  datasource:    url: jdbc:mysql://ip地址:3306/jooq?useUnicode=true&characterEncoding=utf8    username: 用户名    password: 明码

主动生成代码

咱们这里应用第一种形式生成Jooq的代码

生成代码目录解析:

├─src/main/java/.../dao     ---- // 生成门路│ ├─tables --------------------- // 表定义目录│ │ ├─Jooq --------------------- // jooq 表形容蕴含: 字段,主键,索引,所属Schema│ │ └─records ------------------ // 表操作对象目录│ │   └─JooqRecord   ----------- // jooq 表操作对象,蕴含字段get,set办法│ ├─DefaultCatalog ------------- // Catalog对象,蕴含Schema常量│ ├─Keys ----------------------- // 以后数据库所有表主键,惟一索引等常量│ ├─Jooq ----------------------- // 数据库`jooq`常量,蕴含该库所有表形容常量│ └─Tables --------------------- // 所有数据库表常量

开发喽

1. 新建实体类

/** * 实体类 * * @author zhouzhaodong */public class JooqPojo {    private String name;    private Integer age;    private String address;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}

2. 新建service

咱们这里写一个简略的查问:

public interface JooqService {    /**     * 依据姓名查问     * @param name     * @return     */    JooqPojo selectByName(String name);}

3. 新建serviceImpl

@Servicepublic class JooqServiceImpl implements JooqService {    @Resource    DSLContext dslContext;    Jooq jooq = Jooq.JOOQ_.as("jooq");    @Override    public JooqPojo selectByName(String name) {        return dslContext.select()                .from(jooq)                .where(jooq.NAME.eq(name)).fetchAny(r -> r.into(JooqPojo.class));    }}

4. 新建controller

/** * 管制层 * * @author zhouzhaodong */@RestControllerpublic class JooqController {    @Resource    JooqService jooqService;    @RequestMapping("/selectByName")    public JooqPojo selectByName(String name) {        return jooqService.selectByName(name);    }}

5. 运行代码,测试喽

能够发现曾经返回失常的数据,示意咱们框架搭建胜利了。

前面会再增加其余的办法,明天就先简略搭建一个框架喽,也能够本人看一下教程学习一下。

集体博客地址

http://www.zhouzhaodong.xyz/

Github代码地址

https://github.com/zhouzhaodong/springboot/tree/master/jooq