mybatis的mapper参数传递
简单参数传递
简单参数传递是指:
- 传递单个基本类型参数,数字类型、String
- 传递多个基本类型参数
parameterType 属性可以省略;
传递单个基本类型参数
- SQL语句中参数的引用名称并不需要和接口中的参数名称相同,如selectActorById元素的where语句改为 where actor_id=#{abc} 也能够得到正确的结果;
Actor selectActorById(Long id);
<select id="selectActorById" resultType="canger.study.chapter04.bean.Actor">
select actor_id as id, first_name as firstName ,last_name as lastName
from actor
where actor_id=#{abc}
</select>
Actor actor = mapper.selectActorById(1L)
传递布尔类型参数
待续
传递多个基本类型参数
- 使用map进行参数传递
Boolean insertActorByMap(Map map);
<insert id="insertActorByMap" parameterType="map">
insert into actor(first_name,last_name) values (#{firstName},#{lastName})
</insert>
Map<String,String> map = new HashMap<String, String>(){
{
put("firstName","James");
put("lastName","Harden");
}
};
Boolean result = mapper.insertActorByMap(map);
System.out.println(result);
- 通过param1、param2进行多参数引用(此时接口方法中的参数可以使用任意名称,SQL语句中使用 param1、param2进行引用)
Boolean insertActorByString(String var1,String var2);
<insert id="insertActorByString">
insert into actor(first_name,last_name) values (#{param1},#{param2})
</insert>
Boolean result = mapper.insertActorByString("James", "Harden");
System.out.println(result);
- 通过命名参数进行引用,通过使用@Parma注解,可以在SQL语句中使用命名参数引用,注意命名参数区分大小写
Boolean insertActorByParamString(@Param("firstName")String var1, @Param("lastName")String var2);
<insert id="insertActorByParamString">
insert into actor(first_name,last_name) values (#{firstName},#{lastName})
</insert>
Boolean result = mapper.insertActorByParamString("James", "Harden");
System.out.println(result)
- 命名参数和非命名参数混合使用,此时非命名参数只能采用 param1,param2...的方式使用,命名参数即能采用@Param指定名字也能使用 param1,param2...的方式进行引用
Boolean insertActorByMixedString(String var1, @Param("lastName")String var2);
<!--使用命名参数和非命名参数传递-->
<insert id="insertActorByMixedString">
insert into actor(first_name,last_name) values (#{param1},#{lastName})
</insert>
或者
<!--使用命名参数和非命名参数传递-->
<insert id="insertActorByMixedString">
insert into actor(first_name,last_name) values (#{param1},#{param2})
</insert>
自定义类型参数传递
- 传递单个自定义类型参数,定义用于传递参数的Bean,如 id=“insertActor”语句中的 canger.study.chapter04.bean.Actor,可以直接在SQL语句中使用Bean的属性名;
需要注意的是,如果此时采用命名参数(如@Param("actor"))传递单个自定义类型参数,则不能直接引用属性名,而需要采用级联引用(actor.firstName 或 param1.firstName)
Boolean insertActor(Actor actor);
<!--参数Bean-->
<insert id="insertActor" parameterType="canger.study.chapter04.bean.Actor">
insert into actor(first_name,last_name) values (#{firstName},#{lastName})
</insert>
Actor actor = new Actor("James","Harden");
Boolean result = mapper.insertActor(actor);
- 传递自定义参数和基本参数
这种情况和传递多个基本参数没有什么打的区别,唯一需要注意的是需要使用级联引用,才能使用自定义参数属性的值
集合类型参数传递
- 传递单个非命名集合参数
此时的引用规则如下:
- Set 类型参数的引用名为 collection
- List 类型参数的引用名为 collection 或 list
- Array 类型参数的引用名为 array
List<Actor> selectActorByIdList( List<Long> list);
List<Actor> selectActorByIdSet( Set<Long> set);
List<Actor> selectActorByIdArray( Long[] array);
<select id="selectActorByIdList" resultType="canger.study.chapter04.bean.Actor">
select actor_id as id, first_name as firstName ,last_name as lastName
from actor
where actor_id in
<foreach collection="list" item="actorId" index="index"
open="(" close=")" separator=",">
#{actorId}
</foreach>
</select> <select id="selectActorByIdSet" resultType="canger.study.chapter04.bean.Actor">
select actor_id as id, first_name as firstName ,last_name as lastName
from actor
where actor_id in
<foreach collection="collection" item="actorId" index="index"
open="(" close=")" separator=",">
#{actorId}
</foreach>
</select> <select id="selectActorByIdArray" resultType="canger.study.chapter04.bean.Actor">
select actor_id as id, first_name as firstName ,last_name as lastName
from actor
where actor_id in
<foreach collection="array" item="actorId" index="index"
open="(" close=")" separator=",">
#{actorId}
</foreach>
</select>
List<Actor> actors = mapper.selectActorByIdList(asList(1L, 2L, 3L));
System.out.println(actors);
actors =mapper.selectActorByIdSet(new HashSet<Long>(){
{
add(4L);
add(6L);
add(5L);
}
});
mapper.selectActorByIdArray(new Long[]{7L,8L,9L});
- 单个命名集合参数传递
此时默认名称 collection、list、array均失效,只能使用指定的名称或param1进行引用
- 引用集合中的单个元素,通过索引操作符 []进行引用
List<Actor> selectActorByIdList( @Param("actorList") List<Long> list);
<select id="selectActorByIdList" resultType="canger.study.chapter04.bean.Actor">
select actor_id as id, first_name as firstName ,last_name as lastName
from actor
where actor_id = #{actorList[0]}
</select>
- 集合参数和其他参数一起使用
无特殊之处
mybatis的mapper参数传递的更多相关文章
- MyBatis的Mapper文件的foreach标签详解
MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...
- Spring+SpringMVC+Mybatis大整合(SpringMVC采用REST风格、mybatis采用Mapper代理)
整体目录结构: 其中包下全部是采用mybatis自动生成工具生成. mybatis自动生成文件 <?xml version="1.0" encoding="UTF- ...
- 【SSM 8】spring集成Mybatis通用Mapper
上篇博客中介绍了关于Mybatis底层封装的思路问题,那么这篇博客,就介绍一下怎么引入通用的mapper插件. 备注:本项目通过maven管理 关键版本说明: spring:4.1.3.RELEASE ...
- 关于mybatis 的mapper namespace 作用及解析
因为语言惯性,大部分的namespace 在语言级别*来说是作为一种限定性标识来用,起到唯一或一类的标识.来看看语言(以PHP语言为例)上的namespace的作用实例 一.namespace 在PH ...
- Mybatis的mapper接口接受的参数类型
最近项目用到了Mybatis,学一下记下来. Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mappe ...
- Spring Boot MyBatis 通用Mapper插件集成
Mybatis在使用过程中需要三个东西,每张表对应一个XXMapper.java接口文件,每张表对应一个XXMapper.xml文件,每张表对应一个Entity的Java文件. 其中XXMappe ...
- 关于使用mybatis中mapper instrances,通过session另一种操作方式
String resource = "mybatis-config.xml"; InputStream inputStream = null; try { // 获取SqlSess ...
- Mybatis通用Mapper
极其方便的使用Mybatis单表的增删改查 项目地址:http://git.oschina.net/free/Mapper 优点? 不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表 ...
- mybatis的mapper接口代理使用的三个规范
1.什么是mapper代理接口方式? MyBatis之mapper代理方式.mapper代理使用的是JDK的动态代理策略 2.使用mapper代理方式有什么好处 使用这种方式可以不用写接口的实现类,免 ...
随机推荐
- JAVAWEB servlet验证登录时进行完全的非空判断防止空值登录
如果不进行完全的非空判断,那么对 "" 这种类型的空值就会导致直接登录 所以需要用下面的字符串处理方法对其进行判断 这样就可以防止空值登录了 容易出现的混淆错误: 这里的空值登录容 ...
- [BZOJ3745][COCI2015]Norma[分治]
题意 题目链接 分析 考虑分治,记当前分治区间为 \(l,r\) . 枚举左端点,然后发现右端点无非三种情况: 极大极小值都在左边; 有一个在左边; 极大极小值都在右边; 考虑递推 \(l\) 的同时 ...
- 巧用 Python 找工作(资料在文末)
前言 近年来 Python 之火大家都有感而知,那亲们知道北京的 Python 开发岗位.运维开发岗位招聘地域都是如何分布的吗?薪水如何?是否有前景等等,这些数据呢直接通过招聘信息来了解到企业用人是最 ...
- Linux之linux基础命令
一.命令分:内部命令.外部命令① 内部命令:是由 Shell解释器解释的② 外部命令:除了Shell解释器以外的命令③ 识别命令类型:type 命令字 二.命令一般组成格式: 命令字 [选项].. [ ...
- 使用CDN后配置nginx自定义日志获取访问用户的真实IP
问题描述: 新上线了一个项目,架构如下(简单画的理解就好): 问题是:负载前面加上CDN后负载这里无法获取客户的真实访问IP,只能过去到CDN的IP地址: 问题解决: 修改nginx日 ...
- 我是如何将页面加载时间从6S降到2S的?
写在前面 生活在信息爆炸的今天,我们每天不得不面对和过滤海量的信息--无疑是焦躁和浮动的,这就意味着用户对你站点投入的时间可能是及其吝啬的(当然有一些刚需站点除外). 如何给用户提供迅速的响应就显得十 ...
- tomcat 项目的搭建-【Linux】
- 琴声不等式--jensen
(来自百度百科) 1. 凹函数,不加权 2. 凹函数,加权 3. 凸函数,不加权 4. 凸函数,加权 应用 在EM算法Q函数的推导中,用到了第二个不等式(凹函数,加权)
- FICO(费埃哲)评分系统有什么优缺点?在国内的发展怎么样?
权威回答: FICO的优点很明显: 在美国数据库较全面.一般存储有最近7-10年的个人信用记录,包括银行信用.商业信用甚至保险等. 客观性.计算机自动完成评估工作,克服人为操作的失误. 快捷性.出结果 ...
- ReLU——Deep Sparse Rectifier Neural Networks
1. 摘要 ReLU 相比 Tanh 能产生相同或者更好的性能,而且能产生真零的稀疏表示,非常适合自然就稀疏的数据. 采用 ReLU 后,在大量的有标签数据下,有没有无监督预训练模型取得的最好效果是一 ...