1.mybatis对sql执行后会对结果进行封装,如果没有返回任何记录,只是封装后的对象没有值,而对象并不为空null;

(这个问题疏忽坑了两次,在对返回数组结果进行判断的时候,我用的if(Array!=null) 结果是判断正确,应该if(Array.length!=0)做判断记录是否为空)

2.mapper的xml文件中,if<test="ids.length!=0  and ids!=null "> 这里的与运算是用的and

3.数组数据的绑定问题

在这里传进来的的参数是一个整型数组,collection中的参数就是"array",不能为其他值

 <select id="findSelectedItemsList" parameterType="Integer[]" resultType="ItemsCustom">
select * from item
<where>
<!-- 传递数组 -->
<if test="array!=null">
<foreach collection="array" index="index" item="item" open="and id in(" separator="," close=")">
#{item}
</foreach>
</if>
</where>
</select>

如果传进来的是一个pojo对象,对象中有一个数组属性ids,那么collection传进来的参数就必须是属性变量ids。

<insert id="createRelation" parameterType="com.xidian.ssm.po.Relation">
<if test="ids.length!=0 and ids!=null">
<foreach close="" collection="ids" index="index" item="ref_id" open="" separator=";">
insert into relation (id,ref_id) value(#{id,jdbcType=INTEGER},#{ref_id,jdbcType=INTEGER})
</foreach>
</if>
</insert>

4. 参数为String时的数据绑定问题

假设有下面一Dao接口方法

public Account findByAccountType (String type)throws DaoException;

对应的Mapper.xml

<select id="findByAccountType " parameterType="string" resultType="account">
select *
form account
<where>
<if test ="type != null">
type=#{type}
</if>
</where>
</select>

一般我们都是按这样的方式来写的,对于其他类型是没错的,但是如果为String的话会抛下面的异常:

There is no getter for property named 'type ' in 'class java.lang.String' 

因为MyBatis要求如果参数为String的话,不管接口方法的形参是什么,在Mapper.xml中引用时需要改变为_parameter才能识别 :

<select id="findByAccountType " parameterType="string" resultType="account">
select *
form account
<where>
<if test ="_parameter!= null">
type=#{_parameter}
</if>
</where>
</select>

5.对字符串参数进行是否相等 比较时的问题

错误:

<if test="_parameter == '1' ">
type=#{_parameter}
</if>

正确:

<if test='_parameter == "1" '>
type=#{_parameter}
</if>
 

mybatis使用注意的细节的更多相关文章

  1. Mybatis学习的一些细节

    一.mybatis 基本配置 最近几天一直在学习mybatis,看了一些源码,本文讲述mybatis的一些基本配置和基本的用法和注意到一些细节.个人时间和精力有限,本文属于流水账类型,不成体系,算是自 ...

  2. mybatis不可忽略的细节

    自我总结,欢迎拍砖! 目的:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类. 原因:当查询的字段为空值时,mybatis会返回null,用基础 ...

  3. Mybatis需要注意的细节

    mybatis第二篇 1.${}和#{}的区别 1.#在传参的时候,会自动拼接单引号:$不能拼接单引号; 2.$传参时,一般不支持jdbcType指定类型的写法;#则可以;如: ​ #{name,jd ...

  4. mybatis的一些小细节

    Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. ...

  5. IntelliJ IDEA 2017版 spring-boot2.0.4+mybatis 自动部署的细节问题

    一.加载pom依赖包 <!--spring-boot开发热部署--> <dependency> <groupId>org.springframework.boot& ...

  6. MyBatis中的特殊符号[20160713]

    今天中午回到工位已经是12:20多了,没有时间睡觉了,本想着还能提前开始,结果看了点新闻之后,又是12:40了,所以新闻坚决不能看,执行力. 今天主要记录一下MyBatis中的特殊符号的问题,这个问题 ...

  7. 6、SpringBoot+Mybatis整合------参数传递

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis/tree/7892801d804d2060774f3720f8 ...

  8. 图解Mybatis框架原理及使用

    1.前言 努力学习完ssm框架之后,终于也成功的把三大框架的使用以及配置文件细节忘得一干二净.为了努力捡起来以及方便今后的复习,决定写一篇博客记录一下. 本博客的所有分析都是在持久层接口以及接口中的方 ...

  9. mybatis框架的第二天

    一.mybatis的基础crud的操作 先在接口中,写对应的方法名称,返回类型,访问符. 之后在映射配置文件中,写具体的实现 二.mybati中crud的细节 1.模糊查询 这是接口中 这是xml中 ...

随机推荐

  1. Vim使用技巧(4) -- 命令行模式 【持续更新】

    基本保存,退出,帮助 :help //帮助 :w //保存 :q //退出 :wq //保存后退出 :q! //强制不保存退出 %s/a/b/g //将当前文件的a全部替换成b /abc //正向查找 ...

  2. 第一百七十节,jQuery,事件对象,event 对象,默认行为,冒泡

    jQuery,事件对象,event 对象,默认行为,冒泡 学习要点: 1.事件对象 2.冒泡和默认行为 JavaScript 在事件处理函数中默认传递了 event 对象,也就是事件对象.但由于浏览器 ...

  3. Android处理图片工具(转载)

    内容来源于http://www.cnblogs.com/TerryBlog/archive/2012/01/08/2316482.html package com.wireme.activity; i ...

  4. ios中的coredata

    本文转载至 http://blog.csdn.net/chen505358119/article/details/9334831 分类: ios2013-07-15 18:12 12449人阅读 评论 ...

  5. unison+inotify 同步web代码并排除指定目录不同步

    unison + inotify  实现web 数据双向同步   unison 是一款跨平台的文件同步对象,不仅支撑本地对本地同步,也支持通过SSH,RSH和Socket 等网络协议进行同步.unis ...

  6. 关于java后台如何接收xml格式的数据

    业务场景:用户发送下单请求,格式为xml格式,服务器接收数据完成下单,并返回结果给客户. 请求格式: <request> <head> <sign></sig ...

  7. (转)gethostbyname() -- 用域名或主机名获取IP地址

    struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.cn"等等.传出值, ...

  8. c#数据格式转换汇总

    时间差的公式,求出时间相差的转换成刻度值 DateTime endTime = , , , , , , , , , , , , ); TimeSpan temp = new TimeSpan(star ...

  9. 巨蟒python全栈开发linux之centos7

    1.crm项目部署回顾(小BOSS) crm部署 nginx+uwsgi+django+mysql nginx    前端 uwsgi+django     后端 mysql   数据支撑 crm是一 ...

  10. 《UNIX网络编程》 -- 第五章

    str_cli 和 str_echo 函数 需要先弄清楚 3.9 readn.writen 和 readline 函数 str_cli void str_cli(FILE *fp, int sockf ...