这是一个坑啊
如果你的myabtis逆向生成也出现了这样的问题,并且 配置文件没有出任何问题,而且不存在数据库表的没有主键或者表结构不完整的低级问题,最可怕的是网上好多解决方法对你都没有效果。那么你可能是Mysql版本的问题。
在springBoot自动加载Mysql的时候会是这个样子
没有更改的时候生成的接口:
更改后生成的接口:
我的问题就这样结束了,其实在这时候纠结很久的时候就应该想到是版本的问题。
顺便贴上我的配置文件 和 运行生成接口。
配置文件,应该能看懂
<?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">
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<!-- nullCatalogMeansCurrent 在5.1.42中默认是true,而在6.0.6默认为false。-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/training" userId="root" password="root">
</jdbcConnection>
<!-- 引入自定义类型转换的实现类 -->
<javaTypeResolver type="com.yangxin.demo.generator.MyJavaTypeResolver"></javaTypeResolver>
<!-- 设置Java类生成的位置 targetPackage:表示生成的路径,targetProject:表示生成的文件/项目下-->
<javaModelGenerator targetPackage="com.yangxin.demo.dao.model" targetProject="src">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="false"/>
</javaModelGenerator>
<!-- 生成映射文件xml存放位置;targetPackage:自己的包名;targetProject:该文件你想放位置(路径的不要有中文) -->
<sqlMapGenerator targetPackage="data.resources.mappers" targetProject="src">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.yangxin.demo.dao.mapper"
targetProject="src">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="yx_user" domainObjectName="YxUser"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
</context>
</generatorConfiguration>
运行的主程序
public static void main(String[] args) {
List<String> warnings = new ArrayList<>();
// 配置文件路径
//String xmlPath = "\\src\\main\\resources\\generatorConfig.xml";
String xmlPath = "\\src\\main\\resources\\generator2.xml";
try {
// System.getProperty("user.dir"),获取当前的工作路径,windows和linux里的路径格式不一致,这里用来转换
String configFilePath = System.getProperty("user.dir").concat(
isNotWindows() ? xmlPath.replaceAll("\\\\", "/") : xmlPath);
logger.info("加载配置文件的路径:" + configFilePath);
boolean overwrite = true;
File configFile = new File(configFilePath);
// configFile.exists():测试此抽象路径名表示的文件或目录是否存在, isFile() :表示测试此抽象路径名表示的文件是否是一个标准文件。
logger.info("" + configFile.exists());
// 创建配置解析器
ConfigurationParser cp = new ConfigurationParser(warnings);
// 调用解析器创建配置对象()
Configuration config = cp.parseConfiguration(configFile);
// 创建一个ShellCallback对象,shellCallback接口是处理文件的创建和合并,默认是不支持文件合并的。
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
// 创建一个MyBatisGenerator对象。MyBatisGenerator类是真正用来执行生成动作的类
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
for (String wa : warnings) {
logger.info("warning:" + wa);
}
}
private static boolean isNotWindows() {
// System.getProperty("os.name") 获取当前运行的系统名称
return !System.getProperty("os.name").toLowerCase()
.startsWith("windows");
}
作为一个采坑人...希望你们别遇到,好难受的