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

 更新时间:2020年09月27日 10:23:26   作者:xqnode  
这篇文章主要介绍了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&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的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring+Vue整合UEditor富文本实现图片附件上传的方法

    Spring+Vue整合UEditor富文本实现图片附件上传的方法

    这篇文章主要介绍了Spring+Vue整合UEditor富文本实现图片附件上传的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Java根据ip地址获取归属地实例详解

    Java根据ip地址获取归属地实例详解

    这篇文章主要为大家介绍了Java根据ip地址获取归属地实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 详解Jackson的基本用法

    详解Jackson的基本用法

    Java生态圈中有很多处理JSON和XML格式化的类库,Jackson是其中比较著名的一个。虽然JDK自带了XML处理类库,但是相对来说比较低级,使用本文介绍的Jackson等高级类库处理起来会方便很多
    2021-06-06
  • Restful传递数组参数及注解大全

    Restful传递数组参数及注解大全

    这篇文章主要介绍了Restful传递数组参数及注解大全的相关资料,需要的朋友可以参考下
    2015-12-12
  • 有关于整体刷新和局部刷新frameset窗口

    有关于整体刷新和局部刷新frameset窗口

    本篇小编为大家介绍有关于整体刷新和局部刷新frameset窗口的方法,希望对有需要的朋友有所帮助。
    2013-04-04
  • Java教程package和import访问控制的步骤详解

    Java教程package和import访问控制的步骤详解

    这篇文章主要为大家介绍了Java教程package和import访问控制的步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • SpringBoot中实现订单30分钟自动取消的项目实践

    SpringBoot中实现订单30分钟自动取消的项目实践

    现在电子商务平台上订单创建成功,等待支付,一般会给30分钟的时间,本文主要介绍了SpringBoot中实现订单30分钟自动取消的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • java实现文件和base64相互转换

    java实现文件和base64相互转换

    这篇文章主要为大家详细介绍了java如何实现文件和base64相互转换,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • 微信java开发之实现微信主动推送消息

    微信java开发之实现微信主动推送消息

    这篇文章主要介绍了微信开发过程中的使用java实现微信主动推送消息示例,需要的朋友可以参考下
    2014-03-03
  • Java面向对象编程之继承和多态以及包的解析与使用范例

    Java面向对象编程之继承和多态以及包的解析与使用范例

    继承就是可以直接使用前辈的属性和方法。自然界如果没有继承,那一切都是处于混沌状态。多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
    2021-11-11

最新评论