Springboot的mybatis逆向工程自动生成代码+代码解析+神坑规避指南(全网最全攻略|附思维导图)

项目版本概况

mybatis-generator-core:1.3.4
mybatis-generator-maven-plugin:1.3.4
mysql-connector-java(项目运行):8.0.22
mysql-connector-java(逆向工程):5.1.47
mybatis-spring-boot-starter:2.1.3

实验日期:2020 年 10 月 22 日

思维导图

在这里插入图片描述

数据库设计:

宁愿属性名很长,也不要使用到 mysql 关键字!

(ps:修了一天 bug 的罪恶之源)

在这里插入图片描述

pom.xml:

注意:数据库驱动有两个,一个是 mybatis-generator-maven-plugin 的逆向工程数据库驱动,一个是项目运行所需要的数据库驱动!

逆向工程数据库驱动版本不宜过高!
(ps:修了一天 bug 的罪恶之二)

		<!-- mybatis逆向工程jar包 -->
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<!--版本和mybatis-generator-maven-plugin保持一致-->
			<version>1.3.4</version>
		</dependency>
		<!--mybatis-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.3</version>
		</dependency>
		<!--springboot项目所需的mysql驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.22</version>
		</dependency>
	<build>
		<plugins>
			<!--逆向工程插件-->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<!--版本和mybatis-generator-core保持一致-->
				<version>1.3.4</version>
				<dependencies>
					<!--连接mysql数据库逆向生成代码所用的驱动-->
					<!--版本不宜过高!!!-->
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>5.1.47</version>
					</dependency>
				</dependencies>
				<!--生成器总要指定一个配置吧,不然不知道去哪里生成-->
				<configuration>
					<overwrite>true</overwrite>
					<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
				</configuration>
			</plugin>
		</plugins>
	</build>

generatorConfig.xml

注意:~Mapper.xml文件最好指定存放在
src/main/resources/mapper/ 而不要放在src/main/java/com/superkarx/dao/ 与dao层的~Mapper.class 同一个包下

原因是:①默认maven打包不会去打包java目录下的xml、properties等资源文件。②存放在resources目录下可以便于更改

<?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>
    <!-- mysql驱动的位置 这个是MySQL连接的jar包,你需要指定你自己计算机上的jar包的位置-->
    <!--由于在插件中添加mysql驱动依赖,这里不用了!-->
<!--    <classPathEntry location="C:\Users\wuzexin\.m2\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar" />-->
    <context id="testTables" targetRuntime="MyBatis3">

        <commentGenerator>
            <!-- 是否去除自动生成的注释 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- 数据库连接信息 -->
        <!--这里是逆向工程所用的jdbc,高版本mysql驱动是要com.mysql.cj.jdbc.Driver-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhsot:3306/user?serverTimezone=UTC&amp;useSSL=false"
                        userId="root"
                        password="root"/>
        <!-- 默认false,把jdbc decimal 和numeric类型解析为Integer,为true时把jdbc decimal numeric类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- targetProject用于生成bean类的位置,其实就是表对应的类-->
        <javaModelGenerator targetPackage="com.superkarx.pojo" targetProject="./src/main/java">
            <!-- enableSubPackages配置是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- targetProject配置mapper映射文件生成位置,设置成resource包下-->
        <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
            <!-- enableSubPackages配置是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- targetPackage配置mapper接口的位置 -->
        <javaClientGenerator targetPackage="com.superkarx.dao" type="XMLMAPPER" targetProject="./src/main/java">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>
        <!-- 指定数据库表 -->
        <table tableName="friend"/>
        <table tableName="user"/>
    </context>
</generatorConfiguration>

生成代码

点击即可逆向生成代码:

在这里插入图片描述

生成如下几部分:Mapper接口、实体类、Mapper映射文件

具体生成的代码的解析,见:springboot+mybatis-generator逆向工程自动生成的代码文件内容详细解析(Mapper.xml+实体类+增删查改条件模板类+Mapper接口类)

为什么不生成 service 层和 controller 层?答:mybatis 是持久层框架。

在这里插入图片描述

application.properties

Springboot 项目的全局配置

#端口指定
server.port=8080
#远程数据源(高版本要cj,低版本不用)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useSSL=false
#mybatis配置
#扫描映射文件
mybatis.mapperLocations=classpath*:mapper/**/*.xml
#扫描配置文件别名(生成的映射文件已经指定)
#mybatis.type-aliases-package=com.superkarx.pojo
#开启驼峰命名(生成的映射文件已经指定)
#mybatis.configuration.map-underscore-to-camel-case=true

#showSql
logging.level.com.superkarx.dao = debug

Service层和Controller层

这里用bean自动注入,实现对mapper接口和mapper映射文件简单的测试

@Service
public class UserService {
    private final
    FriendMapper friendMapper;

    public UserService(FriendMapper friendMapper) {
        this.friendMapper = friendMapper;
    }

    public void insert(Friend friend) {
        friendMapper.insert(friend);
    }
}
@RestController
public class UserController {
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }


 	//编写简单的测试
    @RequestMapping("/user")
    public String test(){
        Friend friend = new Friend();
        friend.setFriFriendId(10000);
        friend.setFriMasterId(10001);
        friend.setFriRename("儿子");
        userService.insert(friend);
        return "true";
    }
}

启动类

@MapperScan是扫描mapper接口(dao层)用的,用Mapper注解也可以,但自动生成的接口是没有此注解的,如果对接口一个个添加注解,假如接口太多,就比较麻烦,一行搞定就很爽!

用了@MapperScan,在service层中的Mapper注入爆红是正常的情况(如果看着不爽,就一个个添加@Mapper注解吧,这样也可以将接口装进bean容器)

@SpringBootApplication
@MapperScan(basePackages = {"com.superkarx.dao"})
public class MiniwebGeneratorApplication {

	public static void main(String[] args) {
		SpringApplication.run(MiniwebGeneratorApplication.class, args);
	}
}

这样是没问题的~

在这里插入图片描述

运行测试

在浏览器中输入:http://localhost:8080/user

在这里插入图片描述

看后台多了一行数据,证明逆向工程生成的代码可用!

在这里插入图片描述

打jar包

服务要上线,一般都是打成 jar 包

在这里插入图片描述

成功之后会在 target 目录下看到 jar 包

在这里插入图片描述

查看 jar 包的内部目录

mapper 中可以随时修改sql,这就是xml方式的mybatis的好处!

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值