mybatis系列笔记(4)---输入输出映射
来源:互联网 发布:淘宝魔镜插件下载 编辑:程序博客网 时间:2024/06/08 05:14
输入输出映射
通过parameterType制定输入参数类型 类型可以是简单类型(int String)也可以是POJO本身 或者包装类
1输入映射
关于输入简单类型和pojo本身的我就不写了,因为比较简单,下面我主要举一个包装类的例子:
使用包装类POJO将复杂的查询条件封装到POJO中
1 //当你继承user属性后,你就可以在user的基础上添加自己的属性了2 public class UserCustomer extends User {3 4 //用户的基本信息5 //可以扩展用户的信息6 //其他信息7 }
查询条件封装的类
1 public class UserQueryVo { 2 3 //这里包装需要查询的条件 4 5 private UserCustomer userCustomer; 6 7 public UserCustomer getUserCustomer() { 8 return userCustomer; 9 }10 11 public void setUserCustomer(UserCustomer userCustomer) {12 this.userCustomer = userCustomer;13 }
UserMapper.xml
1 <!-- 2 #{userCustomer.sex} 取出pojo对象 中性别的属性值3 ${userCustomer.username}取出pojo中 用户的名称4 -->5 <select id="findUserList" parameterType="com.study.model.UserQueryVo" resultType="com.study.model.UserCustomer">6 select * from user where user.sex=#{userCustomer.sex} and user.username like '%${userCustomer.username}%'7 </select
UserMapper.java
//用户综合信息查询 public List<UserCustomer> findUserList(UserQueryVo userQueryVo) throws Exception;
测试代码
1 @Test 2 public void testFindUserList() throws Exception{ 3 SqlSession sqlSession =sqlSessionFactory.openSession(); 4 //创建UserMapper 对象 MyBatis自动生成代理对象 5 UserMapper userMapper =sqlSession.getMapper(UserMapper.class); 6 7 //创建包装对象 设置查询条件 8 UserQueryVo userQueryVo =new UserQueryVo(); 9 10 UserCustomer userCustomer =new UserCustomer();11 userCustomer.setSex("1");12 userCustomer.setUsername("小明");13 userQueryVo.setUserCustomer(userCustomer);14 15 //完成查询16 List<UserCustomer> list =userMapper.findUserList(userQueryVo);17 System.out.println(list);18 }
2.输出映射
(1)resultType
使用resultType进行输出映射的时候 只有查询出来的列名和pojo 对应的属性名完全一致 才可以映射
如果查询出来的列名和pojo中的属性完全不一致 没有创建pojo对象
如果查询出来的列名和pojo中的属性只有部分一致 ,就会创建pojo对象 ,不一致的属性值为null
举例:查询用户总人数
mapper.xml
1 <!-- 7综合查询 -->2 <select id="findUserCount" parameterType="com.guigu.model.UserQueryVo" resultType="int">3 select count(*) from user where user.sex=#{userCustomer.sex} and user.username like '%${userCustomer.username}%'4 </select>
mapper.java
public int findUserCount(UserQueryVo userQueryVo);
测试代码
@Test public void testFindUserCount() throws Exception{ SqlSession sqlSession =sqlSessionFactory.openSession(); //创建UserMapper 对象 MyBatis自动生成代理对象 UserMapper userMapper =sqlSession.getMapper(UserMapper.class); //创建包装对象 设置查询条件 UserQueryVo userQueryVo =new UserQueryVo(); UserCustomer userCustomer =new UserCustomer(); userCustomer.setSex("1"); userCustomer.setUsername("小明"); userQueryVo.setUserCustomer(userCustomer); int count =userMapper.findUserCount(userQueryVo); System.out.println(count); }
在输出参数中,不论你返回的是单个对象还是对象的集合,在resulttype中都只需要写该对象的全名称就可以了
(2)resultMap
resultMap到底做什么用的呢?下面我来举个例子:
比如有下面的mapper.xml配置
<!-- mapper执行语句 --> <!-- #{userCustomer.sex} 取出pojo对象 中性别的属性值 ${userCustomer.username}取出pojo中 用户的名称 --> <select id="findUserList" parameterType="com.guigu.model.UserQueryVo" resultType="com.guigu.model.UserCustomer"> select id id_,username username_,birthday birthday_,address from user where user.sex=#{userCustomer.sex} and user.username like '%${userCustomer.username}%' </select>
那么运行的输出结果:会发现只有地址能够完成赋值,而其它因为采用别名无法赋值:
得出结论:
如果查询出来的列名和pojo中的属性完全不一致 没有创建pojo对象
如果查询出来的列名和pojo中的属性只有部分一致 ,就会创建pojo对象 ,不一致的属性值为null
上面的问题那如何解决,其实也很简单就是配置resultMap:
<!-- type resultMap最终映射的java对象类型 可以使用别名,因为本来是要写类的全名称,这里输入的就是别名 id 对resultMap唯一的标识符,这里的id要和下面的resultMap中的内容一致 --> <resultMap type="user" id="userResultMap"> <!-- id表示查询结果集中唯一的标识 主键 column 查询出来的列名 property type pojo中对应的属性名 --> <id column="id_" property="id"/> <!-- result对普通名的映射 column 查询出来的列名 property type pojo中对应的属性名 --> <result column="username_" property="username"/> <result column="birthday_" property="birthday"/> </resultMap> <!-- 配置结果集类型 --> <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap"> select id id_,username username_,birthday birthday_,address from user where id=#{value} </select>
总结:
使用resultType 进行输出映射 只有查询出来的列名 和pojo中的属性名一致的时候才可以映射成功 。
如果查询出来的列名和pojo属性名不一致 可以通过定义一个resultMap对列名和pojo属性之间做一个映射。
本文就讲到这里,欢迎大家多多指点,哪里需要修正或者补充,欢迎留言,谢谢!
- mybatis系列笔记(4)---输入输出映射
- mybatis系列笔记(4)---输入输出映射
- mybatis框架(4)---输入输出映射
- mybatis 输入输出映射
- mybatis中输入输出映射
- mybatis-03-输入输出映射
- 5、MyBatis输入输出映射
- Mybatis-Mapper.xml输入输出映射
- Mybatis-Mapper.xml输入输出映射
- Mybatis总结(5)---Mybatis输入输出映射
- J2EE系列之MyBatis学习笔记(四)-- mybatis关系映射(一对一映射)
- J2EE系列之MyBatis学习笔记(五)-- mybatis关系映射(一对多映射)
- MyBatis Review——输入输出映射
- Mybatis深入了解(四)----输入输出映射
- Mybatis深入了解(四)----输入输出映射
- MyBatis(三)配置文件,输入输出映射,动态SQL
- Mybatis的输入输出映射和全局配置文件
- Mybatis输入输出映射及动态sql
- 通过DVWA学习反射型XSS漏洞
- 51Nod 1212 无向图最小生成树
- URL类和HttpUrlConnection
- 最透彻的关于“随机数种子”和“伪随机数”的产生原理
- tomcat配置虚拟路径
- mybatis系列笔记(4)---输入输出映射
- 对JQuery在循环中绑定事件的问题理解
- sdutacm-Pots
- Mac搭建自己的IntelliJ IDEA授权服务器,自定义用户名激活JetBrains IDE
- ftrace的使用
- 原型模式
- 使用朴素贝叶斯分类器进行文档分类
- 机器学习[1]_调用sklearn中的RF算法
- 欢迎使用CSDN-markdown编辑器