简单参数传递

简单参数传递是指:

  • 传递单个基本类型参数,数字类型、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. SpringBoot日记——SpringMvc自动配置与扩展篇

    为了让SpringBoot保持对SpringMVC的全面支持和扩展,而且还要维持SpringBoot不写xml配置的优势,我们需要添加一些简单的配置类即可实现: 通常我们使用的最多的注解是: @Bea ...

  2. java学习(四)修饰符、运算符、循环结构、分支结构

    修饰符 一般是放在定义类,方法,变量的最前端 访问控制修饰符 修饰符 当前类 同一包内 子孙类 其他包 public Y Y Y Y protected Y Y Y N default Y Y N N ...

  3. vue组件--TagsInput

    简介 TagsInput 是一种可编辑的输入框,通过回车或者分号来分割每个标签,用回退键删除上一个标签.用 vue 来实现还是比较简单的. 先看效果图,下面会一步一步实现他. 注:以下代码需要vue- ...

  4. LintCode——A+B问题

    A+B问题:给出两个整数a和b,求他们的和,但不能使用+等数学运算符. 注意事项: 1.A与B是32位整数 2.可使用位运算符 样例:如果 a=1 并且 b=2,返回3 一.非递归 public cl ...

  5. 关于spring boot 使用 mybatis plus INSERT的时候id报错

    mybatis plus 在INSERT的时候会默认自动设置插入id 我当时数据库采用的id自增. 在使用插入语句的时候并没有set  ID 但是它默认给了一大串 更改mybatis plus全局配置 ...

  6. Linux常用压缩解压命令

    tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...

  7. Python 3 利用 Dlib 19.7 进行人脸检测

    0. 引言 / Overview 介绍 Dlib 中基于 HOG,Histogram of Oriented Gradients / 方向梯度直方图 实现 Face Detect / 人脸检测 的两个 ...

  8. 微信小程序自定义 tabbar

    一定的需求情况下,无法使用小程序原生的 tabbar 的时候,需要自行实现一个和 tabbar 功能一模一样的自制组件. 查阅了海量的博客和文档之后,亲自踩坑.总结了三种在不使用微信小程序原生 tab ...

  9. linux的date命令使用指定时间的加减方法与异常

    在一般网页里,date命令减时间方法为: date -d '-100 days' 我的需求是,在指定时间上减8小时.按一般理解来看,命令写成如下样子(有异常错误的写法): date -d " ...

  10. python 拾遗

    三引号 可以当做多行字符串使用.在类或者方法中用的时候,可以当做docstrings来使用.具体的规则为: 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行 ...