mybatis在实际项目中常见的排坑配置
目前在做mybatis数据迁移的时候遇到了不少坑,以前项目没有配置项,导致会产生不少bug,目前记录排坑了三种场景和其解决方案
驼峰转下划线
之前项目中没引入,解决办法有三个:
- 蠢一点的方法就是手工在SQL里转
- 或者在外面使用工具类转
- 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.json-lib 的maven dependency遇到的问题: 项目中要用到json-lib,mvnreposi ...
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明 1.1. Mybatis invoke1 1.2. Spring的数据源配置2 1.3. Mybatis ...
- js 读取json文件_JavaScript 项目中常见配置文件介绍
原文地址:https://github.com/whinc/blog/issues/14 本文介绍一些前端项目的通用配置及相关资源,以便你了解项目中常见配置的含义以及配置方式. .gitignore ...
- 从实习经历中总结,项目中常见 Mock 方案
文章目录 前言 项目中常见 Mock 方案 代码侵入 拦截 Ajax 请求 接口管理工具 Swagger YAPI RAP2-DELOS moco 总结 JSON Server 起飞教程 安装 启动服 ...
- VB.NET 在项目中添加App.config的配置
右击项目,选择属性, 在属性中选择Settings选项卡,Scope选择User 这样就会在项目中添加了App.config配置 内容: <?xml version="1.0" ...
- ReactNative 在丁香医生项目中引入的踩坑日记
ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...
- Mybatis在Maven项目中使用
Mybatis概览 ORM是什么? ORM是Object Realtion Mapping的缩写,顾名思义,即对象关系映射. ORM是一种以面向对象的方式来进行数据库操作的技术.Web开发中常用的语言 ...
- 项目中常见的英文缩写
在一些项目中经常会遇到一些缩写的英文,平时都没怎么注意,今天刚好总结了一下: bin - binary 二进制 src - source 源代码.来源 dest - destination 目的地 d ...
- iOS总结:项目中的各种小坑汇总
一.字符串转JSON 在网络请求时,如果服务端返回的是字符串,那么就需要我们自己封装一个类,将请求下来的字符串转换成json对象,从而存入模型中. 注意: 字符串中如果含有一些特殊转意符(如\n.\t ...
最新文章
- 900万张标注图像,谷歌发布Open Images最新V3版
- Work Management Service application in SharePoint 2016
- golang init函数:全局变量优先于 > init函数 > main函数
- leetcode 530. 二叉搜索树的最小绝对差(中序遍历)
- 使用Zookeeper共享锁和排它锁和分布式队列的原理和实现(ZkClient)
- linux如何查看实时优先级,Linux进程优先级系统——设置实时进程优先级
- Redmi 10X Pro 5G曝光:四种配色、两种存储版本可选
- Eclipse调整tomcat内存大小
- Egret入门学习日记 --- 第十七篇(书中 7.4~8.2节 内容)
- css3渐变中的,css3 中的渐变
- 组卷与考试系统_题库添加选择题模块
- 计算机入门知识(如何使用操作系统)
- 真北敏捷公众号里的群友
- 再续:~英语 1038个词根 217个后缀!
- 超滤-反渗透膜工艺处理黄磷生产废水 避免水体污染
- 单片机、嵌入式Linux开发大学自学路径
- 服务器连接存储后系统启动不了,IBM服务器直连存储系统不启动的 经验分享
- 浙江省机电工程师职称评审条件及流程
- python求导函数公式_python怎么实现函数求导
- 无线远距离WiFi模组,CV5200远程实时传输应用,无线mesh自组网方案
热门文章
- 山寨山寨版手机安全卫士源码项目
- 【图文并茂】如何进行Win7系统的重装
- c语言数学语文英语成绩编程,输入10名学生的序号和每个学生三门功课(数学、英语、C语言程序设计)的成绩,编程计算出每个学生的总分...
- SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度
- 功率放大器的输入阻抗和输出阻抗的关系
- c语言 memset 段错误,memset 导致的一个段错误
- centos7.9中mysql5.6数据库安装和配置以及修改端口
- Python_matplotlib保存矢量图
- Source Insight 4.0 序列号 license文件
- 如何在ArcGIS中利用谷歌高程进行坡度分析