1. 程式人生 > 程式設計 >mybatis generator只能生成insert和selectAll的操作

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

一般出現這個情況的時候,怎麼辦?

第一步:不要慌,保持冷靜的思考和清醒的頭腦,這很關鍵!

第二步:開啟瀏覽器,搜尋一下:Cannot obtain primary key information from the database,generated objects may be incomplete這個錯誤,

遇到這種情況的時候,程式碼生成器就只會生成insert和selectAll這兩個方法,這個時候需要在jdbc配置的connectionURL上加上一個引數:nullCatalogMeansCurrent=true。然後重新執行程式碼生成器,就可以看到其他的方法都出現了。

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

我的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,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的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。