2018年10月14日
目录
坑NO.2:java.lang.ClassNotFoundException: org.jooq.util.DefaultGenerator
坑NO.3:java.lang.ClassNotFoundException: org.jooq.util.mysql.MySQLDatabase
一、前言
网上的很多文章(好文:https://segmentfault.com/a/1190000010415384)都对JOOQ这个框架做了详细的讲解,百闻不如一见,我也自己动手尝试使用了一下,但是发现实操起来坑洼特别多,但最后还是成功了,因此做个总结,帮助各位避开更多的问题。
二、模仿网上的文章来搭建JOOQ Demo
官方网站:http://www.jooq.org/doc/3.11/manual-single-page/
Windows环境下,JOOQ搭建demo最简单的手段:
1、新建一个备用文件夹(“D:\temp”);
2、下载4个jar包
(jooq-3.11.5.jar / jooq-codegen-3.11.5.jar / jooq-meta-3.11.5.jar / mysql-connector-java-5.1.18.jar);
3、新建一个xml文件(“library.xml”);
步骤1:配置XML文件
下面配置内容依次讲解:
1)Mysql jdbc 配置:数据库驱动、本地ip+端口+数据库、用户名+密码
2)生成器配置:
2.1 默认生成器;
2.2 指定数据库;
2.3 指定数据库的表为全部(.*);
2.4 目标:项目文件路径 + package路径;
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-2.5.0.xsd">
<!-- Configure the database connection here -->
<jdbc>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/guestbook</url>
<user>root</user>
<password>qweasd!@#zxc123</password>
</jdbc>
<generator>
<!-- The default code generator. You can override this one, to generate your own code style
Defaults to org.jooq.util.DefaultGenerator -->
<!--
org.jooq.util.DefaultGenerator
org.jooq.util.GenerationTool
org.jooq.util.JavaGenerator
-->
<name>org.jooq.util.DefaultGenerator</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>guestbook</inputSchema>
<!-- All elements that are generated from your schema (several Java regular expressions, separated by comma)
Watch out for case-sensitivity. Depending on your database, this might be important! -->
<includes>.*</includes>
<!-- All elements that are excluded from your schema (several Java regular expressions, separated by comma).
Excludes match before includes -->
<excludes></excludes>
</database>
<target>
<!-- The destination package of your generated classes (within the destination directory) -->
<packageName>mmbTest.jooq</packageName>
<!-- The destination directory of your generated classes. Using Maven directory layout here -->
<directory>E:/zuolin/workspace/jooqDemo/jooq/src/main/java</directory>
</target>
</generator>
</configuration>
步骤2:手敲执行指令
根据网上的博文,只要手敲下面的指令即可完美收工:
java -classpath jooq-3.11.5.jar;jooq-meta-3.11.5.jar;jooq-codegen-3.11.5.jar;mysql-connector-java-5.1.18.jar;. org.jooq.util.GenerationTool library.xml
可能我这边环境比较特殊,真实情况是这样的:
三、对于盲目照抄导致报错的不断填坑
坑NO1:class not found.
org.jooq.util.GenerationTool找不到该类??怎么可能呢,,难道要我手写一个??心一横,去看看jar包的class吧。
1)在jar包(jooq-codegen-3.11.5.jar)发现: org.jooq.codegen.GenerationTool;难道网上的文章有错,参数“org.jooq.util.GenerationTool”要改为“ org.jooq.codegen.GenerationTool”?
2)ok,换个参数试试,因为找光所有的jar包,都不存在:“org.jooq.util.GenerationTool”。
3)输入指令:
java -cp jooq-codegen-3.11.5.jar;jooq-3.11.5.jar;jooq-meta-3.11.5.jar;mysql-connector-java-5.1.18.jar;. org.jooq.codegen.GenerationTool library.xml
结果报错消失,填坑1完成(估计网上资料用的是比较旧的版本,所以某些class被移除掉了),但还是有错误提示:
坑NO.2:java.lang.ClassNotFoundException: org.jooq.util.DefaultGenerator
从上图可以知道,问题是我的 library.xml 文件配置出了问题,原因是 “org.jooq.util.DefaultGenerator” 这个 class 找不到了。
先去官方提供的xml文件模板瞄一下:
ok,注释掉它并修改为“JavaGenerator”;
问题解决,填坑2完成,但还是有报错:
坑NO.3:java.lang.ClassNotFoundException: org.jooq.util.mysql.MySQLDatabase
xml的 org.jooq.util.mysql.MySQLDatabase 找不到??去官网的模板瞄一下:
ok,注释掉它并修改为“org.jooq.meta.mysql.MySQLDatabase”;
最后一个坑填完!结束。
四、最终运行JOOQ逆向生成
最后执行指令:
java -cp jooq-3.11.5.jar;jooq-meta-3.11.5.jar;jooq-codegen-3.11.5.jar;mysql-connector-java-5.1.18.jar;. org.jooq.codegen.GenerationTool library.xml
无报错:
项目结构:
总结:纸上得来终觉浅,绝知此事要躬行。