当前位置: > 其它学习 > IntelliJIDEA >

idea创建springboot项目,使用mybatis.generator创建代码遇到的问题

时间:2019-05-17 14:00来源:linux.it.net.cn 作者:IT
今天使用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了。
 


(责任编辑:IT)
------分隔线----------------------------