MyBatis使用技巧、总结、注意事项
1、mybatis的官方文档地址
2、其他技巧:
2.1 如何在代码中拼接 like %%
<![CDATA[ and strategy_name like CONCAT('%',CONCAT(#{query.strategyName,jdbcType=VARCHAR},'%')) ]]>
其他如果只需要一个%,酌情使用CONCAT
2.2 数据库比较时日期的错误操作
2.2.1 异常情况:
1、DAO中对属性赋值,为Date类型;
@Override
public List<DataStatistic> getSumarry(DataStatisticQuery query) {
List<String> tableSuffixList = Arrays.asList(VirtualOrderUtils.createStringArray());
Map<String, Object> map = Maps.newHashMap();
map.put("tabCode", query.getTabCode());
map.put("tableSuffixList", tableSuffixList);
map.put("orderTimeBegin", query.getOrderTimeBegin());
map.put("orderTimeEnd", query.getOrderTimeEnd());
return this.selectList(this.getNameSpace("getSumarry"), map);
}
2、保证数据库中数据一致。XML 文件中如下使用:
2.1、查不到数据
<sql id="WHERE_ORDER_TIME_BEGIN_AND_END">
<if test="orderTimeBegin != null">
<![CDATA[ and order_time >= #{orderTimeBegin,jdbcType=DATE}]]>
</if>
<if test="orderTimeEnd != null">
<![CDATA[ and order_time <= #{orderTimeEnd,jdbcType=DATE}]]>
</if>
</sql>
而实际上:数据库中该字段的类型是:【`order_time` datetime DEFAULT NULL COMMENT '下单时间',】
2.2、可以查到数据
<sql id="WHERE_ORDER_TIME_BEGIN_AND_END">
<if test="orderTimeBegin != null">
<![CDATA[ and order_time >= #{orderTimeBegin}]]>
</if>
<if test="orderTimeEnd != null">
<![CDATA[ and order_time <= #{orderTimeEnd}]]>
</if>
</sql>
上面SQL的区别在于:
- 查不到是因为在拼接SQL时,取DAO层的值时,在字段后面添加了
jdbcType=DATE。导致无法查到。暂时不知道原因是什么,但要注意避免这种使用方式。
2.2.2 为什么会在后面指定jdbcType,及真正的错误与那样?
- 因为使用一个插件自动生成SQL,里面都有这个东西,所以就直接用了。
最终错误原因:不是不能用jdbcType,而是我jdbcType映射的类型写错了。应用jdbcType=TIMESTAMP。
关于jdbcType的使用:
- DATE和DATETIME的区别。DATE表示一个日期,肯定是有问题的。

- 如果使用
jdbcType=DATETIME:报错:No enum constant org.apache.ibatis.type.JdbcType.DATETIME
原因是MyBatis不支持DATETIME类型。实际上,对于MySQL的DATETIME,MyBatis中应该使用jdbcType=TIMESTAMP。- MyBatis支持的类型:

- MyBatis支持的类型:
2.2.3 关于什么时候使用jdbcType?
查询官网时可以发现

其他情况,MyBatis大部分场景可以自动分析出来。实际上,myBatis没有说什么时候用什么时候不用,感觉都可以使用,不区分select或者insert等语句,的。
2.3 SQL和resultMap中字段对应关系异常分析
只有两种异常情况:
- SQL中有,ResultMap中没有;
- 或者SQL中没有,ResultMap中有。
如果都有或者都没有,那就不会出现异常。
2.3.1 SQL中有,ResultMap中没有:
即ResultMap中的值不会被赋予从数据库中查到的值,因为没法把这个字段的值赋给具体的对象属性。
所以实际会取对象中的默认值:基本类型取初始化值,对象类型取null。
2.3.2 SQL中没有,ResultMap中有
还是ResultMap中的值不会被赋予从数据库中查到的值,因此根本不查这个字段。
所以实际会取对象中的默认值:基本类型取初始化值,对象类型取null。
2.3.3 总结:
以上两种情况其实一致,都是取对象属性的默认初始化值。
MyBatis使用技巧、总结、注意事项的更多相关文章
- MySQL索引类型总结和使用技巧以及注意事项
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable ...
- [MySQL]索引类型总结和使用技巧以及注意事项
一.普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式: 1.创建索引 CREATE INDEX [indexName] ON [mytable] ([column][(length)] ...
- 【转】mysql索引使用技巧及注意事项
一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...
- 使用css时的一些技巧及注意事项
<!-- TITLE: 使用css时的一些技巧及注意事项 --> # CSS推荐书写顺序: 1. 位置属性(position, top, right, z-index, display, ...
- MySQL索引类型总结和使用技巧以及注意事项 (转)
在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: 代码如下: CREATE TABLE mytable( ID INT NOT NULL, us ...
- JavaScript一些基础技巧和注意事项,你了解这些吗?
总结了一些JavaScript在开发编码中的使用技巧,如有不对,欢迎指正. 一.JavaScript在HTML和XHTML的使用 使用<script>元素有两种方式:直接在页面中嵌入Jav ...
- mysql索引使用技巧及注意事项
一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...
- 使用mysql索引技巧及注意事项
一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...
- 高并发秒杀系统--mybatis整合技巧
mybatis实现DAO接口编码技巧 1.XML文件通过namespace命名空间关联接口类 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD ...
随机推荐
- Python和Shell交互工具 ShellPy
ShellPy 是一款Python和Shell的交互工具.一般来说,我们会通过Subprocess.Popen或者Command模块执行一条Shell命令或脚本,然后通过返回的标准输出和错误输出来得到 ...
- [Google Guava] 1.1-使用和避免null
原文链接 译文链接 译者: 沈义扬 Doug Lea 说,“Null 真糟糕.” 当Sir C. A. R. Hoare 使用了null引用后说,”使用它导致了十亿美金的错误.” 轻率地使用 ...
- [Luogu] 【模板】点分治1
// 模板题#include <bits/stdc++.h> ; , head[N], dis[N]; ]; int size[N], maxson[N], Root; bool vis[ ...
- keras 模型简介
keras模型在keras中主要有两种模型,顺序模型,以及模型类(类的内部有函数) model.layers 是层的列表,他们组成了模型 model.inputs 是模型输入的张量 model.out ...
- Js 之获取对象key值
var date = Object.keys(data); Object.keys( ) 会返回一个数组,数组中是这个对象的key值列表 所以只要Object.keys(a)[0], 就可以得只包含一 ...
- ICEM-五通孔管
原视频下载地址:https://yunpan.cn/cqaQ2t5DrRcKa 访问密码 d111
- JAVA基础知识|进程与线程
一.什么是进程?什么是线程? 操作系统可以同时支持多个程序的运行,而一个程序可以狭义的认为就是一个进程.在一个进程的内部,可能包含多个顺序执行流,而每个执行流就对应一个线程. 1.1.进程 进程:是计 ...
- 异步机制 - APC
APC : An asynchronous procedure call,异步过程调用,是微软提供的一种在线程上下文中执行代码的机制.当向一个线程插入一个USER APC时,如果线程进入alertab ...
- Golang的文件处理方式-常见的读写
在 Golang 语言中,文件使用指向 os.File 类型的指针来表示的,也叫做文件句柄.注意,标准输入 os.Stdin 和标准输出 os.Stdout ,他们的类型都是 *os.File 哟.在 ...
- mysql数据库的还原及常见问题解决
例如:需要还原的数据库脚本文件为test.sql,脚本中已包含数据库的创建,test.sql所在目录为/home 1.常用source命令 进入mysql数据库控制台,如mysql -uroot -p ...