下面说说关于mapper.xml文件中的输入映射
我们看一下之前为User配置的mapper文件UserMapper.xml:在mapper.xml中我们通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型
上面的查询语句输入的都是一个查询参数,当我们输入多个查询参数时应当怎么操作呢?这就要用到POJO的包装对象把大量的查询参数包装在对象中传递给只能接收单个参数的Mapper操作方法了,看看如何来定义POJO包装对象1传递pojo的包装对象1.1需求完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其它信息,比如商品、订单的)1.2定义包装类型pojo针对上边需求,建议使用自定义的包装类型的pojo。在包装类型的pojo中将复杂的查询条件包装进去。写一个例子首先我们前面定义了一个User类对象,如果对象中的值要发生拓展,在源代码上改是不合适的(因为我们后期要使用工具自动生成User类,里面的东西建议 不要改动),这里我们创建一个User的拓展类UserCustom,继承自User类,我们下面包装查询条件时使用的是UserCustom,特此说 明。查询包装类UserQueryVo:package cn.edu.hpu.mybatis.PO;public class UserQueryVo { //在这里包装需要的查询条件 //用户查询条件 private UserCustom userCustom; public UserCustom getUserCustom() { return userCustom; } public void setUserCustom(UserCustom userCustom) { this.userCustom = userCustom; } //包装其他的查询条件,订单、商品 //......}
1.3mapper.xml
在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)。select * from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'
在UserMapper类中定义综合查询方法:
//用户管理的Dao接口public interface UserMapper { //用户信息综合查询 public ListfindUserList(UserQueryVo userQueryVo) throws Exception; ......}
之后进行测试:
//用户信息综合查询
@Test public void testFindUserList() throws Exception{ SqlSession sqlSession=sqlSessionFactory.openSession(); //创建UserMapper代理对象 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); //创建包装对象,设置查询条件 UserQueryVo userQueryVo=new UserQueryVo(); UserCustom userCustom=new UserCustom(); userCustom.setSex("男"); userCustom.setUsername("张三"); userQueryVo.setUserCustom(userCustom); //调用userMapper的方法 Listusers=userMapper.findUserList(userQueryVo); for (int i = 0; i < users.size(); i++) { UserCustom user=(UserCustom)users.get(i); System.out.println(user.getId()+":"+user.getUsername()); }}
测试结果:
1:张三4:张三丰