MyBatis详解:逆向工程自动生成代码

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
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)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)

at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)

at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)

at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:455)

at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)

at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)

at org.mybatis.generator.internal.db.ConnectionFactory.getConnection(ConnectionFactory.java:68)

at org.mybatis.generator.config.Context.getConnection(Context.java:526)

at org.mybatis.generator.config.Context.introspectTables(Context.java:436)

at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:222)

at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:133)

at GeneratorSqlmap.generator(GeneratorSqlmap.java:27)

at GeneratorSqlmap.main(GeneratorSqlmap.java:33)

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: 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 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)

at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)

at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)

at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)

at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2234)

at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2258)

at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319)

at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966)

at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)

… 10 more

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

image

image

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
ConnectionImpl.createNewIO(ConnectionImpl.java:825)

… 10 more

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

[外链图片转存中…(img-aGQY81fu-1714709185174)]

[外链图片转存中…(img-62H26dsP-1714709185174)]

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值