目前在做mybatis数据迁移的时候遇到了不少坑,以前项目没有配置项,导致会产生不少bug,目前记录排坑了三种场景和其解决方案

驼峰转下划线

之前项目中没引入,解决办法有三个:

  1. 蠢一点的方法就是手工在SQL里转
  2. 或者在外面使用工具类转
  3. mybatis的话可以配置驼峰问题

1.手工转,字段多的话很麻烦

  <select id="lzqQuery" resultType="com.lzq.lzqEntity"parameterType="java.util.HashMap">selectid as id,store_id as storeIdfrom xxx </select>

2.外面写方法转

   /*** 把 map 中的 key 由驼峰命名转为下划线,使用LinkedHashMap确保字段顺序一致性*/private LinkedHashMap<String, Object> humpToUnderline(Map<String, Object> map) {//使用LinkedHashMap确保字段顺序一致性LinkedHashMap<String, Object> transitionMap = new LinkedHashMap<>(16);map.forEach((k, v) -> transitionMap.put(StrUtil.toUnderlineCase(k), v));return transitionMap;}private void checkCreateTime(String startTime, String endTime) {if ("".equals(startTime)) {throw new RuntimeException("startTime cant be null");}if ("".equals(endTime)) {throw new RuntimeException("endTime cant be null");}SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//Date monitorTime=null;try {sdf.parse(startTime);sdf.parse(endTime);//monitorTime=new Date(udate.getTime());} catch (Exception e) {throw new RuntimeException("日期格式必须yyyy-MM-dd HH:mm");}}

这里用到了hutool的包

import cn.hutool.core.util.StrUtil;

项目中还遇到了插入字段的顺序问题,我这里返回是LinkedHashMap来确保key顺序一致

3.mybatis配置驼峰

application配置

mybatis.configuration.map-underscore-to-camel-case=true

或者写mybatis-config.xml,效果一样

<setting name="mapUnderscoreToCamelCase" value="true"/>

select返回字段数据如果为null,会出现返回map不存在该字段key的情况


假如我查的某一列有个字段为null,map会不返回,如下图

解决办法很简单,写一个mybatis-config.xml,加入该配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="callSettersOnNulls" value="true"/></settings>
</configuration>

在DBConfig里set进去该配置文件

 @Beanpublic MySqlSessionFactoryBean sqlSessionFactoryBean() throws Exception {MySqlSessionFactoryBean sqlSessionFactoryBean = new MySqlSessionFactoryBean();//加入本地config配置,确保转出的字段如果为null可以存在map内Resource resources2 = new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml");sqlSessionFactoryBean.setConfigLocation(resources2);return sqlSessionFactoryBean;}

批量更新报SQLSyntaxError问题

我在做批量更新需求的时候遇到的一个坑,一直报错语法问题,但本地调试SQL没有任何问题,仔细查找后发现其实是mybatis不支持批量update操作

org.springframework.jdbc.BadSqlGrammarException:
### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near 'update mall_product

解决方案其实就是在jdbc配置url上加上如下配置

allowMultiQueries=true

配置文件跟上

db.url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&characterEncoding=utf8&serverTimezone=GMT

mybatis批量更新报错解决办法

mybatis invalid comparison: java.sql.Timestamp and java.lang.String

错误代码:

<if test="updateDate != null&&updateDate!=''">AND a.update_date = #{updateDate}
</if>

修改后:

<if test="updateDate != null">AND a.update_date = #{updateDate}
</if>

或者手工过滤,!=是datetime的字段

mybatis在实际项目中常见的排坑配置相关推荐

  1. 项目中常见错误总结一

    项目中常见错误总结一 以下是在项目开发过程中会遇到的错误总结,会不定期进行更新: 1.json-lib 的maven dependency遇到的问题: 项目中要用到json-lib,mvnreposi ...

  2. Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明

    Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明 1.1. Mybatis invoke1 1.2. Spring的数据源配置2 1.3. Mybatis ...

  3. js 读取json文件_JavaScript 项目中常见配置文件介绍

    原文地址:https://github.com/whinc/blog/issues/14 本文介绍一些前端项目的通用配置及相关资源,以便你了解项目中常见配置的含义以及配置方式. .gitignore ...

  4. 从实习经历中总结,项目中常见 Mock 方案

    文章目录 前言 项目中常见 Mock 方案 代码侵入 拦截 Ajax 请求 接口管理工具 Swagger YAPI RAP2-DELOS moco 总结 JSON Server 起飞教程 安装 启动服 ...

  5. VB.NET 在项目中添加App.config的配置

    右击项目,选择属性, 在属性中选择Settings选项卡,Scope选择User 这样就会在项目中添加了App.config配置 内容: <?xml version="1.0" ...

  6. ReactNative 在丁香医生项目中引入的踩坑日记

    ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...

  7. Mybatis在Maven项目中使用

    Mybatis概览 ORM是什么? ORM是Object Realtion Mapping的缩写,顾名思义,即对象关系映射. ORM是一种以面向对象的方式来进行数据库操作的技术.Web开发中常用的语言 ...

  8. 项目中常见的英文缩写

    在一些项目中经常会遇到一些缩写的英文,平时都没怎么注意,今天刚好总结了一下: bin - binary 二进制 src - source 源代码.来源 dest - destination 目的地 d ...

  9. iOS总结:项目中的各种小坑汇总

    一.字符串转JSON 在网络请求时,如果服务端返回的是字符串,那么就需要我们自己封装一个类,将请求下来的字符串转换成json对象,从而存入模型中. 注意: 字符串中如果含有一些特殊转意符(如\n.\t ...

最新文章

  1. 900万张标注图像,谷歌发布Open Images最新V3版
  2. Work Management Service application in SharePoint 2016
  3. golang init函数:全局变量优先于 > init函数 > main函数
  4. leetcode 530. 二叉搜索树的最小绝对差(中序遍历)
  5. 使用Zookeeper共享锁和排它锁和分布式队列的原理和实现(ZkClient)
  6. linux如何查看实时优先级,Linux进程优先级系统——设置实时进程优先级
  7. Redmi 10X Pro 5G曝光:四种配色、两种存储版本可选
  8. Eclipse调整tomcat内存大小
  9. Egret入门学习日记 --- 第十七篇(书中 7.4~8.2节 内容)
  10. css3渐变中的,css3 中的渐变
  11. 组卷与考试系统_题库添加选择题模块
  12. 计算机入门知识(如何使用操作系统)
  13. 真北敏捷公众号里的群友
  14. 再续:~英语 1038个词根 217个后缀!
  15. 超滤-反渗透膜工艺处理黄磷生产废水 避免水体污染
  16. 单片机、嵌入式Linux开发大学自学路径
  17. 服务器连接存储后系统启动不了,IBM服务器直连存储系统不启动的 经验分享
  18. 浙江省机电工程师职称评审条件及流程
  19. python求导函数公式_python怎么实现函数求导
  20. 无线远距离WiFi模组,CV5200远程实时传输应用,无线mesh自组网方案

热门文章

  1. 山寨山寨版手机安全卫士源码项目
  2. 【图文并茂】如何进行Win7系统的重装
  3. c语言数学语文英语成绩编程,输入10名学生的序号和每个学生三门功课(数学、英语、C语言程序设计)的成绩,编程计算出每个学生的总分...
  4. SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度
  5. 功率放大器的输入阻抗和输出阻抗的关系
  6. c语言 memset 段错误,memset 导致的一个段错误
  7. centos7.9中mysql5.6数据库安装和配置以及修改端口
  8. Python_matplotlib保存矢量图
  9. Source Insight 4.0 序列号 license文件
  10. 如何在ArcGIS中利用谷歌高程进行坡度分析