下面说说关于mapper.xml文件中的输入映射
我们看一下之前为User配置的mapper文件UserMapper.xml:
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
SELECT LAST_INSERT_ID()
insert into user(username,birthday,sex,address) value(#{username},#{birthday,jdbcType=DATE},#{sex},#{address})
delete from user where id=#{id}
update user set username=#{username},birthday=#{birthday,jdbcType=DATE},sex=#{sex},address=#{address}
where id=#{id}
在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中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)。
在UserMapper类中定义综合查询方法:
//用户管理的Dao接口
public interface UserMapper {
//用户信息综合查询
public List findUserList(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的方法
List users=userMapper.findUserList(userQueryVo);
for (int i = 0; i UserCustom user=(UserCustom)users.get(i);
System.out.println(user.getId()+":"+user.getUsername());
}
}
测试结果:
1:张三
4:张三丰
输出日志:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 13994297.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.Connection@d58939]
DEBUG [main] - ==> Preparing: select * from user where user.sex=? and user.username like '%张三%'
DEBUG [main] - ==> Parameters: 男(String)
DEBUG [main] -
传递HashMap与此类似,就不再赘述
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net