成都保障房中心官方网站,网页设计速成班培训,自己做的网站竞价好还是单页好,线上营销话术文章目录 官网常见问题MyBatis-Flex 没有启动或者启动出错怎么办#xff1f;示例中的 AccountMapper 和 ACCOUNT 在哪里#xff0c;报错了。阿里镜像找不到依赖#xff1f;SpringBoot 3.2 项目#xff0c;启动报错 Invalid value type for attribute factoryBe… 文章目录 官网常见问题MyBatis-Flex 没有启动或者启动出错怎么办示例中的 AccountMapper 和 ACCOUNT 在哪里报错了。阿里镜像找不到依赖SpringBoot 3.2 项目启动报错 Invalid value type for attribute factoryBeanObjectType: java.lang.StringSpringBoot 项目启动报错 java.lang.ClassNotFoundException: org.springframework.transaction.TransactionManagerSpringBoot 项目启动报错 Property sqlSessionFactory or sqlSessionTemplate are requiredSpringBoot 项目中出现 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需要做如下排查
是否添加了数据源Druid、HikariCP 等依赖或者添加了错误的数据源依赖版本。比如 SpringBoot v2.x 使用 HikariCP 时应该是 HikariCP 的 4.x 版本。而 SpringBoot v3.x 应该使用 HikariCP 的 5.x 版本。是否主动添加了 mybatis-spring-boot-starter 的依赖导致版本不匹配。使用 SpringBoot 的情况下应该引用 mybatis-flex-spring-boot-starter 就可以了不需要再添加其他 MyBatis 依赖。是否与 mybatis-plus-boot-starter 共用使 MyBatis 被优先初始化而导致 MyBatis-Flex 没有被加载。是否添加了 pagehelper-spring-boot-starter 依赖导致传递了 mybatis-spring-boot-starter 依赖。如还想继续使用 pagehelper 插件点击 这里 查看解决方案。是否 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 文件 添加如下配置
腾讯云
mirroridtencent-cloud/idmirrorOf*/mirrorOfnametencent-cloud/nameurlhttps://mirrors.cloud.tencent.com/nexus/repository/maven-public//url
/mirror华为云
mirroridhuawei-cloud/idmirrorOf*/mirrorOfnamehuawei-cloud/nameurlhttps://mirrors.huaweicloud.com/repository/maven//url
/mirrorSpringBoot 3.2 项目启动报错 Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String
这个是 mybatis-spring 依赖版本过低造成的需要将内置的低版本 mybatis-spring 换为最新版。
dependencygroupIdcom.mybatis-flex/groupIdartifactIdmybatis-flex-spring-boot-starter/artifactIdversion${mybatis-flex.version}/versionexclusionsexclusiongroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactId/exclusion/exclusions
/dependency!-- 添加已适配 springboot 3.2 的 mybatis-spring 依赖--
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion3.0.3/version
/dependencySpringBoot 项目启动报错 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 的内容如下
dependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactIdversion4.0.3/version
/dependencySpringBoot v3.x 添加 hikariCP 的内容如下
dependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactIdversion5.0.1/version
/dependency如果使用的是 druid 数据库连接池则需要添加数据源类型的配置 spring.datasource.typecom.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 依赖。
dependencygroupIdcom.mybatis-flex/groupIdartifactIdmybatis-flex-spring-boot-starter/artifactIdversion${mybatis-flex.version}/versionexclusionsexclusiongroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactId/exclusion/exclusions
/dependency!-- 添加已适配 springboot 3 的 mybatis-spring 依赖--
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion3.0.1/version
/dependencySpring 下使用 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。
dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion版本号/version
/dependency需要把以上依赖替换如下
dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.3.3/version
/dependency解决方案https://gitee.com/mybatis-flex/mybatis-flex/issues/I71AUE
代码生成器获取不到注释
如果是 MySQL 数据库的话可能是因为数据库版本太低解决办法MySQL 5.* 需要在 jdbcUrl 设置参数 useInformationSchematrue 才能获取到注释。
例如jdbc:mysql://127.0.0.1:3306/mybatis-flex?characterEncodingUTF-8useInformationSchematrue
与 Nacos 集成时出错无法正常启动 MyBatis-Flex
一般情况下是因为缺少 Nacos 的相关 Maven注意添加如下的 Nacos 依赖
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactIdversion2022.0.0.0/version
/dependency如何自定义 MyBatis 的 Configuration?
在不使用 Spring 的场景下
FlexConfiguration configuration new FlexConfiguration();
MybatisFlexBootstrap.getInstance().setConfiguration(configuration);在使用 Spring-Boot 的场景下
Configuration
public class MyConfigurationCustomizer implements ConfigurationCustomizer {Overridepublic void customize(FlexConfiguration configuration) {// 在这里为 configuration 进行配置configuration.setLogImpl(StdOutImpl.class);}
}只使用 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 ?
参考 issuehttps://gitee.com/mybatis-flex/mybatis-flex/issues/I7UX96
MyBatis-Flex 如何 activiti6 以及 Flowable 等工作流引擎集成
当 MyBatis-Flex 与 activiti6 或者 Flowable集成时需要覆盖其自动配置添加 mybatis-flex 的事务管理器FlexTransactionManager和 DataSourceFlexDataSource 注入到 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);...
}