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代理方式有什么好处 使用这种方式可以不用写接口的实现类,免 ...
随机推荐
- PHP Rabbitmq 报错Broken pipe
fwrite(): send of 13 bytes failed with errno=32 Broken pipe fwrite(): send of 21 bytes failed with e ...
- 对RedisTemplate接口二次封装成自定义工具接口
开发过程中,经常使用redis数据库存储. 一般都是依赖注入redisTemplate,然后调用redisTemplate的api进行接口功能实现. 但是,如果对redisTemplate自带的API ...
- centos7 安装jenkenis
安装Java 看到当前系统Java版本的命令: java -version 如果显示Java版本号,说明已经正确安装,如果显示没有该命令,需要安装Java: sudo yum install java ...
- Netty源码分析第4章(pipeline)---->第2节: handler的添加
Netty源码分析第四章: pipeline 第二节: Handler的添加 添加handler, 我们以用户代码为例进行剖析: .childHandler(new ChannelInitialize ...
- 用shell实现bat批处理的pause命令-追加改进
我参考了这个文章:用shell实现bat的pause http://linux-wiki.cn/wiki/zh-hans/%E7%94%A8shell%E5%AE%9E%E7%8E%B0bat%E7% ...
- 基本数据结构 -- 栈简介(C语言实现)
栈是一种后进先出的线性表,是最基本的一种数据结构,在许多地方都有应用. 一.什么是栈 栈是限制插入和删除只能在一个位置上进行的线性表.其中,允许插入和删除的一端位于表的末端,叫做栈顶(top),不允许 ...
- 服务器与Linux操作系统基础原理
1.服务器 2.Linux操作系统 1. 服务器 服务器定义与分类: 定义:一个管理资源并为用户提供服务的计算机软件. 按应用分类:通常分为文件服务器(能使用户在其它计算机访问文件),数据库服务器和应 ...
- RabbitMQ理论部分
概念 queue 队列 exchange 交换机 bind 绑定 channel 通道 一个发送消息流程包含上述四个概念.消息经过channel传递给exc ...
- 使用Python批量修改数据库执行Sql文件
由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些 ...
- Daily Scrumming* 2015.10.25(Day 6)
一.总体情况总结 1.UI今日总结:初步设计了社团详情界面 2.后端今日总结:讨论并设计数据库,表内容,属性和相互联系等,并在rails的activeRecord和activeModel中实现,同时设 ...