MyBatis-Flex 常见问题

文章目录

  • 官网
  • 常见问题
    • MyBatis-Flex 没有启动或者启动出错怎么办?
    • 示例中的 AccountMapper 和 "ACCOUNT" 在哪里,报错了。
    • 阿里镜像找不到依赖?
    • SpringBoot 3.2 项目,启动报错 Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
    • SpringBoot 项目,启动报错 java.lang.ClassNotFoundException: org.springframework.transaction.TransactionManager
    • SpringBoot 项目,启动报错 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    • SpringBoot 项目中出现 class "com.xxx" cannot be cast class "com.xxx" 的错误
    • java.sql.SQLException: No value specified for parameter x
    • 整合 Springboot 3 出现 ClassNotFoundException: NestedIOException 的错误
    • Spring 下使用 Druid 数据源无法启动
    • 与 PageHelper 集成出现错误
    • 代码生成器获取不到注释
    • 与 Nacos 集成时出错,无法正常启动 MyBatis-Flex
    • 如何自定义 MyBatis 的 Configuration?
    • 如何在插入数据成功时,获得到主键内容?
    • 如何替换 Ruoyi 项目中的 MyBatis 为 MyBatis-Flex ?
    • MyBatis-Flex 如何 activiti6 以及 Flowable 等工作流引擎集成?

官网

常见问题:https://mybatis-flex.com/zh/faq.html

常见问题

MyBatis-Flex 没有启动或者启动出错怎么办?

正常情况下,MyBatis-Flex 在启动时,会在控制台打印如下 Banner 信息,包含版本与官方网址,如果在项目启动中没有发现 MyBatis-Flex 的 Banner 打印,那就说明 MyBatis-Flex 没有被正常加载。

__  __       _           _   _       _____ _|  \/  |_   _| |__   __ _| |_(_)___  |  ___| | _____  __| |\/| | | | | '_ \ / _` | __| / __| | |_  | |/ _ \ \/ /| |  | | |_| | |_) | (_| | |_| \__ \ |  _| | |  __/>  <|_|  |_|\__, |_.__/ \__,_|\__|_|___/ |_|   |_|\___/_/\_\|___/ v1.5.4 https://mybatis-flex.com

需要做如下排查:

  1. 是否添加了数据源(Druid、HikariCP 等)依赖,或者添加了错误的数据源依赖版本。比如 SpringBoot v2.x 使用 HikariCP 时,应该是 HikariCP 的 4.x 版本。而 SpringBoot v3.x 应该使用 HikariCP 的 5.x 版本。
  2. 是否主动添加了 mybatis-spring-boot-starter 的依赖,导致版本不匹配。使用 SpringBoot 的情况下,应该引用 mybatis-flex-spring-boot-starter 就可以了,不需要再添加其他 MyBatis 依赖。
  3. 是否与 mybatis-plus-boot-starter 共用,使 MyBatis 被优先初始化,而导致 MyBatis-Flex 没有被加载。
  4. 是否添加了 pagehelper-spring-boot-starter 依赖,导致传递了 mybatis-spring-boot-starter 依赖。如还想继续使用 pagehelper 插件,点击 这里 查看解决方案。
  5. 是否 Spring Boot 版本过低,请使用 Spring Boot 2.2 及其以上版本,点击 这里 获取详细信息。

示例中的 AccountMapper 和 “ACCOUNT” 在哪里,报错了。

MyBatis-Flex 使用了 APT 技术,这两个类是自动生成的,需要编译一下项目。如果已经生成但是导入不了,按如下方法将 target/generated-sources/annotations 目录标记一下即可。

参考:MyBatis-Flex APT 配置 - MyBatis-Flex 官方网站

阿里镜像找不到依赖?

Could not find artifact com.mybatis-flex:mybatis-flex-spring-boot-starter:pom:1.x.x
in alimaven (http://maven.aliyun.com/nexus/content/groups/public/)

这个是因为目前阿里云镜像正在维护,可以替换为腾讯云或者华为云的镜像源,更改 Maven 安装目录下的 settings.xml 文件, 添加如下配置:

腾讯云:

<mirror><id>tencent-cloud</id><mirrorOf>*</mirrorOf><name>tencent-cloud</name><url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>

华为云:

<mirror><id>huawei-cloud</id><mirrorOf>*</mirrorOf><name>huawei-cloud</name><url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>

SpringBoot 3.2 项目,启动报错 Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String

这个是 mybatis-spring 依赖版本过低造成的,需要将内置的低版本 mybatis-spring 换为最新版。

<dependency><groupId>com.mybatis-flex</groupId><artifactId>mybatis-flex-spring-boot-starter</artifactId><version>${mybatis-flex.version}</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></exclusion></exclusions>
</dependency><!-- 添加已适配 springboot 3.2 的 mybatis-spring 依赖-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version>
</dependency>

SpringBoot 项目,启动报错 java.lang.ClassNotFoundException: org.springframework.transaction.TransactionManager

这个应该是 Spring Boot 版本的问题,org.springframework.transaction.TransactionManager 这个类是 Spring Framework 5.2 新增的,对应 Spring Boot 的版本应该是 Spring Boot 2.2 及其以上版本,所以应该使用 Spring Boot 2.2 及其以上版本。

SpringBoot 项目,启动报错 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required

如果当前依赖没有连接池相关依赖,则建议添加 HikariCP 依赖。

SpringBoot v2.x 添加 hikariCP 的内容如下:

<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>4.0.3</version>
</dependency>

SpringBoot v3.x 添加 hikariCP 的内容如下:

<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>5.0.1</version>
</dependency>

如果使用的是 druid 数据库连接池,则需要添加数据源类型的配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

SpringBoot 项目中出现 class “com.xxx” cannot be cast class “com.xxx” 的错误

这个问题是由于 Spring 的 devtools 热加载引起的,可以在项目的 resources/META-INF 目录下创建一个名为 spring-devtools.properties 的配置文件,配置内容如下:

restart.include.mapper=/mapper-[\\w-\\.].jar
restart.include.pagehelper=/pagehelper-[\\w-\\.].jar
restart.include.mybatis-flex=/mybatis-flex-[\\w-\\.]+jar

相关文档参考 Spring 的官方网站:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.devtools.restart.customizing-the-classload

java.sql.SQLException: No value specified for parameter x

出现这个问题,原因是 MyBatis-Flex 未能正常启动,SQL 执行没有经过 MyBatis-Flex 导致的。其直接是因为和其他第三方增强框架整合使用了, 比如和 MyBatis-Plus、或者 PageHelper 等整合造成的。

如何与 PageHelper 整合可以点击 这里 查看

整合 Springboot 3 出现 ClassNotFoundException: NestedIOException 的错误

需要排除 flex 中的 mybatis-spring 的依赖,主动添加最新版本的 mybatis-spring 依赖。

<dependency><groupId>com.mybatis-flex</groupId><artifactId>mybatis-flex-spring-boot-starter</artifactId><version>${mybatis-flex.version}</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></exclusion></exclusions>
</dependency><!-- 添加已适配 springboot 3 的 mybatis-spring 依赖-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.1</version>
</dependency>

Spring 下使用 Druid 数据源无法启动

原因是在数据源的配置中,未添加 type 字段的配置:

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://127.0.0.1:3306/dbtestusername: rootpassword: 123456

第 3 行中的 type 字段不能为空,这个并非是 MyBaits-Flex 的问题,而是 Spring 没有内置对 Druid 数据源类型 的主动发现机制。若使用 hikariCP 数据源,则可以不配置 type 内容。

若把数据源配置到 mybatis-flex.datasource 下,使用 mybatis-flex 的数据源发现机制, 使用 druid 则可以不用配置 type,更多文档参考:多数据源章节。

与 PageHelper 集成出现错误

在社区中,一些老的项目在使用到了开源项目 PageHelper,用于解决 xml 的分页问题,在和 MyBatis-flex 整合使用中,出现了一些错误,原因是 pagehelper-spring-boot-starter 依赖了 mybatis-spring-boot-starter, 此时需要把 pagehelper-spring-boot-starter 依赖替换为 pagehelper,然后手动添加 PageInterceptor。

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>版本号</version>
</dependency>

需要把以上依赖替换如下:

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.3</version>
</dependency>

解决方案:https://gitee.com/mybatis-flex/mybatis-flex/issues/I71AUE

代码生成器获取不到注释

如果是 MySQL 数据库的话,可能是因为数据库版本太低,解决办法:MySQL 5.* 需要在 jdbcUrl 设置参数 useInformationSchema=true 才能获取到注释。

例如:jdbc:mysql://127.0.0.1:3306/mybatis-flex?characterEncoding=UTF-8&useInformationSchema=true

与 Nacos 集成时出错,无法正常启动 MyBatis-Flex

一般情况下,是因为缺少 Nacos 的相关 Maven,注意添加如下的 Nacos 依赖:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2022.0.0.0</version>
</dependency>

如何自定义 MyBatis 的 Configuration?

  1. 在不使用 Spring 的场景下:
FlexConfiguration configuration = new FlexConfiguration();
MybatisFlexBootstrap.getInstance().setConfiguration(configuration);
  1. 在使用 Spring-Boot 的场景下:
@Configuration
public class MyConfigurationCustomizer implements ConfigurationCustomizer {@Overridepublic void customize(FlexConfiguration configuration) {// 在这里为 configuration 进行配置configuration.setLogImpl(StdOutImpl.class);}
}
  1. 只使用 Spring(不使用 Spring-Boot ) 的场景:
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean factoryBean = new FlexSqlSessionFactoryBean();factoryBean.setDataSource(dataSource);// 在这里配置FlexConfiguration configuration = new FlexConfiguration();configuration.setLogImpl(StdOutImpl.class);factoryBean.setConfiguration(configuration);return factoryBean.getObject();
}

如何在插入数据成功时,获得到主键内容?

在 MyBatis-Flex 中,一个主键没有赋值的 Entity(主键内容为空),通过 BaseMapper 插入成功后,其主键会自动被赋值,例如:

//创建一个没有 id 内容的 account
Account account = new Account();
account.setUserName("michael");//插入数据
accountMapper.insert(account);//插入成功后,其 id 自动被赋值
System.out.println("插入成功的 Account 的 id: " + account.getId());

如果使用 Db + Row,代码如下:

//创建一个 row,并设置其主键类型为自增,主键字段名称为 id
Row row = Row.ofKey(RowKey.AUTO);
row.set("user_name", "michael");//插入数据
Db.insert("tb_account", row);//插入成功后,其 id 自动被赋值
System.out.println("插入成功的主键: " + row.get("id"));

RowKey 的说明:

RowKey 内部定义了 4 个常量,分别为

  • AUTO:字段名称为 id,类型为自增。
  • UUID:字段名称为 id,类型为 uuid。
  • FLEX_ID:字段名称为 id,类型为 flexId。
  • SNOW_FLAKE_ID,:字段名称为 id,类型为雪花算法。

如果表的主键名称不是 id,或者主键的生成类型并非以上的 4 种类型,则需要我们自定义 RowKey,可以通过 RowKey.of() 方法来自定自己的主键名称和类型。 例如:

//创建一个 rowKey,字段名称为 my_id,生成类型为雪花算法。
//整个应用全局定义一个静态变量,然后所有 row 复用就可以
RowKey rowKey = RowKey.of("my_id", KeyType.Generator, KeyGenerators.snowFlakeId);Row row = Row.ofKey(rowKey);
row.set("user_name", "michael");//插入数据
Db.insert("tb_account", row);//插入成功后,其 my_id 自动被赋值
System.out.println("插入成功的主键: " + row.get("my_id"));

如何替换 Ruoyi 项目中的 MyBatis 为 MyBatis-Flex ?

参考 issue:https://gitee.com/mybatis-flex/mybatis-flex/issues/I7UX96

MyBatis-Flex 如何 activiti6 以及 Flowable 等工作流引擎集成?

当 MyBatis-Flex 与 activiti6 (或者 Flowable)集成时,需要覆盖其自动配置;添加 mybatis-flex 的事务管理器(FlexTransactionManager)和 DataSource(FlexDataSource) 注入到 ProcessEngineConfiguration,配置代码如下:

@Bean
public ProcessEngineConfiguration processEngineConfiguration(SqlSessionFactory sqlSessionFactory,PlatformTransactionManager annotationDrivenTransactionManager) {SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();// 指定 MyBatis-Flex  数据源processEngineConfiguration.setDataSource(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource());// 配置 MyBatis-Flex  的事务管理器processEngineConfiguration.setTransactionManager(annotationDrivenTransactionManager);...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt5】QMouseEvent的globalPos

2023年12月14日&#xff0c;周四下午 QMouseEvent的globalPos()函数是用于获取鼠标事件发生时的全局坐标。它返回一个QPoint对象&#xff0c;表示鼠标事件的全局位置。 全局坐标是相对于整个屏幕的坐标系&#xff0c;而不是相对于应用程序窗口或控件的坐标系。它可以用来确定鼠…

美颜技术讲解:视频美颜SDK的开发与集成

如今&#xff0c;美颜技术的应用愈发成为吸引用户的一项重要功能。本文将深入探讨视频美颜SDK的开发与集成&#xff0c;揭示其背后的技术原理和实现步骤。 一、美颜技术的背后 美颜技术并非仅仅是简单的滤镜效果&#xff0c;而是一项涉及复杂图像处理和算法的技术。在视频美颜…

wordpress 修改社交图标

要去掉标记的图标&#xff0c;死活找不到在那里配置。后来找到了&#xff0c;下图&#xff08;wordpress 小白&#xff0c;特此记录&#xff09;

解析“七星创客”模式在零售行业的核心要素与成功关键

在互联网时代&#xff0c;商业模式不断创新&#xff0c;其中“七星创客”模式备受关注。零售行业面临着竞争激烈的市场环境&#xff0c;如何衔接“七星创客”模式以提高销售业绩和用户忠诚度成为重要议题。本文将探讨零售行业如何成功衔接“七星创客”模式&#xff0c;并提出具…

安装python第三方库后,在pycharm中不能正常导入

python小白学习opencv&#xff0c;使用pip安装完opencv库后import cv2报错&#xff0c;按照如下设置解决&#xff1a; 需要正确设置python解释器路径

Python内置类属性`__cmp__`属性的使用教程

概要 在Python中&#xff0c;__cmp__属性是一个特殊的方法&#xff0c;用于自定义类的实例之间的比较方式。深入了解和熟练运用这一特性&#xff0c;可以使自定义类更加灵活和强大。本教程将详细介绍__cmp__的基本概念、高级用法以及一些注意事项&#xff0c;通过丰富的示例代…

跨境电商群发消息工具定制贵吗?

随着全球电子商务的快速发展&#xff0c;跨境电商已经成为了一种新兴的商业形式。 为了能够更好地与海外客户沟通&#xff0c;许多卖家开始寻找跨境电商群发消息工具&#xff0c;那么&#xff0c;这些工具的定制费用是否昂贵呢? 首先&#xff0c;我们需要明确一点&#xff1…

线程上下文设计模式

线程上下文机制是参考应用或者系统上下文的机制&#xff0c;使每个线程拥有自己的上下文&#xff0c;不与其他线程共享。线程上下文机制有不同于其他上下文机制的地方&#xff0c;即线程的生命周期结束后&#xff0c;线程上下文也要回收掉&#xff0c;不然容易出现内存泄露。 T…

在线免费压缩pdf文件

在线免费压缩pdf文件&#xff0c;不用登陆哦&#xff0c; https://www.ilovepdf.com/ https://online2pdf.com/#

FFmpeg之HWContextType

HWContextType算是ffmpeg中为硬解码第三方接口的一个辅助类&#xff0c;它自己有两个辅助子类 AVHWDeviceContext和AVHWFramesContext。 AVHWDeviceContext主要表示硬件上下文 AVHWFramesContext主要表示硬件Frame的一些参数&#xff0c;比如你解码后的YUV数据还在硬件上&#…

el-form表单校验输入框值为0时 提示校验不通过

el-form表单校验输入框值为0时提示校验不通过 配置validator自定义校验方法 这里举例在结构代码里加入校验规则 <el-form-item:prop"num":rules"[{required: true,message: 请输入数量,trigger: change,},{validator,trigger: blur}]" ><el-inpu…

软件工程:软件需求规格说明书

常用软件需求规格说明书模板 ISO2006模板示例 示例1

IP属地变化背后的原因

随着互联网的普及和技术的不断发展&#xff0c;IP属地变化的现象越来越受到人们的关注。近日&#xff0c;有网友发现自己的IP属地发生了变化&#xff0c;引发了广泛讨论。那么&#xff0c;IP属地为什么会发生变化呢&#xff1f; 首先&#xff0c;网络环境的变化是导致IP属地变化…

uniapp 之 图片 视频 文件上传

<view class"" style"padding: 24rpx 0"><text>相关资料 <text class"fs-26 color-666">&#xff08;图片、视频、文档不超过9个&#xff09;</text> </text><view class"flex align-center" style&…

Python中的内存泄漏及其检测方法

一、引言 内存泄漏是编程中常见的问题之一&#xff0c;它会导致程序在运行过程中不断消耗内存&#xff0c;最终可能导致程序崩溃或性能下降。在Python中&#xff0c;内存泄漏也是一个需要关注的问题。本文将详细介绍Python中的内存泄漏及其检测方法&#xff0c;以帮助读者更好…

转发一篇CAN过滤器配置的文章

一&#xff1a;转发链接 “目前网络上看到CAN过滤器讲得最详细的文章” 二&#xff1a;CAN过滤器是CAN总线系统中的一种设备&#xff0c;它用于过滤和选择总线上的数据帧。 在CAN总线系统中&#xff0c;每个设备都可以发送和接收数据帧。然而&#xff0c;在某些情况下&#xf…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 王炸产品Amazon Q,你的AI助手

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#x…

蓝牙指纹定位技术介绍以及代码演示

蓝牙指纹定位技术 蓝牙指纹定位技术是一种基于蓝牙信号强度&#xff08;Bluetooth Signal Strength&#xff09;来进行位置定位的方法。这种技术主要应用于室内定位系统&#xff08;Indoor Positioning System, IPS&#xff09;&#xff0c;因为室内环境对GPS信号的阻隔导致其…

Globalsign—— SSL证书中的LV

一&#xff1a;SSL证书 SSL 证书可以实现网站的 https 加密&#xff0c;保证从客户端到服务端传输的数据是加密的。越来越多的网络信息泄露事件也给我们敲响了警钟&#xff0c;信息安全不容小觑。网站建设者们也应该要把网络信息安全放在首位&#xff0c;给网站部署 SSL …

第一个“hello Android”程序

1、首先安装Android studio&#xff08;跳过&#xff09; Android Studio是由Google推出的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Android应用程序的开发。它是基于JetBrains的IntelliJ IDEA IDE构建的&#xff0c;提供了丰富的功能和工具&#xff0…