mybatis使用注意的细节
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使用注意的细节的更多相关文章
- Mybatis学习的一些细节
一.mybatis 基本配置 最近几天一直在学习mybatis,看了一些源码,本文讲述mybatis的一些基本配置和基本的用法和注意到一些细节.个人时间和精力有限,本文属于流水账类型,不成体系,算是自 ...
- mybatis不可忽略的细节
自我总结,欢迎拍砖! 目的:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类. 原因:当查询的字段为空值时,mybatis会返回null,用基础 ...
- Mybatis需要注意的细节
mybatis第二篇 1.${}和#{}的区别 1.#在传参的时候,会自动拼接单引号:$不能拼接单引号; 2.$传参时,一般不支持jdbcType指定类型的写法;#则可以;如: #{name,jd ...
- mybatis的一些小细节
Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. ...
- IntelliJ IDEA 2017版 spring-boot2.0.4+mybatis 自动部署的细节问题
一.加载pom依赖包 <!--spring-boot开发热部署--> <dependency> <groupId>org.springframework.boot& ...
- MyBatis中的特殊符号[20160713]
今天中午回到工位已经是12:20多了,没有时间睡觉了,本想着还能提前开始,结果看了点新闻之后,又是12:40了,所以新闻坚决不能看,执行力. 今天主要记录一下MyBatis中的特殊符号的问题,这个问题 ...
- 6、SpringBoot+Mybatis整合------参数传递
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis/tree/7892801d804d2060774f3720f8 ...
- 图解Mybatis框架原理及使用
1.前言 努力学习完ssm框架之后,终于也成功的把三大框架的使用以及配置文件细节忘得一干二净.为了努力捡起来以及方便今后的复习,决定写一篇博客记录一下. 本博客的所有分析都是在持久层接口以及接口中的方 ...
- mybatis框架的第二天
一.mybatis的基础crud的操作 先在接口中,写对应的方法名称,返回类型,访问符. 之后在映射配置文件中,写具体的实现 二.mybati中crud的细节 1.模糊查询 这是接口中 这是xml中 ...
随机推荐
- 2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数
/** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...
- MAC信息摘要
MAC(Message Authentication Code ,消息认证码算法)是含有密钥散列函数算法,兼容MD和SHA算法的特性,并在此基础上加入了密钥.因此,MAC也称为HMAC. ...
- Spring MVC列表多选框
以下示例显示如何在使用Spring Web MVC框架的表单中使用列表框(Listbox).首先使用Eclipse IDE来创建一个WEB工程,实现一个让用户可选择自己所善长的技术(多选)的功能.并按 ...
- 什么是 AJAX?
AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行 ...
- WPF-数据转换
有时我们展现的数据,需要进行转换,比如如果一个学生的成绩过了60,我们显示一个Pass的图片. XAML: <Window x:Class="DeepXAML.MainWindow&q ...
- (转)txt读写 操作封装
[code]csharpcode: using UnityEngine; using System.Collections.Generic; using System.IO; using System ...
- 【BZOJ2969】矩形粉刷 概率+容斥
[BZOJ2969]矩形粉刷 Description 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以 ...
- EasyNVR浏览器无插件直播在Linux系统下将录像文件与EasyNVR可执行文件分离运行的方案
问题背景 在工控机上运行EasyNVR,WEB访问出现设备在线,但是视频没有快照和无法正常直播: 问题原因分析 通过上工控机发现是由于磁盘空间被占满导致的软件运行收到影响. 解决问题分析 由于录像文件 ...
- C#关于AutoResetEvent的使用介绍----修正
说明 之前在博客园看到有位仁兄发表一篇关于AutoResetEvent介绍,看了下他写的代码,看上去没什么问题,但仔细看还是能发现问题.下图是这位仁兄代码截图. 仁兄博客地址:http://www.c ...
- alert弹窗方法1
1.代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv=&quo ...