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
类,如下:
-
package com.javacode2018.chat03.demo4.model;
-
import lombok.*;
-
/**
-
* 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!
-
*/
-
@Getter
-
@Setter
-
@NoArgsConstructor
-
@AllArgsConstructor
-
@Builder
-
@ToString
-
public class UserModel {
-
private Long id;
-
private String name;
-
private Integer age;
-
private Double salary;
-
private Integer sex;
-
}
创建Mapper接口UserMapper
,如下:
-
package com.javacode2018.chat03.demo4.mapper;
-
import com.javacode2018.chat03.demo4.model.UserModel;
-
import java.util.List;
-
import java.util.Map;
-
/**
-
* 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!
-
*/
-
public
interface UserMapper {
-
/**
-
* 通过name查询
-
*
-
* @param name
-
* @return
-
*/
-
UserModel getByName(String name);
-
}
注意上面有个getByName方法,这个方法传递一个参数。
创建Mapper xml文件UserMapper.xml
,mybatis-series\chat03\src\main\resources\com\javacode2018\chat03\demo4\mapper
目录创建UserMapper.xml
,如下:
-
<?xml version=
"1.0" encoding=
"UTF-8" ?>
-
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
-
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
<mapper namespace=
"com.javacode2018.chat03.demo4.mapper.UserMapper">
-
<!-- 通过name查询 -->
-
<
select id=
"getByName" resultType=
"com.javacode2018.chat03.demo4.model.UserModel">
-
<![CDATA[
-
SELECT * FROM t_user WHERE name = #{value} LIMIT
1
-
]]>
-
</
select>
-
</mapper>
上面有个getByName通过用户名查询,通过#{value}引用传递进来的name参数,当一个参数的时候
#{变量名称}
中变量名称可以随意写,都可以取到传入的参数。
创建属性配置文件,mybatis-series\chat03\src\main\resources
目录创建jdbc.properties
,如下:
-
jdbc.driver=com.mysql.jdbc.Driver
-
jdbc.url=jdbc:mysql:
//localhost:3306/javacode2018?characterEncoding=UTF-8
-
jdbc.username=root
-
jdbc.password=root123
上面是我本地db配置,大家可以根据自己db信息做对应修改。
创建mybatis全局配置文件,mybatis-series\chat03\src\main\resources\demo4
目录创建mybatis-config.xml
,如下:
-
<?xml version=
"1.0" encoding=
"UTF-8" ?>
-
<!DOCTYPE configuration
-
PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
-
"http://mybatis.org/dtd/mybatis-3-config.dtd">
-
<configuration>
-
<!-- 引入外部jdbc配置 -->
-
<properties resource=
"jdbc.properties"/>
-
<!-- 环境配置,可以配置多个环境 -->
-
<environments
default=
"demo4">
-
<environment id=
"demo4">
-
<!-- 事务管理器工厂配置 -->
-
<transactionManager
type=
"JDBC"/>
-
<!-- 数据源工厂配置,使用工厂来创建数据源 -->
-
<dataSource
type=
"POOLED">
-
<property name=
"driver" value=
"${jdbc.driver}"/>
-
<property name=
"url" value=
"${jdbc.url}"/>
-
<property name=
"username" value=
"${jdbc.username}"/>
-
<property name=
"password" value=
"${jdbc.password}"/>
-
</dataSource>
-
</environment>
-
</environments>
-
<mappers>
-
<
package name=
"com.javacode2018.chat03.demo4.mapper"/>
-
</mappers>
-
</configuration>
上面通过properties的resource属性引入了jdbc配置文件。
package属性的name指定了mapper接口和mapper xml文件所在的包,mybatis会扫描这个包,自动注册mapper接口和mapper xml文件。
创建测试用例Demo4Test
,如下:
-
package com.javacode2018.chat03.demo4;
-
import com.javacode2018.chat03.demo4.mapper.UserMapper;
-
import com.javacode2018.chat03.demo4.model.UserModel;
-
import lombok.extern.slf4j.Slf4j;
-
import org.apache.ibatis.io.Resources;
-
import org.apache.ibatis.session.SqlSession;
-
import org.apache.ibatis.session.SqlSessionFactory;
-
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
import org.junit.Before;
-
import org.junit.Test;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.util.HashMap;
-
import java.util.List;
-
import java.util.Map;
-
/**
-
* 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!
-
*/
-
@Slf4j
-
public class Demo4Test {
-
private SqlSessionFactory sqlSessionFactory;
-
@Before
-
public void before() throws IOException {
-