简单参数传递

简单参数传递是指:

  • 传递单个基本类型参数,数字类型、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参数传递的更多相关文章

  1. MyBatis的Mapper文件的foreach标签详解

    MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...

  2. Spring+SpringMVC+Mybatis大整合(SpringMVC采用REST风格、mybatis采用Mapper代理)

    整体目录结构: 其中包下全部是采用mybatis自动生成工具生成. mybatis自动生成文件 <?xml version="1.0" encoding="UTF- ...

  3. 【SSM 8】spring集成Mybatis通用Mapper

    上篇博客中介绍了关于Mybatis底层封装的思路问题,那么这篇博客,就介绍一下怎么引入通用的mapper插件. 备注:本项目通过maven管理 关键版本说明: spring:4.1.3.RELEASE ...

  4. 关于mybatis 的mapper namespace 作用及解析

    因为语言惯性,大部分的namespace 在语言级别*来说是作为一种限定性标识来用,起到唯一或一类的标识.来看看语言(以PHP语言为例)上的namespace的作用实例 一.namespace 在PH ...

  5. Mybatis的mapper接口接受的参数类型

    最近项目用到了Mybatis,学一下记下来. Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mappe ...

  6. Spring Boot MyBatis 通用Mapper插件集成

    Mybatis在使用过程中需要三个东西,每张表对应一个XXMapper.java接口文件,每张表对应一个XXMapper.xml文件,每张表对应一个Entity的Java文件.   其中XXMappe ...

  7. 关于使用mybatis中mapper instrances,通过session另一种操作方式

    String resource = "mybatis-config.xml"; InputStream inputStream = null; try { // 获取SqlSess ...

  8. Mybatis通用Mapper

    极其方便的使用Mybatis单表的增删改查 项目地址:http://git.oschina.net/free/Mapper 优点? 不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表 ...

  9. mybatis的mapper接口代理使用的三个规范

    1.什么是mapper代理接口方式? MyBatis之mapper代理方式.mapper代理使用的是JDK的动态代理策略 2.使用mapper代理方式有什么好处 使用这种方式可以不用写接口的实现类,免 ...

随机推荐

  1. WPF中如何使用BusyIndicator

    一.下载dll:http://wpftoolkit.codeplex.com/releases/view/99072 下载之后将WPFToolkit引用到WPF项目下: 二.添加命名空间: xmlns ...

  2. (转载)jQuery判断checkbox是否选中的3种方法(个人用第二种方法)

    方法一: if ($("#checkbox-id")get(0).checked) {     // do something } 方法二: if($('#checkbox-id' ...

  3. 并发系列(四)-----CAS

    一 简介 保证Java中的原子操做方式有两种方式  1 加锁(可以理解悲观锁机制)  2 CAS(可以理解为乐观锁机制)  CAS全称是Compare and Swap 即比较并替换.在JDK中许多地 ...

  4. vue.js和vue-router和vuex快速上手知识

    vue.js和vue-router和vuex快速上手知识 一直以来,认为vue相比react而言,学习成本会更低,会更简单,但最近真正接触后,发现vue的各方面都有做一些客户化的优化,有一些亮点,但也 ...

  5. docker实现跨主机连接

    实验环境: centos7系统 host1:192.168.42.128 host2:192.168.42.129 dokcer容器跨主机连接 1.使用网桥实现跨主机容器连接 2.使用Open vSw ...

  6. 下一个时代的发展架构竟然是它!FaaaaaaaaS到底是个啥?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云serverless团队发表于云+社区专栏 导读:2018年7月6 - 7日,一年一度的技术圈盛会ArchSummit全球架构师 ...

  7. 01-numpy基础简介

    import numpy as np # ndarray ''' # 三种创建方式 1.从python的基础数据对象转化 2.通过numpy内置的函数生成 3.从硬盘(文件)读取数据 ''' # 创建 ...

  8. ifconfig命令详情

    基础命令学习目录首页 原文链接:https://blog.csdn.net/weixin_37886382/article/details/79716879 许多windows非常熟悉ipconfig ...

  9. xml配置文件特殊符号的处理方法

    2017.7.19遇到问题:偶然出现“认证失败,请重新登录”的现象   在xml中英文问号“?”是可以被正常解析的,但是以下这几种符号是不能正常解析的:分别是“&”.“<”.“>” ...

  10. 2-Fifth Scrum Meeting20151205

    任务安排 闫昊: 今日完成:设计本地数据库. 明日任务:请假.(最近代码写得多……很累……) 唐彬: 今日完成:ios客户端代码的了解. 明日任务:ios客户端代码的深度学习. 史烨轩: 今日完成: ...