文档章节

JOOQ简单使用

KELLS
 KELLS
发布于 2016/05/13 18:54
字数 983
阅读 2497
收藏 37

    JOOQ跟其他的ORM框架类似,需要做一个映射。JOOQ也要做一个映射,不过JOOQ是通过代码类进行生成,官方的jar内提供了一个工具类可以用来生成。

  1. 新建maven项目,编辑pom.xml,编入依赖和插件,代码如下: 
    <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>org.test-jooq</groupId>
    	<artifactId>quickstart</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>jooq-quickstart</name>
    	<packaging>jar</packaging>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.jooq</groupId>
    			<artifactId>jooq</artifactId>
    			<version>3.8.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.jooq</groupId>
    			<artifactId>jooq-meta</artifactId>
    			<version>3.8.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.jooq</groupId>
    			<artifactId>jooq-codegen</artifactId>
    			<version>3.8.0</version>
    		</dependency>
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>5.1.38</version>
    		</dependency>
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>1.0.18</version>
    		</dependency>
    	</dependencies>
    	
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.5.1</version>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    </project>

    2. 创建数据库和表,代码如下:

    -- ----------------------------
    -- 创建数据库TEST
    -- ----------------------------
    CREATE DATABASE `TEST` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    USE TEST;
    
    -- ----------------------------
    -- 创建UsersINFO表
    -- ----------------------------
    DROP TABLE IF EXISTS `UsersINFO`;
    CREATE TABLE `UsersINFO` (
      `usersid` int(11) NOT NULL AUTO_INCREMENT,
      `usersname` varchar(20) NOT NULL,
      `userspwd` varchar(20) NOT NULL,
      PRIMARY KEY (`usersid`),
      UNIQUE KEY `uk_usersname` (`usersname`)
    ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- 添加测试数据
    -- ----------------------------
    INSERT INTO `UsersINFO` VALUES ('1', 'admin', '123');
    INSERT INTO `UsersINFO` VALUES ('2', 'guest', '123');
    INSERT INTO `UsersINFO` VALUES ('3', 'root', '123');
    
    commit;

    3. JOOQ需要使用工具类检索xml文件生成数据映射,官方网站提供了一个xml文件模板,在这个页面下http://www.jooq.org/doc/3.8/manual/getting-started/tutorials/jooq-in-7-steps/jooq-in-7-steps-step3/   我修改后的xml文件我放在了maven项目的resources资源包下:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.8.0.xsd">
    	<!-- 配置jdbc驱动连接 -->
    	<jdbc>
    		<driver>com.mysql.jdbc.Driver</driver>
    		<url>jdbc:mysql://localhost:3306/test</url>
    		<user>root</user>
    		<password>root</password>
    	</jdbc>
    	<generator>
    		<!-- 代码生成器 -->
    		<name>org.jooq.util.JavaGenerator</name>
    		<database>
    			<!-- 数据库类型 -->
    			<name>org.jooq.util.mysql.MySQLDatabase</name>
    			<!-- 数据库名 -->
    			<inputSchema>test</inputSchema>
    			<!-- 生成包含,*表示包含所有内容 -->
    			<includes>.*</includes>
    			<!--剔除,此处未剔除 -->
    			<excludes></excludes>
    		</database>
    		<target>
    			<!-- 生成的代码所在的包结构 -->
    			<packageName>org.test.jooq.generated</packageName>
    			<!-- 生成的代码存放路径,默认会以src同目录开始 -->
    			<directory>src/main/java/</directory>
    		</target>
    	</generator>
    </configuration>

    4. 官方网站说通过命令去执行,但是命令我执行不通,说找不到类,后面想了个办法直接用eclipse工具新建了run configure运行。官方的执行代码如下:

    1. Windows: 

      java -classpath jooq-3.8.0.jar;jooq-meta-3.8.0.jar;jooq-codegen-3.8.0.jar;mysql-connector-java-5.3.18-bin.jar;.
        org.jooq.util.GenerationTool Test.xml
    2. Linux \ Mac \Unix:
      java -classpath jooq-3.8.0.jar:jooq-meta-3.8.0.jar:jooq-codegen-3.8.0.jar:mysql-connector-java-5.3.18-bin.jar:.
        org.jooq.util.GenerationTool Test.xml
    3. 代码的意思大概就是执行org.jooq.util包下的GenerationTool类,并将 Text.xml作为args传过去给它使用,执行后控制台会显示一大段日志,说明成功了,按照我上面的Test.xml设置,生成后的类文件应该在maven项目的src/main/java源码包下的org.test.jooq包下的generated包里面,包含一个tables包和defaultCatalog.java、Keys.java、Tables.java、Test.java这几个东西,这样就配置完了
  2. 新建一个测试类测试JOOQ,代码如下:

    public class Test {
    
    	public static void main(String[] args) throws SQLException {		
    		Connection conn = getDataSource().getConnection();
    		// 配置方言
    		DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
            // 获得查询结果
            Result<Record> result = create.select().from(USERSINFO).fetch();
    
            for ( Record r : result ) {
                Integer id = r.getValue(USERSINFO.USERSID);
                String name = r.getValue(USERSINFO.USERSNAME);
                String pwd = r.getValue(USERSINFO.USERSPWD);
    
                System.out.println("ID: " + id + " NAME : " + name + " PWD : " + pwd);
            }
    	}
    
    	public static DruidDataSource getDataSource() {
    		// 使用alibaba的Druid数据连接池
    		DruidDataSource dds = new DruidDataSource();
    		dds.setDriverClassName("com.mysql.jdbc.Driver");
    		dds.setUrl("jdbc:mysql://localhost:3306/test");
    		dds.setUsername("root");
    		dds.setPassword("root");
    		
    		// dds.setFilters("stat");
    		dds.setInitialSize(2);
    		dds.setMaxActive(100);
    		dds.setMaxWait(20000);
    		dds.setPoolPreparedStatements(false);
    		
    		return dds;
    	}
    }

    上面的代码使用了Druid数据源,下面的代码使用jdbc:

    public class Test {
        public static void main(String[] args) throws ClassNotFoundException {
    
            String userName = "root";
            String password = "root";
            String url = "jdbc:mysql://localhost:3306/test";
    
    
    
            Class.forName("com.mysql.jdbc.Driver");
            try (Connection conn = DriverManager.getConnection(url,userName,password)) {
                DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
                Result<Record> result = create.select().from(USERSINFO).fetch();
    
                for ( Record r : result ) {
                    Integer id = r.getValue(USERSINFO.USERSID);
                    String name = r.getValue(USERSINFO.USERSNAME);
                    String pwd = r.getValue(USERSINFO.USERSPWD);
    
                    System.out.println("ID: " + id + " NAME : " + name + " PWD : " + pwd);
                }
            } catch ( Exception e ) {
                e.printStackTrace();
            }
    
        }
    }
    

    项目结构如图:

  3. 然后执行测试类就可以了...

  4. 以后再更新web端的使用

© 著作权归作者所有

共有 人打赏支持
KELLS
粉丝 1
博文 1
码字总数 983
作品 0
深圳
程序员
私信 提问
加载中

评论(5)

Claymorex
Claymorex
KELLS
KELLS

引用来自“xmlspyspring”的评论

感觉还是用spring data jpa 比较好

我也觉得,JOOQ这API我是有点迷
KELLS
KELLS

引用来自“CapJes”的评论

几年前都已经关注JOOQ,好像和JFinal都是采用的ActiveRecord的模式操作数据库。

对啊,都用的Record
xmlspyspring
xmlspyspring
感觉还是用spring data jpa 比较好
CapJes
CapJes
几年前都已经关注JOOQ,好像和JFinal都是采用的ActiveRecord的模式操作数据库。
ORM “杀器”之 JOOQ

摘要: 介绍JOOQ简单实用,以及相对于传统ORM框架的不同点。 (图片来自http://www.jooq.org/) 正文: JOOQ是啥? JOOQ 是基于Java访问关系型数据库的工具包,轻量,简单,并且足够灵活,可...

力谱宿云
2016/08/30
3.6K
16
jOOQ 3.2.4/3.3.1 发布,Java 的 ORM 框架

jOOQ 3.2.4 发布,此版本是 jOOQ 3.2 系列的 bug 修复版本。 jOOQ 3.3.1 发布,此版本是 jOOQ 3.3 系列的 bug 修复版本。 jOOQ 高效的合并了复杂SQL、类型安全、源码生成、Active Records、存...

oschina
2014/03/08
891
0
jOOQ 项目存在的原因

Featured article by oschina reproduced with permission by Data Geekery GmbH. English content copyright © 2013 by Data Geekery GmbH. 以下段落摘自 jOOQ用户手册的前言部分。值得思考......

oschina
2013/02/22
8.3K
14
jOOQ 2.0.2 发布,Java的ORM框架

jOOQ 2.0.2 是一个维护版本,整个 JOOQ API 使用一个新的 org.jooq.Supports 进行注解,支持 Oracle 的 PIVOT ,支持映射 DATE 数据类型到 TIMESTAMP,增加了一些常用的方法以便使用更加顺畅...

红薯
2012/01/09
714
4
jOOQ 3.11:新增支持四款数据库以及 implicit joins

jOOQ 3.11 已发布,新增支持 4 个新的数据库、implicit joins、诊断等等。 新增支持的数据库 jOOQ 专业版 Aurora MySQL Edition Aurora PostgreSQL Edition Azure SQL Data Warehouse jOOQ 企...

局长
2018/06/08
1K
10

没有更多内容

加载失败,请刷新页面

加载更多

hbase的预region分区 脚本 经典

一、Region 概念 Region是表获取和分布的基本元素,由每个列族的一个Store组成。对象层级图如下: Table (HBase table) Region (Regions for the table) Store ...

stys35
4分钟前
0
0
Git删除分支/恢复分支

Git删除分支/恢复分支 • 删除一个已被终止的分支 如果需要删除的分支不是当前正在打开的分支,使用branch -d直接删除 git branch -d <branch_name> • 删除一个正打开的分支 如果我们在试图...

onedotdot
19分钟前
0
0
CSS学习笔记

# 1、CSS介绍 CSS 指层叠样式表 (Cascading Style Sheets),定义如何显示HTML元素。 CSS规则由两个主要的部分构成:选择器,以及一条或多条声明: p{color:red; text-align:left;} 其中p为选择...

davidwbnu
21分钟前
0
0
CTS测试流程及注意事项

一、测试前的准备 1.测试环境:在Linux系统下测试 安装SDK,JDK,ADB,Python工具包。 2.下载媒体文件包: 下载网站:https://source.android.com/compatibility/cts/downloads (在网页的最下方...

天王盖地虎626
33分钟前
3
0
技术码霸阐述——Spring Cloud Netflix:熔断器:Hystrix Clients

Netfilix创建了一个名为Hystrix的库,实现了熔断器模式。在微服务架构中,它通常有多个服务调用层。 一: 微服务图 一个底层服务的故障会引发直至用户交互层的连锁故障。在一个设定时长为“m...

java知识分子
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部