代码来自:MyBatis总结(十三)--参数处理_单个参数&多个参数&命名参数
本文内容来自尚硅谷
在MyBatis总结(十三)--参数处理_单个参数&多个参数&命名参数中多个参数时解决办法是通过在dao中使用注释给每个参数命名的方式来解决问题。下面提供更加好的更精确的方式来解决问题
目录
1如果入参是多个参数且都是业务逻辑的数据模型,则我们可以直接传入POJO
2如果入参是多个参数,且不是业务模型中的数据(及没有对应的POJO),不经常使用。这时传入map对象就可以了
3如果入参是多个参数且经常使用如分页操作,可以使用一个dto对象使
1如果入参是多个参数且都是业务逻辑的数据模型,则我们可以直接传入POJO
1.1Junit写法如下
public void test03() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
//测试添加
Employee employee = new Employee(null, "jerry4",null, "1");
mapper.addEmp(employee);
System.out.println(employee.getId());
openSession.commit();
}finally{
openSession.close();
}
}
1.2映射文件如下
<insert id="addEmp" databaseId="oracle">
<selectKey keyProperty="id" order="AFTER" resultType="Integer">
select EMPLOYEES_SEQ.currval from dual
</selectKey>
insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
values(employees_seq.nextval,#{lastName},#{email})
</insert>
2如果入参是多个参数,且不是业务模型中的数据(及没有对应的POJO),不经常使用。这时传入map对象就可以了
2.1Junit写法如下
@Test
public void test04() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("id", 2);
map.put("lastName", "Tom");
map.put("tableName", "tbl_employee");
Employee employee = mapper.getEmpByMap(map);
System.out.println(employee);
}finally{
openSession.close();
}
}
2.2dao文件如下
public Employee getEmpByMap(Map<String, Object> map);
2.3映射文件如下
<!-- public Employee getEmpByMap(Map<String, Object> map); -->
<select id="getEmpByMap" resultType="com.atguigu.mybatis.bean.Employee">
select * from ${tableName} where id=${id} and last_name=#{lastName}
</select>
3如果入参是多个参数且经常使用如分页操作,可以使用一个dto对象使
这里暂时不举例子