MyBatis - jdbcTypeForNull Oracle

本文介绍了在SpringBoot项目中使用MyBatisPlus时遇到的oracle数据库JdbcType配置问题及解决方法。针对mybatis配置中的jdbc-type-for-null设置失效的情况,提供了有效的解决策略。

springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)

如果你在搞多数据源配置,那么很可能不小心搞出这个问题。

下面配置已经被搞失效了!

mybatis:
  configuration:
    jdbc-type-for-null: 'null'

解决方法也简单:Mapper.xml中为空的参数,加上 jdbcType=VARCHAR"就可以了。

但是这种太麻烦,还是从https://stackoverflow.com/找到了办法。

解决方案参考:https://stackoverflow.com/questions/32081252/mybatis-jdbctypefornull-oracle

<think>我们在使用MyBatis-Plus时,通常需要在Spring Boot项目的配置文件中进行相关配置。这里以YAML格式的配置文件为例,展示MyBatis-Plus的常用配置项及其解释。 MyBatis-Plus的配置主要分为两大块: 1. 基本配置(如数据源、MyBatis原生配置等) 2. MyBatis-Plus特有配置(如全局配置、策略配置等) 下面是一个典型的配置示例,包含了常见的配置项,并附有注释说明。 ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: 123456 # MyBatis-Plus 配置 mybatis-plus: # 如果是多数据源配置,则不需要这个全局配置,而是分别配置在每个数据源中 configuration: # 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射 map-underscore-to-camel-case: true # 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新 default-executor-type: simple # 开启或关闭缓存,全局生效 cache-enabled: true # 配置JdbcTypeForNull, 有些数据库可能不识别MyBatis对null的默认处理,比如Oracle需要指定为NULL jdbc-type-for-null: null global-config: db-config: # 全局主键类型:AUTO(数据库自增),INPUT(自行输入),ID_WORKER(分布式全局唯一ID),UUID(全局唯一UUID) id-type: auto # 表名前缀 table-prefix: t_ # 字段策略 IGNORED:忽略判断 NOT_NULL:非NULL判断 NOT_EMPTY:非空判断 insert-strategy: not_null update-strategy: not_null # 逻辑删除配置 logic-delete-field: isDeleted # 逻辑删除的字段名(默认为 deleted) logic-delete-value: 1 # 逻辑删除值(默认为 1) logic-not-delete-value: 0 # 未逻辑删除的值(默认为 0) # 指定Mapper.xml文件的路径,如果放在resources目录下,则配置为classpath*:mapper/**/*.xml mapper-locations: classpath:mapper/*.xml # 配置类型别名包,这样在Mapper.xml中可以直接使用类名,而不是全限定名 type-aliases-package: com.example.entity # 以下配置用于启用MyBatis-Plus提供的分页插件 pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true # 也可以这样配置分页插件(注意:在MyBatis-Plus中,分页插件是通过配置类来配置的,但这里也可以配置一些参数) # 但是注意:上面的pagehelper配置实际上是MyBatis分页插件PageHelper的配置方式,MyBatis-Plus有自己的分页插件,通常使用配置类来配置。 # 注意:MyBatis-Plus的分页插件需要在配置类中配置,如下: # @Configuration # public class MybatisPlusConfig { # @Bean # public PaginationInterceptor paginationInterceptor() { # return new PaginationInterceptor(); # } # } ``` ### 配置说明 1. **数据源配置**:在`spring.datasource`下配置数据库连接信息。 2. **MyBatis-Plus配置**: - `configuration`:等同于MyBatis原生的`mybatis.configuration`配置,用于设置MyBatis的行为。 - `global-config`:全局配置,其中`db-config`用于配置数据库相关策略,如主键类型、表前缀、字段策略(插入或更新时字段的非空判断)以及逻辑删除配置等。 - `mapper-locations`:指定Mapper XML文件的位置。 - `type-aliases-package`:配置类型别名的包路径,这样在XML中可以直接使用类名而不需要写全限定名。 3. **分页插件配置**:注意上面的配置中,`pagehelper`配置项实际上是用于传统的PageHelper插件(需要单独引入依赖)。而MyBatis-Plus自带分页插件,通常需要在配置类中通过`@Bean`注入`PaginationInterceptor`(在3.4.0之前)或`MybatisPlusInterceptor`(3.4.0及以后)。因此,在application.yml中不能直接配置MyBatis-Plus的分页插件参数,而是需要在配置类中配置。 ### MyBatis-Plus 3.4.0 及以上版本的分页插件配置 从3.4.0版本开始,MyBatis-Plus引入了新的插件机制,使用`MybatisPlusInterceptor`。因此,我们需要在配置类中配置: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } } ``` ### 注意事项 - 逻辑删除配置:在配置逻辑删除后,删除操作将变为更新操作(将逻辑删除字段更新为删除值),查询操作会自动过滤已逻辑删除的数据。 - 字段策略:配置`insert-strategy`和`update-strategy`可以控制在插入和更新时,对于字段值为`null`或空字符串的处理方式。 - `not_null`:非NULL判断,只判断是否为null,为null则忽略该字段(不插入/更新)。 - `not_empty`:非空判断,为null或空字符串("")都会忽略。 - `ignored`:忽略判断,无论字段值是什么都进行插入/更新。 ### 常见问题 如果遇到配置未生效的情况,请检查: 1. 配置项是否正确,尤其是缩进(YAML对缩进要求严格)。 2. 是否使用了正确的配置前缀(`mybatis-plus`)。 3. 版本兼容性问题,尤其是分页插件在3.4.0前后配置方式不同。 ### 相关扩展配置 除了上述配置,MyBatis-Plus还支持很多其他配置,例如: - 性能分析插件(常用于开发环境):用于输出SQL语句以及其执行时间,帮助开发者优化SQL。 - 乐观锁插件:通过版本号实现乐观锁。 这些插件通常也需要在配置类中通过拦截器的方式添加。 ### 总结 以上是MyBatis-Plus在Spring Boot中使用YAML配置文件的基本配置项和解释。根据实际项目需要,可以选择配置其中的部分选项。 §§相关问题§§: 1. MyBatis-Plus中如何配置多数据源? 2. MyBatis-Plus的分页插件在3.4.0版本前后配置方式有什么不同? 3. MyBatis-Plus的字段策略(如insert-strategy)有哪些选项?分别代表什么含义? 4. 在MyBatis-Plus中如何配置逻辑删除? </think>### MyBatis-Plus的YAML配置详解 以下是完整的MyBatis-Plus在Spring Boot中的常用YAML配置示例及说明: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 mybatis-plus: # 实体扫描包路径(重要) type-aliases-package: com.example.entity # Mapper XML文件位置 mapper-locations: classpath*:/mapper/**/*.xml # 全局配置 global-config: db-config: # 主键类型 AUTO=数据库自增 INPUT=手动输入 ID_WORKER=雪花算法 id-type: auto # 表名前缀 table-prefix: t_ # 表名是否使用驼峰转下划线(默认true) table-underline: true # 逻辑删除配置 logic-delete-field: deleted # 逻辑删除字段名 logic-delete-value: 1 # 逻辑删除值 logic-not-delete-value: 0 # 未删除值 # MyBatis原生配置 configuration: # 自动驼峰命名规则映射(默认true) map-underscore-to-camel-case: true # 开启二级缓存(默认false) cache-enabled: true # JDBC类型为NULL时的处理(Oracle需要) jdbc-type-for-null: null # 日志实现(可选) log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` ### 配置项详解: 1. **数据源配置 (spring.datasource)** - 必需配置数据库连接信息 - MySQL 8+建议使用`com.mysql.cj.jdbc.Driver` - 时区建议显式指定(如`serverTimezone=Asia/Shanghai`) 2. **核心配置 (mybatis-plus)** - `type-aliases-package`:实体类包路径(XML中可直接使用类名) - `mapper-locations`:XML映射文件路径(支持Ant风格通配符) 3. **全局配置 (global-config.db-config)** - `id-type`:主键生成策略(推荐`ASSIGN_ID`分布式ID) - `table-prefix`:统一表前缀(如`t_user`表配置`t_`) - 逻辑删除配置:标记删除而非物理删除 4. **MyBatis原生配置 (configuration)** - `map-underscore-to-camel-case`:自动转换`user_name→userName` - `log-impl`:开发阶段建议开启SQL日志 - `cache-enabled`:二级缓存开关(注意分布式环境问题) ### 配置注意事项: 1. **逻辑删除字段**需在实体类中添加对应属性: ```java @TableLogic private Integer deleted; // 对应配置的logic-delete-field ``` 2. **分页插件**需单独配置Java Config: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } } ``` 3. **常见问题解决**: - 表字段映射失败:检查`map-underscore-to-camel-case`和实体字段命名 - XML未加载:确认`mapper-locations`路径与实际匹配 - 逻辑删除无效:确保字段类型与配置值类型一致 ### 进阶配置示例: ```yaml mybatis-plus: # 多租户配置 global-config: db-config: multi-tenant: true tenant-id-field: tenant_id # 性能分析插件(开发环境) configuration: # SQL执行时长超过3000ms视为慢查询 performance: max-time: 3000 format: true ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值