mybatis generator只能生成insert和selectAll的操作
一般出現這個情況的時候,怎麼辦?
第一步:不要慌,保持冷靜的思考和清醒的頭腦,這很關鍵!
第二步:開啟瀏覽器,搜尋一下: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&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,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,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的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。