做课程时使用了spring-boot来搭建后台。
使用mybatis-generator.xml自动生成dao层、model层和mapping时碰到了一些问题,记录下来:
mybatis无法识别主键,不能生成selectByPrimary等方法,需要在mybatis-generator.xml中添加:
<property name="useInformationSchema" value="true"/>
之后发现,在mapping目录下的xml文件中生成了重复的同名sql函数并且生成实体类并不对应我指定的表单,可能有以下两个原因:
- 多次运行mybatis-generator.xml,对mapping目录下的xml文件实现的是追加而不是覆盖功能。
- 如果对于使用的JDBC是8.x,可能生成的dao都不是你想要的表单的,这是因为JDBC8.x版本生成表单名的方式与以前不一样了,你需要在mybatis-generator.xml配置文件中添加
<property name="nullCatalogMeansCurrent" value="true"/>
所以最终你的mybatis-generator.xml文件应该类似于下面这样:
<?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="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/jwxt?characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong"
userId="root"
password="${spring.datasource.password}">
<!--尝试加入看能否生成selectByPrimaryKey-->
<property name="useInformationSchema" value="true"/>
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成Model(DataObject)类存放位置-->
<javaModelGenerator targetPackage="com.wky.dataobject" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成Dao类存放位置-->
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.wky.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--生成对应表及类名-->
<!--<table tableName="stocktradeinfo" domainObjectName="StockTradeInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
</context>
</generatorConfiguration>