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 的罪恶之源)
注意:数据库驱动有两个,一个是 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>注意:~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&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 是持久层框架。
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这里用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 包
成功之后会在 target 目录下看到 jar 包
查看 jar 包的内部目录
mapper 中可以随时修改sql,这就是xml方式的mybatis的好处!
