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代理方式有什么好处 使用这种方式可以不用写接口的实现类,免 ...
随机推荐
- CI/CD系列
一.CI/CD系列 什么是CI/CD(译) Docker与CI/CD(转) Docker和CI/CD实战 二.Git 三.GitLab
- REVIT个人学习笔记——1.简介及熟悉界面
此贴并非教学,主要是自学笔记,所述内容只是些许个人学习心得的记录和备查积累,难以保证观点正确,也不一定能坚持完成. 如不幸到访,可能耽误您的时间,也难及时回复,贴主先此致歉.如偶有所得,相逢有缘,幸甚 ...
- 什么是Gradle
一.什么是Gradle 简单的说,Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译.打包等过程.我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建ap ...
- 使用云负载时将http的请求转发至https时报错:“ERR_TOO_MANY_REDIRECTS”!
问题描述: 新业务正式环境部署,使用云负载(有http监听也有https监听)在我向我的 Web 服务器添加重定向逻辑后,我的网站停止工作,并且我收到错误 ERR_TOO_MANY_REDIRECTS ...
- win10系统安装docker注意事项
首先要确保win10系统支持 hyper-v 技术. 然后按照官网的流程下载,安装,基本上不会出什么问题.安装好之后使用,需要进行以下几个操作 access denied问题的解决 按win+R,输入 ...
- 零基础学python之函数与模块(附详细的代码和安装发布文件过程)
代码重用——函数与模块 摘要:构建函数,创建模块,安装发布文件,安装pytest和PEP 8插件,确认PEP8兼容性以及纠错 重用代码是构建一个可维护系统的关键. 代码组是Python中对块的叫法. ...
- yocto-sumo源码解析(十): ProcessServer.idle_commands
这一节开始介绍ProcessServer.idle_commands,前面我们知道ProcessServer.main就是不停调用idle_commands()以获取可用的套接字描述符或者是文件描述符 ...
- JS模块化样例
var fn_pageBtn = (function(){ var m1 = function(){ alert(1); }; var m2 = function(){ alert(2); }; re ...
- [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
废话不多说 直接上图这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红外 ...
- Docker入门与实践之 Dockerfile 语法详解
一.Dockerfile 概述 Dockerfile是docker程序的解释脚本文件,Dockerfile 是一条一条的指令,Docker程序将dockerfile中的一条条指令编译成Linux可执行 ...