一、_parameter
- 参数列表只有一个参数时,_parameter为该参数。(可以用于判断传进来的对象是否为空)
- 参数列表有多个参数时,_parameter为参数列表对应的map,以参数名为键参数值为值。
(1)Mapper文件
<?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.wsh.mapper.UserMapper">
<resultMap id="EmployeeResult" type="Employee">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="deptId" column="dept_id"/>
</resultMap>
<select id="selectEmployeeList" resultMap="EmployeeResult">
select
*
from
employee
where
<if test="_parameter.get('arg0') == null">id = 1</if>
<if test="_parameter.get('arg1') != null">or id = 2</if>
</select>
</mapper>
(2)接口文件
public interface UserMapper {
public List<Employee> selectEmployeeList(Employee employee1, Employee employee2);
}
(3)JAVA程序
public void test() throws IOException {
//读取配置文件创建SqlSession工厂
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//利用SqlSession工厂创建SqlSession实例
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
//利用SqlSession创建代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<Employee> list = mapper.selectEmployeeList(null, new Employee());
for (Employee employee : list) {
System.out.println(employee.toString());
}
}finally {
sqlSession.close();
}
}
输出
2022-04-05 16:06:03,332 [main] DEBUG [com.wsh.mapper.UserMapper.selectEmployeeList] - ==> Preparing: select * from employee where id = 1 or id = 2
2022-04-05 16:06:03,358 [main] DEBUG [com.wsh.mapper.UserMapper.selectEmployeeList] - ==> Parameters:
2022-04-05 16:06:03,377 [main] DEBUG [com.wsh.mapper.UserMapper.selectEmployeeList] - <== Total: 2
Employee(id=1, name=张三, deptId=1, department=null)
Employee(id=2, name=李四, deptId=1, department=null)
二、_databaseId
- 当配置文件中开启了获取数据库厂商标识后,可以利用该参数获取出标识。
(1)Mybatis配置文件
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
(2)Mapper文件
<?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.wsh.mapper.UserMapper">
<resultMap id="EmployeeResult" type="Employee">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="deptId" column="dept_id"/>
</resultMap>
<select id="selectEmployeeList" resultMap="EmployeeResult">
select
*
from
employee
where
<if test="_databaseId == 'mysql'">id = 1</if>
<if test="_databaseId != 'mysql'">id = 2</if>
</select>
</mapper>
(3)接口文件
public interface UserMapper {
public List<Employee> selectEmployeeList();
}
(4)JAVA程序
public void test() throws IOException {
//读取配置文件创建SqlSession工厂
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//利用SqlSession工厂创建SqlSession实例
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
//利用SqlSession创建代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<Employee> list = mapper.selectEmployeeList();
for (Employee employee : list) {
System.out.println(employee.toString());
}
}finally {
sqlSession.close();
}
}
输出
2022-04-05 16:15:58,909 [main] DEBUG [com.wsh.mapper.UserMapper.selectEmployeeList] - ==> Preparing: select * from employee where id = 1
2022-04-05 16:15:58,935 [main] DEBUG [com.wsh.mapper.UserMapper.selectEmployeeList] - ==> Parameters:
2022-04-05 16:15:58,955 [main] DEBUG [com.wsh.mapper.UserMapper.selectEmployeeList] - <== Total: 1
Employee(id=1, name=张三, deptId=1, department=null)