=========
MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po…)。企业实际开发中,常用的逆向工程方式是通过数据库的表生成java代码。
二、下载逆向工程
========
使用MyBatis的逆向工程,需要导入逆向工程的jar包,这里给出了逆向工程官网下载的内容以及所需要的jar包的百度云链接。
链接:https://pan.baidu.com/s/1U8gtpFtL5cKafN_XXOLkMg
提取码:kq0t
三、创建java工程
==========
使用mybatis的逆向工程来由数据库的表生成java代码最好新建一个java工程或者IDEA新建一个模块。原因在于:如果在你要使用到逆向工所生成的代码的工程中生成代码,会存在风险。因为MyBatis是根据配置文件来生成的(下面会说到),如果生成的路径中有相同的文件,那么就会覆盖原来的文件,这样会有风险。所以开发中一般都会新建一个java工程来生成,然后将生成的文件拷贝到自己的工程中,这也不麻烦,而且很安全。
工程结构如下:
我是用的是IDEA软件,eclipse或MyEclipse也是一样的,下面对工程结构做出一些解释:
generatorConfig.xml:这是逆向工程的xml配置文件,本文使用的方法就是逆向工程的使用xml配置文件的方式来生成代码。我把它直接存放在模块下(eclipse可以直接存放在工程下,存放在哪里并不重要,我们会在主程序中用到该文件的相对路径)
lib:这里存放的是jar包,在上面的百度云链接可以下载到
src:存放的执行程序和log4j.proprerties文件
log4j文件的内容如下:
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
四、逆向工程的xml配置文件
==============
4.1、xml配置文件分析
我们是使用xml配置文件的方式来生成代码,故配置文件是最为重要的步骤。
以下的配置文件主要做了4件事:
1、连接数据库,配置数据库的连接信息
2、相关属性设置
3、指定要生成代码的位置,包括po类,mapper.xml和mapper.java这三类代码,一般po类放在po包下,mapper.xml和mapper.java放在mapper包下
4、指定数据库中哪些表要生成代码
<?xml version="1.0" encoding="UTF-8"?><jdbcConnection driverClass=“com.mysql.jdbc.Driver”
connectionURL=“jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC” userId=“root”
password=“mysql”>
<javaModelGenerator targetPackage=“po”
targetProject=“.\mybatis-generator\src”>
<sqlMapGenerator targetPackage=“mapper”
targetProject=“.\mybatis-generator\src”>
<javaClientGenerator type=“XMLMAPPER”
targetPackage=“mapper”
targetProject=“.\mybatis-generator\src”>
4.2、官网解释
在官网下载的文件中,可以点击index.html来查看一些官网解释,想深究的大牛可以看看,个人觉得只要学会使用逆向工程就ok了。
五、逆向工程主程序
=========
5.1、执行主程序
通过以下主程序来生成代码,在主程序中需要知名xml配置文件的相对位置。
package main;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class GeneratorSqlmap {
public void generator() throws Exception{
List warnings = new ArrayList();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File(“mybatis-generator/generatorConfig.xml”);
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行一下即可,就可以看到最新生成的代码了。使用eclipse或者MyEclipse的一定要刷新一下工程才能看到。
这里需要注意一个问题,点击运行之后,就已经帮我们生成好了对应的代码,但是我们需要手动刷新项目才看得见,有些人就会觉得看不见,以为没有生效,然后又第二次运行核心代码,这里就会出现一个很严重的问题,[Mapper.xml文件已经存在时,如果进行重新生成则mapper.xml文件时,内容不被覆盖而是进行内容追加,结果导致mybatis解析失败]
解决办法:删除生成的所有类和mapper.xml,重新在运行一遍即可。
5.2、生成代码后的工程结构
生成的po类放在po包下,mapper.xml和mapper.java放在mapper包下。
六、遇到的问题
=======
5.1、时区问题
Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
java.sql.SQLException: The server time zone value ‘???ú±ê×??±??’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-vUcr9OA9-1715538095303)]
[外链图片转存中…(img-AD1TaNXP-1715538095303)]
[外链图片转存中…(img-rfbWyDbt-1715538095303)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!