04_Mybatis输入\出映射
1. 输入映射
通过paramterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类、
1.1 传递pojo的包装对象
1.需求
完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其它信息,比如商品、订单的)
2.定义包装类型pojo
针对上边需求,建议使用自定义的包装类型的pojo,在包装类型的pojo中将复杂的查询条件包装进去。
/*** Description: 查询时,将多个对象的属性集合在此类* User: jiatp* Date:2019/9/3 0003 下午 4:39
*/public class UserQueryVo {//用户的查询条件private UserCustom userCustom;//传入多个idprivate List<Integer> ids;//可以包装其它信息,商品,订单 等public List<Integer> getIds() {return ids;}public void setIds(List<Integer> ids) {this.ids = ids;}public UserCustom getUserCustom() {return userCustom;}public void setUserCustom(UserCustom userCustom) {this.userCustom = userCustom;}
}
3.mapper.xml
在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)。
<select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom">select * from user where user.sex=#{userCustom.sex} and user.name like '%${userCustom.username}%'</select>
4.mapper.java
// 用户信息的综合查询public List<UserCustom> findUserList(UserQueryVo userQueryVo);
5.测试代码
public class MybatisThird {private SqlSessionFactory sqlSessionFactory;@Beforepublic void setUp() throws IOException {//mybatis配置文件String resource = "com/mybatis/config/sqlMapConfig.xml";//得到配置文件流InputStream resourceAsStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);}//综合查询,用户的所有信息@Testpublic void findUserList(){SqlSession sqlSession = sqlSessionFactory.openSession();UserQueryVoMapper mapper = sqlSession.getMapper(UserQueryVoMapper.class);//创建包装对象UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();// userCustom.setSex("2");userCustom.setUsername("李四");userQueryVo.setUserCustom(userCustom);//调用查询List<UserCustom> userList = mapper.findUserList(userQueryVo);for(UserCustom us:userList) {System.out.println(us);}}}
2. 输出映射
2.1 resultType
** 使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。**
如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。
1. 输出简单类型
如:用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页。
mapper.xml
<!--用户信息查询总数parameterType:指定输入参数与findUserList一样--><select id="findUserCount" parameterType="UserQueryVo" resultType="int">select count(1) from user where user.sex=#{userCustom.sex} and user.name like '%${userCustom.username}%'
</select>
mapper.java
//用户信息总数查询public int findUserCount(UserQueryVo userQueryVo);
测试代码
//查询用户信息的总数@Testpublic void findUserCount(){SqlSession sqlSession = sqlSessionFactory.openSession();UserQueryVoMapper mapper = sqlSession.getMapper(UserQueryVoMapper.class);//创建包装对象UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();userCustom.setSex("2");userCustom.setUsername("李四");userQueryVo.setUserCustom(userCustom);//调用查询int count = mapper.findUserCount(userQueryVo);System.out.println(count);}
总结:查询出来的结果集只有一行且一列,可以使用简单类型进行输出映射。
2.输出pojo对象和pojo列表**
不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。在mapper.java指定的方法返回值类型不一样:
1、输出单个pojo对象,方法返回值是单个对象类型
//根据用户id查询用户信息,使用resultMap输出public User findUserByIdResultMap(int id);
2、输出pojo对象list,方法返回值是List<Pojo>
//根据用户名查询用户列表public List<User> findUserByName(String name) throws Exception;
生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用).
2.2 resultMap
resultMap使用方法
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
1、定义resultMap
2、使用resultMap作为statement的输出映射类型
将下边的sql使用User完成映射
SELECT id id_,username username_ FROM USER WHERE id=#{value}
User类中属性名和上边查询列名不一致。
mapper.xml
<!--使用resultMap进行输出映射1.定义resultMap type:resultMap最终映射的java对象类型,可以使用别名;id:resultMap的标识--><resultMap id="UserResultMap" type="user"><!--id表示查询结果集中唯一标识--><id column="id_" property="id"/><result column="username_" property="username"/></resultMap><!--resultMap:即是前面定义的resultMap的id--><select id="findUserByIdResultMap" parameterType="int" resultMap="UserResultMap">select id id_,username username_ from user where id=#{id}</select>
总结:
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo****属性名之间作一个映射关系。
04_Mybatis输入\出映射相关推荐
- java字节输入与字符输入_Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...
- Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D ...
- MaBatis(5)输入/输出映射
本次全部学习内容:MyBatisLearning 输入映射: 通过parameType指定输入参数的类型,类型可以是简单类型,hashmap,pojo等 传递pojo的包装对象 需求: 即使一个综合查 ...
- 实习笔记 —— MyBatis III (输入/输出映射)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记-- AOP开发II(AOP中Advice的类型) 实 ...
- 计算机输入出设备课件,输入输出设备-课件.ppt
输入输出设备-课件 计算机组成与系统结构--流水线技术 第10章 本章主要内容 输入输出设备概述 常用输入设备组成与运行原理 键盘 鼠标 常用输出设备组成与运行原理 显示器 打印机 输入输出设备概述 ...
- 计算机硬件输入出的设备,[计算机硬件及网络]第7章 输入 输出设备.ppt
[计算机硬件及网络]第7章 输入 输出设备 第7章 输入/输出设备 7.1 基础知识 7.2 键盘和鼠标 7.3 扫描仪 7.4 条形码扫描仪 7.5 键盘.鼠标及扫描仪的一般选购方法 7.6 实训案 ...
- 系统输入输入出设计相关知识介绍
1.输出设计 输出设计主要包括:确定输出内容.选择输出设备与介质.确定输出格式三个方面的内容. 确定输出内容:输出内容的设计首先要确定用户在使用信息方面的需求,然后设计输出信息的内容,包信息形式(括文 ...
- 计算机输入出设备课件,《电脑输入设备》PPT课件.ppt
<<电脑输入设备>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<电脑输入设备>PPT课件.ppt(31页珍藏版)>请在人人文库网上搜索. 1. ...
- 杰理之LINEIN 左右声道与 DACLR 输入出的注意【篇】
这部分请先读下本文档第 60 点. 如果设计时 LINEIN 的 R 声道进入,芯片是 DACL 输出,例如 AC6965E 是 DACL 输出的,那么在 LINEIN 下走模拟的是没有声音的,需要用 ...
最新文章
- CxImage图像处理类库
- 4Python全栈之路系列之Django模型
- table合并单元格colspan和rowspan
- HDU 1398 Square Coins
- fast rcnn,faster rcnn使用cudann加速问题
- 网易云信SDK V3.2.0版发布啦!
- centos系统设置局域网静态IP
- LeetCode 66. 加一
- OmniMarkupPreview 插件404 error on preview
- springmvc拦截器配置
- OpenCV训练SVM模型并预测的完整过程
- Spring多资源文件properties的配置
- SSH连接linux时,长时间不操作就断开的解决方案(增强版)
- linux用户开机.bashrc,验证linux shell在启动时会自动执行用户主目录下的.bashrc脚本...
- 爱情九十一课,留下好的你
- JavaScript案例分享+复盘——小米闪购界面
- docker本地仓库(本地镜像仓库)环境搭建
- Panoramic Photography
- 解决 Android Bitmap 合成图片时 PNG透明背景 为黑色的问题
- Redis缓存过期和淘汰策略