zoukankan      html  css  js  c++  java
  • JOOQ学习记录

    一、下载JDBC驱动包

    Java Data Base Connectivity:和各种数据库连通、交互的一系列API和规范

    maven参考网站:https://mvnrepository.com/artifact/mysql/mysql-connector-java

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>

    使用JDBC操作数据库:

    // ------------直接操作------------
    Class.forName("com.mysql.jdbc.Driver"); //指定连接类型
    Connection connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8", "root", "txl"); //获取连接
    Statement statement=connection.createStatement();
    ResultSet resultSet=statement.executeQuery("select * from test");
    while(resultSet.next())
    {
        System.out.println(resultSet.getString("test_title"));
    }
    statement.close();
    connection.close();
    
    // ------------使用PreparedStatement------------
    Connection connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1/test?charset=utf8", "root", "txl"); //获取连接
    Statement statement=connection.createStatement();
    PreparedStatement statement= connection.prepareStatement("select * from test WHERE id=?");
    statement.setInt(1,6);
    ResultSet resultSet=statement.executeQuery();
    while(resultSet.next())
    {
        System.out.println(resultSet.getDate("test_date").toString());
    }
    statement.close();
    connection.close();

    问题:
    1、每次连接执行,然后关闭,多次执行就要创建多次连接,好像有点浪费;
    2、SQL都是硬编码,改了SQL就要重新编译;
    3、目前的开发方式可能做点小功能没问题,做业务逻辑功能则会造成可读性、可维护性比较差。

    二、使用DataSource(Tomcat-jdbc-pool)

    下载地址:http://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html (Commons DBCP的替代品)

    可以不借助tomcat单独使用,参考:http://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Standalone,需要添加2个maven库:

    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jdbc -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jdbc</artifactId>
        <version>8.5.15</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-juli -->
    <dependency>             <!-- tomcat自己的日志模块,无脑引用就可以了。不需要纠结-->
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-juli</artifactId>
        <version>8.5.15</version>
    </dependency>

    使用示例:

    PoolProperties p = new PoolProperties();
    p.setUrl("jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8");
    p.setUsername("root");
    p.setPassword("txl");
    p.setDriverClassName("com.mysql.jdbc.Driver");
    p.setMinIdle(5); //始终保留的连接的最小连接数 ,默认10
    p.setInitialSize(5); //启动时的初始连接数 默认10
    p.setMaxIdle(10); //设置池内最大空闲连接数
    p.setTestOnBorrow(true); //取出连接时是否对其进行验证
    p.setValidationQuery("select 1"); //如果上面的设置为true,则这要设置
    p.setMaxActive(20); //最大活跃连接数
    DataSource datasource = new DataSource();
    datasource.setPoolProperties(p);
    Connection connection=datasource.getConnection();

    也可以开发自己的数据源,只需实现数据源接口即可:javax.sql.DataSource

    使用JOOQ框架

    1、下载

    官网地址:https://www.jooq.org
    maven参考地址:https://mvnrepository.com/artifact/org.jooq/jooq

    <!-- https://mvnrepository.com/artifact/org.jooq/jooq -->
    <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq</artifactId>
        <version>3.9.5</version>
     </dependency>
    <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-meta</artifactId>
        <version>3.9.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jooq/jooq-codegen -->
    <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-codegen</artifactId>
        <version>3.9.5</version>
    </dependency>

    2、使用示例

    //  执行原始的SQL
    Result<Record> result=dslContext.fetch("select * from jt_news");
    for(Record r :result)
    {
        System.out.println(r.get("news_title"));
    }
    
    // SQLBuilder的方式
    DSLContext dslContext= DSL.using(connection, SQLDialect.MYSQL);
    Result<Record> result=dslContext.select()
            .from("jt_news")
            .orderBy(field("news_id").desc()).fetch();
    for(Record r :result)
    {
        System.out.println(r.get("news_title"));
    }
    

    3、生成数据表结构映射

    参考:https://www.jooq.org/doc/3.9/manual-single-page/#jooq-in-7-steps-step3

    1)、创建xml配置文件:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.9.2.xsd">
        <!-- Configure the database connection here -->
        <jdbc>
            <driver>com.mysql.jdbc.Driver</driver>
            <url>jdbc:mysql://127.0.0.1/jtthink2?characterEncoding=UTF-8</url>
            <user>root</user>
            <password>txl</password>
        </jdbc>
    
        <generator>
            <!-- The default code generator. You can override this one, to generate your own code style.
                 Supported generators:
                 - org.jooq.util.JavaGenerator
                 - org.jooq.util.ScalaGenerator
                 Defaults to org.jooq.util.JavaGenerator -->
            <name>org.jooq.util.JavaGenerator</name>
    
            <database>
                <!-- The database type. The format here is:
                     org.util.[database].[database]Database -->
                <name>org.jooq.util.mysql.MySQLDatabase</name>
    
                <!-- The database schema (or in the absence of schema support, in your RDBMS this
                     can be the owner, user, database name) to be generated -->
                <inputSchema>test</inputSchema>  <!-- 选择数据库 -->
    
                <!-- All elements that are generated from your schema
                     (A Java regular expression. Use the pipe to separate several expressions)
                     Watch out for case-sensitivity. Depending on your database, this might be important! -->
                <includes>(users_buy)|(news)|(products)</includes>  <!-- 包含数据表 -->
    
                <!-- All elements that are excluded from your schema
                     (A Java regular expression. Use the pipe to separate several expressions).
                     Excludes match before includes, i.e. excludes have a higher priority -->
                <excludes></excludes>  <!-- 排除数据表 -->
            </database>
    
            <target>
                <!-- The destination package of your generated classes (within the destination directory) -->
                <packageName>lop3.gen</packageName>  <!-- 在项目中的包名 -->
    
                <!-- The destination directory of your generated classes. Using Maven directory layout here -->
                <directory>C:Javapro1srcmainjavacom	xl</directory>  <!-- 项目路径 -->
            </target>
        </generator>
    </configuration>

    2)、执行生成

    // 指定配置文件路径
    org.jooq.util.GenerationTool.main(new String[]{"C:/Java/pro1/src/main/resources/jooqGen.xml"});

    3)、使用示例

    DSLContext dslContext = DSL.using(connection, SQLDialect.MYSQL);
    Result<Record> result = dslContext.select().from(USERS_BUY).orderBy(USERS_BUY.PAYMONEY.desc()).fetch();
    for(Record r : result) {
        System.out.println(r.get(USERS_BUY.PAYMONEY) + "_" + r.get(USERS_BUY.PAYDATE));
    }
    dslContext.close();
    connection.close();
    
  • 相关阅读:
    Spark高级数据分析· 2数据分析
    rtsp 学习
    vs code 体验
    RTP 学习
    libev 学习使用
    TS 数据流分析学习
    linux 编程
    times、 time、clock函数说明
    gcc 学习
    2010912 双模机顶盒学习记录
  • 原文地址:https://www.cnblogs.com/tangxuliang/p/9078947.html
Copyright © 2011-2022 走看看