一、接口中只有一个参数

1.参数是基本类型or基本类型的包装类or字符串类型

这种情况下映射文件中#{}里的内容可以是任意的,你可以使用#{xxx} 或 #{abc} .....因为此时#{}相当于一个占位符。

public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<select id="getEmpById" resultType="com.xj.domain.Employee">
select * from employee where id = #{xxx}
</select>
</mapper>

映射文件

2.参数是对象类型

这种情况下直接通过 #{对象属性名} 即可取值。

public interface EmployeeMapper {
public void saveEmp();
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<insert id="saveEmp">
INSERT INTO employee(id,lastName,email,gender,d_id) values(#{id},#{lastName},#{email},#{gender},#{dId})
</insert>
</mapper>

映射文件

3.参数是Map类型

这种情况下可以直接跟据map的key进行取值。

public interface EmployeeMapper {
public Employee getEmp(Map<String,Object> map);
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<select id="getEmp" resultType="com.xj.domain.Employee">
SELECT * FROM employee WHERE id = #{id} AND lastName = #{lastName}
</select>
</mapper>

映射文件

4.参数是Conlection、数组类型的

方式一:使用mybatis默认提供的方式

这种情况下mybatis也会帮我们对参数进行特殊处理,mybtis同样把Conlection、数组类型的参数封装为Map,如果是Collection类型则Map的key为collection,如果是Array类型则Map的key为array。特殊的如List,他的key为list,但是由于List也属于Collection,所以key也可以用collection。

public interface EmployeeMapper {
public Employee getEmpById(List<Integer> ids);
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<select id="getEmpById" resultType="com.xj.domain.Employee">
select * from employee where id = #{list[0]}
</select>
</mapper>

映射文件

 方式二:使用@Param注解

我们可以在接口的参数上标注@Param注解,指定参数的名称,然后映射文件中就可以直接通过#{注解指定的参数名}进行取值

public interface EmployeeMapper {
public Employee getEmpById(@Param("idList") List<Integer> ids);
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<select id="getEmpById" resultType="com.xj.domain.Employee">
select * from employee where id = #{idList[0]}
</select>
</mapper>

映射文件

二、接口中有两个及两个以上参数

1.多个参数都是基本类型or基本类型的包装类orString类型

方式一:使用mybatis默认提供的方式

有多个参数时,mybatis会把这多个参数封装为Map类型,这个Map中的key为param1,param2,....,paramN。所以我们要取出第一个参数就可以用#{param1}取出,要取第N个参数就用#{paramN}。

public interface EmployeeMapper {
public Employee getEmp(String lastName,Integer id);
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<select id="getEmp" resultType="com.xj.domain.Employee">
SELECT * FROM employee WHERE id = #{param2} AND lastName = #{param1}
</select>
</mapper>

映射文件

方式二:使用@Param注解

我们可以在接口的参数上标注@Param注解,指定参数的名称,然后映射文件中就可以直接通过#{注解指定的参数名}进行取值

public interface EmployeeMapper {
public Employee getEmp(@Param("name") String lastName,@Param("id") Integer id);
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<select id="getEmp" resultType="com.xj.domain.Employee">
SELECT * FROM employee WHERE id = #{id} AND lastName = #{name}
</select>
</mapper>

映射文件

2.多个参数中既有对象类型,又有参数是基本类型or基本类型的包装类or字符串类型

public interface EmployeeMapper {
public Employee getEmp(@Param("id") Integer id,@Param("emp") Employee employee);
}

接口

<mapper namespace="com.xj.mapper.EmployeeMapper">
<select id="getEmp" resultType="com.xj.domain.Employee">
SELECT * FROM employee WHERE id = #{id} AND lastName = #{emp.lastName}
</select>
</mapper>

映射文件

Mybatis映射文件中的参数传递的更多相关文章

  1. Mybatis映射文件中#取值时指定参数相关规则

    Mybatis映射文件中#取值时指定参数相关规则 在#{}中,除了需要的数值外,还可以规定参数的一些其他规则. 例如:javaType,jdbcType,mode(存储过程),numericScale ...

  2. Mybatis映射文件中数据库表列名称和POJO成员域的联系

    下面是Mybatis的SQL映射文件. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...

  3. Mybatis映射文件中的标签的使用

    <foreach> <!-- foreach --> <delete id="delMulti" parameterType="java.u ...

  4. Mybatis映射文件

    Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...

  5. MyBatis映射文件的resultMap如何做表关联

    MyBatis的核心是其映射文件,SqlMap文件,里面配置了项目中用到了什么SQL语句,和数据库相关的逻辑都在这个映射文件里.顾名思义,映射文件就是对Java对象和SQL的映射.这里简单介绍一下映射 ...

  6. Mybatis --- 映射文件、参数处理、参数值的获取、select元素

    映射文件:指导着MyBatis如何进行数据库增删改查, 有着非常重要的意义:   - cache   命名空间的二级缓存配置 - cache-ref   其他命名空间缓存配置的引用. - result ...

  7. Mybatis映射文件的自动映射与手动映射问题

    Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...

  8. MyBatis映射文件1(增删改、insert获取自增主键值)

    增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...

  9. mybatis xml 文件中like模糊查询

    1.直接传参法 直接传参法,就是将要查询的关键字keyword,在代码中拼接好要查询的格式,如%keyword%,然后直接作为参数传入mapper.xml的映射文件中. 2.CONCAT()函数 My ...

随机推荐

  1. Nessus扫描器的使用

    目录 Nessus Scans Settings 一个基本扫描的建立 自定义扫描策略 Nessus的高级扫描方法 Nessus Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组 ...

  2. 删除自定义服务 寒江孤钓<<windows 内核安全编程>> 学习笔记

    书中第一章 成功启动first服务之后, 发现书中并没有介绍删除服务的方式, SRVINSTW工具中的移除服务功能,也无法找到我们要删除的服务, 于是,搜素了下,发现解决方法如下: 在cmd中输入 & ...

  3. 腾讯暑期 前后七面 + hr(已拿offer面经)

    以下是时间线 魔方 魔术师工作室 3.19 一面(120mins) c++ struct和union区别? 指针和引用的区别? 左值和右值? 字节对齐的作用? 什么情况下需要自定义new? mallo ...

  4. 关于MDI多文档程序的一些思考

    MDI程序的框架 客户窗口是一个预定义的窗口类(MDICLIENT),它是框架窗口的子窗口同时也是各个子文档窗口的父窗口.框架窗口和各个子文档窗口都是自定义的窗口类. MDI程序中的一些要点 窗口中的 ...

  5. opencv——机器视觉检测和计数

    引言 在机器视觉中,有时需要对产品进行检测和计数.其难点无非是对于产品的图像分割. 由于之前网购的维生素片,有时候忘了今天有没有吃过,就想对瓶子里的药片计数...在学习opencv以后,希望实现对于维 ...

  6. [bug] CDH报错:cloudera-scm-server dead but pid file exists

    参考 https://blog.csdn.net/levy_cui/article/details/51243335

  7. linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。

    linux自动化交互脚本expect详解  更新时间:2020年10月21日 10:13:20   作者:lendsomething     这篇文章主要介绍了linux自动化交互脚本expect的相 ...

  8. 【转载】在Linux系统下用dd命令制作ISO镜像U盘启动盘

    #### 将U盘插入USB接口 #umount /dev/sdb* #dd if=/iso存放路径/XXX.iso of=/dev/sdb bs=1M ##### [转载]在Linux系统下用dd命令 ...

  9. Ubuntu20.04 网络配置

    Ubuntu20.04 网络配置 设置 ROOT 密码 先设置 root 密码,后面直接使用 root 用户操作 it@it:~$ sudo passwd root [sudo] password f ...

  10. Docker Swarm(十一)生产环境使用的一些建议

    一.Docker Swarm上的容器选择 并非所有服务都应该部署在Swarm集群内.数据库以及其他有状态服务就不适合部署在Swarm集群内. 理论上,你可以通过使用labels将容器部署到特定节点上, ...