MyBatis-参数传递
单个参数
- 可以接受基本类型,对象类型,集合类型的值。
- MyBatis 可直接使用这个参数,不需要经过任何处理。
多个参数
- 任意多个参数,都会被 MyBatis 重新包装成一个 Map 传入。
- Map 的 key 是
param1,param2…,值就是参数的值。
如下将给出一个示例,新建一个 CustomerMappter 接口。
/**
* @author BNTang
*/
public interface CustomerMappter {
Customer queryCustomerById(Integer id, String name);
}
修改 CustomerMapper.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="top.it6666.mapper.CustomerMappter">
<select id="queryCustomerById" resultType="top.it6666.domain.Customer">
SELECT *
FROM `customer`
WHERE cust_id = #{param1}
AND cust_name = #{param2}
</select>
</mapper>
psvm 代码如下所示。
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
CustomerMappter customerMappter = sqlSession.getMapper(CustomerMappter.class);
// 5.执行 customerMappter 对象执行查询
Customer customer = customerMappter.queryCustomerById(1, "鲁班");
System.out.println(customer);
// 6.提交事务
sqlSession.commit();
// 7.释放资源
sqlSession.close();
}
}
@param 注解
- 可以为参数使用
@Param注解来起一个名字。 - MyBatis 就会将这些参数封装进 Map 中,key 就是我们自己通过
@Param指定的名字。
修改 CustomerMappter 接口。

/**
* @author BNTang
*/
public interface CustomerMappter {
Customer queryCustomerById(@Param("cust_id") Integer id, @Param("cust_name") String name);
}
修改 CustomerMapper.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="top.it6666.mapper.CustomerMappter">
<select id="queryCustomerById" resultType="top.it6666.domain.Customer">
SELECT *
FROM `customer`
WHERE cust_id = #{cust_id}
AND cust_name = #{cust_name}
</select>
</mapper>
psvm 代码同上。
POJO
当这些参数属于我们业务 POJO 时,我们直接传递 POJO。
修改 CustomerMappter 接口。

/**
* @author BNTang
*/
public interface CustomerMappter {
void insertCustomer(Customer customer);
}
紧接着修改 CustomerMapper.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="top.it6666.mapper.CustomerMappter">
<insert id="insertCustomer">
INSERT INTO `customer` (cust_name, cust_profession, cust_phone, email)
VALUES (#{cust_name}, #{cust_profession}, #{cust_phone}, #{email})
</insert>
</mapper>
修改 psvm 代码如下所示。

/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
CustomerMappter customerMappter = sqlSession.getMapper(CustomerMappter.class);
// 5.执行 SqlSession 对象执行查询
Customer customer = new Customer();
customer.setCust_name("BNTang");
customer.setCust_phone("18819457812");
customer.setEmail("303158130@qq.com");
customerMappter.insertCustomer(customer);
// 6.提交事务
sqlSession.commit();
// 7.释放资源
sqlSession.close();
}
}
Map
我们也可以封装多个参数为 Map,直接传递。
修改 CustomerMappter 接口。

/**
* @author BNTang
*/
public interface CustomerMappter {
Customer queryCustomerById(Map<String, Object> map);
}
紧接着修改 CustomerMapper.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="top.it6666.mapper.CustomerMappter">
<select id="queryCustomerById" resultType="top.it6666.domain.Customer">
SELECT *
FROM `customer`
WHERE cust_id = #{cust_id}
AND cust_name = #{cust_name}
</select>
</mapper>
修改 psvm 代码如下所示。

/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
CustomerMappter customerMappter = sqlSession.getMapper(CustomerMappter.class);
// 5.执行 customerMappter 对象执行查询
Map<String, Object> map = new HashMap<>();
map.put("cust_id", 1);
map.put("cust_name", "鲁班");
Customer customer = customerMappter.queryCustomerById(map);
System.out.println(customer);
// 6.提交事务
sqlSession.commit();
// 7.释放资源
sqlSession.close();
}
}
参数传递内部源码分析
TODO

浙公网安备 33010602011771号