今天使用mybatis.generator创建代码,遇到一些问题,记述一下,方便以后查证。
先上代码:
generatorConfig.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>
<!-- https://blog.csdn.net/lihonghai2392/article/details/78053920
mybatis-generator包的generatorConfig.xml文件详解-->
<!--mysql 连接数据库jar 这里选择自己本地位置-->
<!--可以选择自己配置的maven中的jar包,注意版本 -->
<classPathEntry location="E:\maven\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar"/>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 。如果选true,代码中会生成很多重复的注解-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<!-- serverTimezone=GMT%2B8 解决数据库时间戳与国内不统一问题 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/school?serverTimezone=GMT%2B8" userId="root" password="java">
<!-- 在jdbcConnection节点里配置useInformationSchema属性,可以解决mybatis-generator不识别主键问题-->
<property name="useInformationSchema" value="true"/>
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetProject:生成POJO类的位置 -->
<javaModelGenerator targetPackage="cn.springboot.text.alipay.pojo"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置
如果maven工程只是单独的一个工程,targetProject="src/main/java"
若果maven工程是分模块的工程,targetProject="所属模块的名称",例如:
targetProject="ecps-manager-mapper",下同-->
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.springboot.text.alipay.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定数据库表 schema 指定表明,tableName 生成的实体类-->
<table schema="product" tableName="Product"></table>
</context>
</generatorConfiguration>
生成代码后记得在mapper接口类添加@Mapper注解。
到此反向代码生成应该可以完成了,但是我在之前的项目上添加的原因,项目结构上有出了点问题,以至于出 了很多错误。
1、生成的.xml文件最好放在resources文件夹下,以免路径出现错误。
2、在测试的时候一直出现
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
报错,是因为mapper接口加载不到,在网上找了很久,大多说是因为namespace配置错,或是其他的一些错误,但我是用mybatis.generator反向生成的代码,显然不会是配置类的错误,但肯定是加载不到,最后才想起是application.properties文件中的XML路径的问题。因为我将生成的xml文件放在了两个文件夹下,只配置了一个文件夹的路径,才出现了以上报错。修改路径后一切正常。
application.properties
mybatis.mapper-locations=classpath:mapper/*.xml,classpath*:/mappers/*.xml
另外,在启动类上也要加载相关类
Application类中添加注释
<!-- 可以加载多个包-->
@MapperScan({"cn.springboot.text.dao","cn.springboot.text.alipay.mapper"})
至此,一切OK了。