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

上面有个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" ?>

上面通过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 {

//指定mybatis全局配置文件

String resource = “demo4/mybatis-config.xml”;

//读取全局配置文件

InputStream inputStream = Resources.getResourceAsStream(resource);

//构建SqlSessionFactory对象

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

this.sqlSessionFactory = sqlSessionFactory;

}

/**

* 通过map给Mapper接口的方法传递参数

*/

@Test

public void getByName() {

try (SqlSession sqlSession = this.sqlSessionFactory.openSession(true)😉 {

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

UserModel userModel = userMapper.getByName(“路人甲Java”);

log.info(“{}”, userModel);

}

}

}

注意上面的getByName方法,会调用UserMapper接口的getByName方法通过用户名查询用户信息,我们运行一下这个方法,输出如下:

44:55.747 [main] DEBUG c.j.c.d.mapper.UserMapper.getByName - ==>  Preparing: SELECT * FROM t_user WHERE name = ? LIMIT 1

44:55.779 [main] DEBUG c.j.c.d.mapper.UserMapper.getByName - ==> Parameters: 路人甲Java(String)

44:55.797 [main] DEBUG c.j.c.d.mapper.UserMapper.getByName - <==      Total: 1

44:55.798 [main] INFO  c.j.chat03.demo4.Demo4Test - UserModel(id=1, name=路人甲Java, age=30, salary=50000.0, sex=1)

这个案例中我们新增的几个文件结构如下:

传递一个Map参数

用法

如果我们需要传递的参数比较多,参数个数是动态的,那么我们可以将这些参数放在一个map中,key为参数名称,value为参数的值。

Mapper接口中可以这么定义,如:

List getByMap(Map<String,Object> map);

如我们传递:

Map<String, Object> map = new HashMap<>();

map.put(“id”, 1L);

map.put(“name”, “张学友”);

对应的mapper xml中可以通过#{map中的key}可以获取key在map中对应的value的值作为参数,如:

SELECT * FROM t_user WHERE id=#{id} OR name = #{name}

案例

下面我们通过map传递多个参数来按照id或者用户名进行查询。

com.javacode2018.chat03.demo4.mapper.UserMapper中新增一个方法,和上面UserMapper.xml中的对应,如下:

/**

* 通过map查询

* @param map

* @return

*/

List getByMap(Map<String,Object> map);

注意上面的方法由2个参数&

  • 29
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值