6.输入映射
通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、POJO的包装类型。
6.1 传递POJO的包装对象
6.1.1需求
完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其他信息,比如商品、订单的)。
6.1.2 定义包装类型POJO
针对上边需求,建议使用自定义的包装类型的POJO。
6.1.3 映射文件mapper.xml
在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)。
<!-- 用户信息的综合查询 #{userCustom.sex}:取出POJO包装对象中性别值 '${userCustom.username}':取出POJO包装对象中用户名称 --> <select id="findUserList" parameterType="com.xjs.mybatis.po.UserQueryVo" resultType="com.xjs.mybatis.po.UserCustom"> select * from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%' </select>
6.1.4 mapper.java(dao接口)
//用户信息的综合查询 public List<UserCustom> findUserList(UserQueryVo userQueryVo)throws Exception;
6.1.5 测试代码
//复杂查询 @Test public void testFindUserList() throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); //创建UserMapper(dao接口)对象,mybatis自动生成dao接口实现类的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //创建包装对象 ,设置查询条件 UserQueryVo userQueryVo=new UserQueryVo(); UserCustom userCustom=new UserCustom(); userCustom.setSex("1"); userCustom.setUsername("小明"); userQueryVo.setUserCustom(userCustom); //调用userMapper的方法 List<UserCustom> list = userMapper.findUserList(userQueryVo); sqlSession.close(); System.out.println(list); }
扩展类:
package com.xjs.mybatis.po; /** * 用户的扩展类 * @author hp * */ public class UserCustom extends User{ //可以扩展用户的信息 }
结果:
... DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f3a4b84] DEBUG [main] - ==> Preparing: select * from user where user.sex=? and user.username like '%小明%' DEBUG [main] - ==> Parameters: 1(String) DEBUG [main] - <== Total: 3 ... [User [id=16, username=张小明, sex=1, birthday=null, address=河南郑州], User [id=22, username=陈小明, sex=1, birthday=null, address=河南郑州], User [id=25, username=陈小明, sex=1, birthday=null, address=河南郑州]]