mybatis generator只能生成insert和selectAll的操作
一般出現(xiàn)這個情況的時候,怎么辦?
第一步:不要慌,保持冷靜的思考和清醒的頭腦,這很關(guān)鍵!
第二步:打開瀏覽器,搜索一下:Cannot obtain primary key information from the database, generated objects may be incomplete這個錯誤,
遇到這種情況的時候,代碼生成器就只會生成insert和selectAll這兩個方法,這個時候需要在jdbc配置的connectionURL上加上一個參數(shù):nullCatalogMeansCurrent=true。然后重新執(zhí)行代碼生成器,就可以看到其他的方法都出現(xiàn)了。

我的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&nullCatalogMeansCurrent=true"
userId="root"
password="123456"/>
<!-- 類型轉(zhuǎn)換 -->
<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對應(yīng)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);
}
}
補充知識:老司機學(xué)習MyBatis之如何通過select返回List
一、案例
當要查詢的結(jié)果不是單個記錄而是一個集合的時候,MyBatis的resultType寫的依然是集合中的對象的類型名稱,例如:
<select id="getAllUsers" resultType="com.queen.mybatis.bean.User"> select id, loginId, userName, role, note from t_user </select>
該查詢語句,查出的是所有用戶數(shù)據(jù),注意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的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 解決Mybatis中mapper.xml文件update,delete及insert返回值問題
- mybatis中insert返回值為1,但數(shù)據(jù)庫卻沒有數(shù)據(jù)
- mybatis的insert語句插入數(shù)據(jù)時的返回值的實現(xiàn)
- 詳解mybatis plus使用insert沒有返回主鍵的處理
- 使用mybatis-plus的insert方法遇到的問題及解決方法(添加時id值不存在異常)
- mybatis insert返回主鍵代碼實例
- MyBatis insert操作插入數(shù)據(jù)之后返回插入記錄的id
- 解決Mybatis 大數(shù)據(jù)量的批量insert問題
相關(guān)文章
Spring Data Jpa 自動生成表結(jié)構(gòu)的方法示例
這篇文章主要介紹了Spring Data Jpa 自動生成表結(jié)構(gòu)的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2019-04-04
Spring中ApplicationContextAware的使用方法詳解
ApplicationContextAware?通過它Spring容器會自動把上下文環(huán)境對象調(diào)用ApplicationContextAware接口中的setApplicationContext方法,這篇文章主要介紹了Spring中ApplicationContextAware的作用,需要的朋友可以參考下2023-03-03
Spring攔截器HandlerInterceptor接口代碼解析
這篇文章主要介紹了Spring攔截器HandlerInterceptor接口代碼解析,具有一定借鑒價值,需要的朋友可以參考下2017-12-12

