mybatis generator只能生成insert和selectAll的操作

时间:2021-05-19

一般出现这个情况的时候,怎么办?

第一步:不要慌,保持冷静的思考和清醒的头脑,这很关键!

第二步:打开浏览器,搜索一下:Cannot obtain primary key information from the database, generated objects may be incomplete这个错误,

遇到这种情况的时候,代码生成器就只会生成insert和selectAll这两个方法,这个时候需要在jdbc配置的connectionURL上加上一个参数:nullCatalogMeansCurrent=true。然后重新执行代码生成器,就可以看到其他的方法都出现了。

我的generatorConfig.xml配置如下(注意看connectionURL配置):

<?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> <classPathEntry location="D:\iflytek\maven\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar"/> <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat"> <property name="autoDelimitKeywords" value="true"/> <property name="javaFileEncoding" value="utf-8"/> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <!--覆盖xml文件--> <plugin type="com.xqnode.boot.util.OverwriteXmlPlugin"/> <!-- 注释 --> <commentGenerator type="com.xqnode.boot.util.CommentGenerator"> <property name="suppressAllComments" value="true"/><!-- 是否取消注释 --> </commentGenerator> <!-- jdbc连接 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&amp;nullCatalogMeansCurrent=true" userId="root" password="123456"/> <!-- 类型转换 --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成实体类地址 --> <javaModelGenerator targetPackage="com.xqnode.boot.model" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成mapxml文件 --> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 生成mapxml对应client,也就是接口dao --> <javaClientGenerator targetPackage="com.xqnode.boot.dao" targetProject="src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <table tableName="t_user" domainObjectName="User" mapperName="UserMapper" /> </context></generatorConfiguration>

这里面有我的两个代码插件:

1、注释插件CommentGenerator:

package com.xqnode.boot.util;import org.mybatis.generator.api.IntrospectedColumn;import org.mybatis.generator.api.IntrospectedTable;import org.mybatis.generator.api.dom.java.Field;import org.mybatis.generator.internal.DefaultCommentGenerator;/** * 生成model中,字段增加注释 */public class CommentGenerator extends DefaultCommentGenerator { @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { super.addFieldComment(field, introspectedTable, introspectedColumn); if (!"".equals(introspectedColumn.getRemarks())) { field.addJavaDocLine("/**"); field.addJavaDocLine(" * " + introspectedColumn.getRemarks()); field.addJavaDocLine(" */"); } }}

2、xml文件覆盖插件OverwriteXmlPlugin:

package com.xqnode.boot.util;import org.mybatis.generator.api.GeneratedXmlFile;import org.mybatis.generator.api.IntrospectedTable;import org.mybatis.generator.api.PluginAdapter;import java.util.List;/** * @version 1.0.0 */public class OverwriteXmlPlugin extends PluginAdapter { @Override public boolean validate(List<String> warnings) { return true; } @Override public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) { sqlMap.setMergeable(false); return super.sqlMapGenerated(sqlMap, introspectedTable); }}

补充知识:老司机学习MyBatis之如何通过select返回List

一、案例

当要查询的结果不是单个记录而是一个集合的时候,MyBatis的resultType写的依然是集合中的对象的类型名称,例如:

<select id="getAllUsers" resultType="com.queen.mybatis.bean.User"> select id, loginId, userName, role, note from t_user</select>

该查询语句,查出的是所有用户数据,注意resultType里面写的依然是集合中的对象的类型名称。

不能写成java.util.List,否则查询会报错,下面我们演示一下这种情况:

修改XML文件:

<select id="getAllUsers" resultType="java.util.List"> select id, loginId, userName, role, note from t_user</select>

控制台打印报错信息:

org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.UnsupportedOperationException
### The error may exist in UserMapper.xml
### The error may involve com.queen.mybatis.mapper.UserMapper.getAllUsers
### The error occurred while handling results
### SQL: select id, loginId, userName, role, note from t_user
### Cause: java.lang.UnsupportedOperationException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)

写成java.util.List直接抛出了异常。

以上这篇mybatis generator只能生成insert和selectAll的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章