Mybatis系列第5篇:Mapper接口多种方式传参详解、原理、源码解析

本文详细介绍了Mybatis中Mapper接口传参的各种方式,包括传递单个参数、Map参数、Java对象参数、多个参数以及使用ResultHandler作为参数。通过实例展示了不同参数类型在Mapper XML中的引用方式,并分析了多参数处理的原理和源码。同时,文章提到了参数处理的注意事项,推荐使用@Param注解以提高代码的稳定性和可读性。
摘要由CSDN通过智能技术生成

Mybatis系列目标:从入门开始开始掌握一个高级开发所需要的Mybatis技能。

这是mybatis系列第5篇。

主要内容

本篇详解mapper接口传参的各种方式。

  • 传递一个参数

  • 传递一个Map参数

  • 传递一个javabean参数

  • 多参数中用@param指定参数名称

  • java编译中参数名称的处理

  • mapper接口传参源码分析

  • 传递1个Collection参数

  • 传递1个List参数

  • 传递1个数组参数

  • mybatis对于集合处理源码分析

  • ResultHandler作为参数的用法

本篇文章的案例在上一篇chat03模块上进行开发,大家可以到文章的尾部获取整个mybatis系列的案例源码。

mybatis系列的文章前后都是有依赖的,请大家按顺序去看,尽量不要跳着去看,这样不会出现看不懂的情况,建议大家系统化的学习知识,基础打牢,慢慢才能成为高手。

使用mybatis开发项目的中,基本上都是使用mapper接口的方式来执行db操作,下面我们来看一下mapper接口传递参数的几种方式及需要注意的地方。

传递一个参数

用法

Mapper接口方法中只有一个参数,如:

UserModel getByName(String name);

Mapper xml引用这个name参数:

#{任意合法名称}

如:#{name}、#{val}、${x}等等写法都可以引用上面name参数的值

案例

创建UserModel类,如下:


       
       
       
  1. package com.javacode2018.chat03.demo4.model;
  2. import lombok.*;
  3. /**
  4.  * 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!
  5.  */
  6. @Getter
  7. @Setter
  8. @NoArgsConstructor
  9. @AllArgsConstructor
  10. @Builder
  11. @ToString
  12. public class UserModel {
  13.     private Long id;
  14.     private String name;
  15.     private Integer age;
  16.     private Double salary;
  17.     private Integer sex;
  18. }

创建Mapper接口UserMapper,如下:


       
       
       
  1. package com.javacode2018.chat03.demo4.mapper;
  2. import com.javacode2018.chat03.demo4.model.UserModel;
  3. import java.util.List;
  4. import java.util.Map;
  5. /**
  6.  * 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!
  7.  */
  8. public  interface UserMapper {
  9.      /**
  10.      * 通过name查询
  11.      *
  12.      * @param name
  13.      * @return
  14.      */
  15.     UserModel getByName(String name);
  16. }

注意上面有个getByName方法,这个方法传递一个参数。

创建Mapper xml文件UserMapper.xml,mybatis-series\chat03\src\main\resources\com\javacode2018\chat03\demo4\mapper目录创建UserMapper.xml,如下:


       
       
       
  1. <?xml version= "1.0" encoding= "UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC  "-//mybatis.org//DTD Mapper 3.0//EN"
  3.          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace= "com.javacode2018.chat03.demo4.mapper.UserMapper">
  5.     <!-- 通过name查询 -->
  6.     < select id= "getByName" resultType= "com.javacode2018.chat03.demo4.model.UserModel">
  7.         <![CDATA[
  8.         SELECT * FROM t_user WHERE name = #{value} LIMIT  1
  9.         ]]>
  10.     </ select>
  11. </mapper>

上面有个getByName通过用户名查询,通过#{value}引用传递进来的name参数,当一个参数的时候#{变量名称}中变量名称可以随意写,都可以取到传入的参数。

创建属性配置文件,mybatis-series\chat03\src\main\resources目录创建jdbc.properties,如下:


       
       
       
  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql: //localhost:3306/javacode2018?characterEncoding=UTF-8
  3. jdbc.username=root
  4. jdbc.password=root123

上面是我本地db配置,大家可以根据自己db信息做对应修改。

创建mybatis全局配置文件,mybatis-series\chat03\src\main\resources\demo4目录创建mybatis-config.xml,如下:


       
       
       
  1. <?xml version= "1.0" encoding= "UTF-8" ?>
  2. <!DOCTYPE configuration
  3.         PUBLIC  "-//mybatis.org//DTD Config 3.0//EN"
  4.          "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.     <!-- 引入外部jdbc配置 -->
  7.     <properties resource= "jdbc.properties"/>
  8.     <!-- 环境配置,可以配置多个环境 -->
  9.     <environments  default= "demo4">
  10.         <environment id= "demo4">
  11.             <!-- 事务管理器工厂配置 -->
  12.             <transactionManager  type= "JDBC"/>
  13.             <!-- 数据源工厂配置,使用工厂来创建数据源 -->
  14.             <dataSource  type= "POOLED">
  15.                 <property name= "driver" value= "${jdbc.driver}"/>
  16.                 <property name= "url" value= "${jdbc.url}"/>
  17.                 <property name= "username" value= "${jdbc.username}"/>
  18.                 <property name= "password" value= "${jdbc.password}"/>
  19.             </dataSource>
  20.         </environment>
  21.     </environments>
  22.     <mappers>
  23.         < package name= "com.javacode2018.chat03.demo4.mapper"/>
  24.     </mappers>
  25. </configuration>

上面通过properties的resource属性引入了jdbc配置文件。

package属性的name指定了mapper接口和mapper xml文件所在的包,mybatis会扫描这个包,自动注册mapper接口和mapper xml文件。

创建测试用例Demo4Test,如下:


       
       
       
  1. package com.javacode2018.chat03.demo4;
  2. import com.javacode2018.chat03.demo4.mapper.UserMapper;
  3. import com.javacode2018.chat03.demo4.model.UserModel;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9. import org.junit.Before;
  10. import org.junit.Test;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.util.HashMap;
  14. import java.util.List;
  15. import java.util.Map;
  16. /**
  17.  * 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!
  18.  */
  19. @Slf4j
  20. public class Demo4Test {
  21.     private SqlSessionFactory sqlSessionFactory;
  22.     @Before
  23.     public void before() throws IOException {
  24.  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值