上面有个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
,如下:
上面通过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个参数&