简直爽歪歪!mybatis逆向工程告别原生写CURD


  • 0x01_实验

  • 0x02_注意事项


Mybatis逆向工程(告别原生写CURD,简直爽歪歪)

MyBatis的一个主要的特点就是需要程序员自己编写SQL,那么如果表太多的话,难免会很麻烦,所以MyBatis官方提供了一个逆向工程,可以针对单表自动生成MyBatis执行所需要的代码(包括映射文件mapper.xml,mapper接口mapper.java,实体类pojo)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码

0x01_实验

【1】创建maven项目导入逆向工程依赖

pom.xml中导入依赖:

<dependencies>

<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>

<!-- 日志包,方便查看执行信息-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>

<!-- 代码生成工具jar -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>


</dependencies>

【2】配置逆向工程配置文件 在resources目录下放置一个名为generatorConfig.xml的配置文件,文件内容如下

里面的这3个路径记得修改:

![image-20221019191807608](/Users/apple/Library/Application Support/typora-user-images/image-20221019191807608.png)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">


<generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<!-- <jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
password="123">
</jdbcConnection> -->

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;allowPublicKeyRetrieval=true"
userId="root"
password="root">

</jdbcConnection>

<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->

<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>

<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.bones.pojo"
targetProject=".src">

<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.bones.mapper"
targetProject=".src">

<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.bones.mapper"
targetProject=".src">

<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->

<table tableName="dept" domainObjectName="Dept"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >

<columnOverride column="id" javaType="Integer" />
</table>

</context>
</generatorConfiguration>

【3】在resources目录下放置一个名为log4j.properties的配置文件,文件内容如下

log4j.rootLogger=debug,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=d:/msb.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n

【4】准备逆向工程代码:

首先确保一下项目结构如下:

简直爽歪歪!mybatis逆向工程告别原生写CURD

逆向工程代码在测试包中:com.bones.generator.GeneratorSqlMap中:

代码如下:

public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;

File configFile = new File("your path");
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();
}
}

其中这里需要传入你的generatorConfig.xml路径

File configFile = new File("your path");

如果你不清楚,可以试试下面这个方法:

在maven生命周期中,compile一下:

简直爽歪歪!mybatis逆向工程告别原生写CURD

编译完成后,控制台会有build success字样:

简直爽歪歪!mybatis逆向工程告别原生写CURD
image-20221019192001135

然后找到target/classes目录,如果编译成功,就会有generatorConfig.xml文件,右键,copy path即可。

简直爽歪歪!mybatis逆向工程告别原生写CURD
image-20221019192102106

然后粘贴到下面的位置:

简直爽歪歪!mybatis逆向工程告别原生写CURD
image-20221019192240859

(你应该粘贴到的是绝对位置)

然后运行GeneratorSqlMap类中的main方法即可。

0x02_注意事项

记住数据库连接的URL,username,password(在generatorConfig.xml中)要和你本地数据库匹配哈:

简直爽歪歪!mybatis逆向工程告别原生写CURD
image-20221019192446195

生成的实体类和Mapper接口和Mapper映射文件,包含了基本的CURD功能,哪里需要文件就放哪里

这里碰到了一个问题,代码没有自动生成,后来解决了:

简直爽歪歪!mybatis逆向工程告别原生写CURD
image-20221019193548052

如果上面这个方法你还是没有成功,将路径改成绝对路径试试,我就是得写成绝对路径才可以:

成功之后:

简直爽歪歪!mybatis逆向工程告别原生写CURD

可以看到Mapper接口中定义了增删改查等功能:

简直爽歪歪!mybatis逆向工程告别原生写CURD

成功了真的觉得爽歪歪(会想起之前JDBC原生写数据库CURD的时候,真的跟造房子一样)。

上面只是生成了一张表,如果想要生成其他表,修改配置即可

简直爽歪歪!mybatis逆向工程告别原生写CURD
image-20221019200539736

简直爽歪歪!mybatis逆向工程告别原生写CURD


原文始发于微信公众号(小东方不败):简直爽歪歪!mybatis逆向工程告别原生写CURD

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/47279.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!