1、mybatis的官方文档地址

mybatis – MyBatis 3 | 简介

2、其他技巧:

2.1 如何在代码中拼接 like %%

  1. <![CDATA[ and strategy_name like CONCAT('%',CONCAT(#{query.strategyName,jdbcType=VARCHAR},'%')) ]]>

其他如果只需要一个%,酌情使用CONCAT

2.2 数据库比较时日期的错误操作

2.2.1 异常情况:

  1. 1DAO中对属性赋值,为Date类型;
  2. @Override
  3. public List<DataStatistic> getSumarry(DataStatisticQuery query) {
  4. List<String> tableSuffixList = Arrays.asList(VirtualOrderUtils.createStringArray());
  5. Map<String, Object> map = Maps.newHashMap();
  6. map.put("tabCode", query.getTabCode());
  7. map.put("tableSuffixList", tableSuffixList);
  8. map.put("orderTimeBegin", query.getOrderTimeBegin());
  9. map.put("orderTimeEnd", query.getOrderTimeEnd());
  10. return this.selectList(this.getNameSpace("getSumarry"), map);
  11. }
  12. 2、保证数据库中数据一致。XML 文件中如下使用:
  13. 2.1、查不到数据
  14. <sql id="WHERE_ORDER_TIME_BEGIN_AND_END">
  15. <if test="orderTimeBegin != null">
  16. <![CDATA[ and order_time >= #{orderTimeBegin,jdbcType=DATE}]]>
  17. </if>
  18. <if test="orderTimeEnd != null">
  19. <![CDATA[ and order_time <= #{orderTimeEnd,jdbcType=DATE}]]>
  20. </if>
  21. </sql>
  22. 而实际上:数据库中该字段的类型是:【`order_time` datetime DEFAULT NULL COMMENT '下单时间',】
  23. 2.2、可以查到数据
  24. <sql id="WHERE_ORDER_TIME_BEGIN_AND_END">
  25. <if test="orderTimeBegin != null">
  26. <![CDATA[ and order_time >= #{orderTimeBegin}]]>
  27. </if>
  28. <if test="orderTimeEnd != null">
  29. <![CDATA[ and order_time <= #{orderTimeEnd}]]>
  30. </if>
  31. </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支持的类型:

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使用技巧、总结、注意事项的更多相关文章

  1. MySQL索引类型总结和使用技巧以及注意事项

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable ...

  2. [MySQL]索引类型总结和使用技巧以及注意事项

    一.普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式: 1.创建索引 CREATE INDEX [indexName] ON [mytable] ([column][(length)] ...

  3. 【转】mysql索引使用技巧及注意事项

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  4. 使用css时的一些技巧及注意事项

    <!-- TITLE: 使用css时的一些技巧及注意事项 --> # CSS推荐书写顺序: 1. 位置属性(position, top, right, z-index, display, ...

  5. MySQL索引类型总结和使用技巧以及注意事项 (转)

      在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表:  代码如下: CREATE TABLE mytable(   ID INT NOT NULL,    us ...

  6. JavaScript一些基础技巧和注意事项,你了解这些吗?

    总结了一些JavaScript在开发编码中的使用技巧,如有不对,欢迎指正. 一.JavaScript在HTML和XHTML的使用 使用<script>元素有两种方式:直接在页面中嵌入Jav ...

  7. mysql索引使用技巧及注意事项

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  8. 使用mysql索引技巧及注意事项

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  9. 高并发秒杀系统--mybatis整合技巧

    mybatis实现DAO接口编码技巧 1.XML文件通过namespace命名空间关联接口类 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD ...

随机推荐

  1. 【题解】Image Perimeters-C++

    题目Description给出一张由"x"和".“组成的矩阵.每个"x"可以向上下左右及两个斜对角进行连通,请问由某个点开始的"x”,它所连 ...

  2. 037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)

    #!/bin/bash#设置变量定义需要添加到防火墙规则的服务和端口号#使用 firewall-cmd --get-services 可以查看 firewall 支持哪些服务 service=&quo ...

  3. SQL Server遇到的错误和有用的tools

    1.The target principal name is incorrect.  Cannot generate SSPI context. 检查IIS的profile,可能是密码错误 2.The ...

  4. tinymce实现ctrl+v粘贴word图片并上传

    tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...

  5. java实现文件夹上传

    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

  6. 数据库学习之三--Select查询及运算符

    一.SELECT语句:用于从表中选取数据:语法如下: 1. 列查询: SELECT 列名称1,  列名称2 FROM 表名称: 2. 查询所有数据: SELECT * FROM 表名称: 3. 使用A ...

  7. Public model for matrix

    以下是可以加减乘除(就是乘逆矩阵啦)以及求若干次幂.行列式和逆的矩阵模板. 欢迎大家指正其中可能存在的错误(只验证了求逆的正确性). 顺便提一下这种复杂度低于定义式求逆的方法,来自于我的高等代数书,思 ...

  8. elasticsearch sql插件配置(5.0及以上版本)

    github官方参考地址:https://github.com/NLPchina/elasticsearch-sql/ 采用 git + node 的方式,所以安装前需要先安装好node,node n ...

  9. Golang文件操作整理

    基本操作 文件创建 创建文件的时候,一定要注意权限问题,一般默认的文件权限是 0666 关于权限的相关内容,具体可以参考鸟叔p141 这里还是再回顾下,文件属性 r w x r w x r w x,第 ...

  10. 数据库groub by分组后,把多行数据合并成一行数据(Oracle、Postgres)

    关键字 row_number() over (partition by)   例如,下面的数据, 这是按照name分组后,展示property值. 我们想得到这样的值; 第一步:将每一组的proper ...