很早就用过Mybatis Generator,一直觉得没什么可分享的,直到今天工作又要重新配置Mybatis Generator,遇到各种问题各种坑,忍无可忍只能写篇博客压压惊。
之前经常在Maven和Java环境下使用mbg,而且连接的数据库大部分是MySQL 5系,而这一次不仅要将语言切换成kotlin,还要对应Gradle以及MySQL 8系。因此总结下需求即是: 在IntelliJ + Kotlin + Gradle + MySQL8的环境下使用Mybatis Generator自动生成Kotlin文件(包括Entity以及Dao等)。
第一步:配置Gradle
编写build.gradle.kts文件。注意,由于是kotlin项目,所以我在这里使用了kts后缀的的gradle文件。这里简单说下kts文件,传统的gradle采用的是groovy语言,而Gradle实际上也支持使用Kotlin来编写Gradle构建脚本,常见的构建脚本是.gradle结尾,而Koltin语法编写的脚本则是.gradle.kts。以下代码即是用kotlin编写的build.gradle.kts。这里没有什么可解释的内容,参考注释,照抄即可。
plugins { id("com.thinkimi.gradle.MybatisGenerator") version "2.2" } mybatisGenerator { verbose = true configFile = "src/main/resources/generatorConfig.xml" // 指定mbg配置文件的路径 dependencies { mybatisGenerator("com.itfsw:mybatis-generator-plugin:1.3.7") mybatisGenerator("org.mybatis.generator:mybatis-generator-core:1.4.0") mybatisGenerator("mysql:mysql-connector-java") } } configurations { mybatisGenerator } repositories { mavenCentral() } dependencies { implementation("org.mybatis.generator:mybatis-generator-core:1.4.0") implementation("mysql:mysql-connector-java") }
第二步:编写mbg配置文件
编写generatorConfig.xml文件。这里比较关键的设置是targetRuntime=”MyBatis3Kotlin”,这是输出kotlin代码的关键。需要注意的是,要使用MyBatis3Kotlin属性必须导入mbg1.4及以上版本才可以。参考:Mybatis-generator升级信息 。除此之外可参考代码中注释。
<?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> <properties resource="generator.properties"/> <!--因为要生成kotlin文件,所以这里targetRuntime要设置为MyBatis3Kotlin --> <context id="mbg" targetRuntime="MyBatis3Kotlin"> <!-- 配置数据库连接信息,信息读取来源是generator.properties,当然也可以直接将值填在下面 --> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}"> <!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题--> <property name="nullCatalogMeansCurrent" value="true" /> </jdbcConnection> <!-- 设置Entity类的包名以及输出目录 --> <javaModelGenerator targetPackage="com.my.package.entity" targetProject="src/main/kotlin" /> <!-- 设置DAO类的包名以及输出目录 --> <javaClientGenerator targetPackage="com.my.package.dao" targetProject="src/main/kotlin" type="ANNOTATEDMAPPER"/> <!-- 设置需要生成的相关表 --> <table tableName="tableName1" /> <table tableName="tableName2" /> </context> </generatorConfiguration>
接下来是数据库配置信息generator.properties。这里唯一需要注意的是jdbc.driverClass,如果你使用的是8系的MySQL,驱动类要设置为com.mysql.cj.jdbc.Driver,如果是5系或之前的MySQL,驱动类则是com.mysql.jdbc.Driver
jdbc.driverClass=com.mysql.cj.jdbc.Driver jdbc.connectionURL=jdbc:mysql://localhost:3306/myDB?characterEncoding=utf-8 jdbc.userId=root jdbc.password=root
第三步:编写执行类
object Generator { @Throws(Exception::class) @JvmStatic fun main(args: Array<String>) { // 执行过程中的警告信息 val warnings: List<String> = ArrayList() // 是否覆盖已有文件 val overwrite = true // 从generatorConfig.xml中读取mbg配置信息 val inputStream = Generator::class.java.getResourceAsStream("/generatorConfig.xml") val cp = ConfigurationParser(warnings) val config: Configuration = cp.parseConfiguration(inputStream) inputStream.close() val callback = DefaultShellCallback(overwrite) // 创建MyBatisGenerator对象 val myBatisGenerator = MyBatisGenerator(config, callback, warnings) // 执行 myBatisGenerator.generate(null) // 打印警告信息 for (warning in warnings) { println(warning) } } }
至此,mbg导入工作已经完成。执行上面的main方法,我们需要的文件就可以自动生成。最后再总结下今天遇到的问题:
1、unable to load authentication plugin ‘caching_sha2_password’. (MySQL):这个是驱动的问题,当MySQL升到8系之后,我们的驱动也应该换成com.mysql.cj.jdbc.Driver,如果是5系或之前的MySQL,驱动类则是com.mysql.jdbc.Driver
2、java.lang.classnotfoundexception: com.mysql.cj.jdbc.driver:这个是gradle中引入依赖版本的问题,implementation(“mysql:mysql-connector-java”),在springboot中,如果依赖后面不加版本号的话,系统会为我们导入最新版本,如果你想指定版本,一要要使用8以上的版本才会包含com.mysql.cj.jdbc.driver这个驱动。我使用的版本是mysql:mysql-connector-java:8.0.22
3、mybatis generator communications link failure:这个是数据库连接的问题。实际上与上两个问题是配套出现的,当依赖和驱动都设置正确后,此问题也会随之解决。另外出现此问题也有可能是数据库连接地址不正确导致。
4、cause: targetruntime in context XXX is invalid:这个问题在上文中也讲过,由于我是用的targetRuntime是”MyBatis3Kotlin”,而MyBatis3Kotlin是在mbg1.4才加入的,所以要将mbg的依赖版本升级到1.4或以上才可以。如果你使用其他的targetRuntime也出现此问题,大概率也是版本问题,升级到最新版本应该可以解决。
使用Mybatis Generator自动生成Kotlin文件的内容基本上总结完了,但是还剩下一个问题,即生成的kotlin类文件中的内容可能不是我们想要的,或者格式与我们的期待有些出入,这就需要我们根据需求去重新配置generatorConfig.xml,如果有时间,我会再开一篇博客去详细说明下generatorConfig.xml中的各种配置。
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/mybatis-generator自动生成kotlin文件/
《Mybatis Generator自动生成Kotlin文件》有2条回应