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输入\出映射相关推荐

  1. java字节输入与字符输入_Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...

  2. Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter  B FileInputStream  C ObjectInputStream  D ...

  3. MaBatis(5)输入/输出映射

    本次全部学习内容:MyBatisLearning 输入映射: 通过parameType指定输入参数的类型,类型可以是简单类型,hashmap,pojo等 传递pojo的包装对象 需求: 即使一个综合查 ...

  4. 实习笔记 —— MyBatis III (输入/输出映射)

    系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记-- AOP开发II(AOP中Advice的类型) 实 ...

  5. 计算机输入出设备课件,输入输出设备-课件.ppt

    输入输出设备-课件 计算机组成与系统结构--流水线技术 第10章 本章主要内容 输入输出设备概述 常用输入设备组成与运行原理 键盘 鼠标 常用输出设备组成与运行原理 显示器 打印机 输入输出设备概述 ...

  6. 计算机硬件输入出的设备,[计算机硬件及网络]第7章 输入 输出设备.ppt

    [计算机硬件及网络]第7章 输入 输出设备 第7章 输入/输出设备 7.1 基础知识 7.2 键盘和鼠标 7.3 扫描仪 7.4 条形码扫描仪 7.5 键盘.鼠标及扫描仪的一般选购方法 7.6 实训案 ...

  7. 系统输入输入出设计相关知识介绍

    1.输出设计 输出设计主要包括:确定输出内容.选择输出设备与介质.确定输出格式三个方面的内容. 确定输出内容:输出内容的设计首先要确定用户在使用信息方面的需求,然后设计输出信息的内容,包信息形式(括文 ...

  8. 计算机输入出设备课件,《电脑输入设备》PPT课件.ppt

    <<电脑输入设备>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<电脑输入设备>PPT课件.ppt(31页珍藏版)>请在人人文库网上搜索. 1. ...

  9. 杰理之LINEIN 左右声道与 DACLR 输入出的注意【篇】

    这部分请先读下本文档第 60 点. 如果设计时 LINEIN 的 R 声道进入,芯片是 DACL 输出,例如 AC6965E 是 DACL 输出的,那么在 LINEIN 下走模拟的是没有声音的,需要用 ...

最新文章

  1. CxImage图像处理类库
  2. 4Python全栈之路系列之Django模型
  3. table合并单元格colspan和rowspan
  4. HDU 1398 Square Coins
  5. fast rcnn,faster rcnn使用cudann加速问题
  6. 网易云信SDK V3.2.0版发布啦!
  7. centos系统设置局域网静态IP
  8. LeetCode 66. 加一
  9. OmniMarkupPreview 插件404 error on preview
  10. springmvc拦截器配置
  11. OpenCV训练SVM模型并预测的完整过程
  12. Spring多资源文件properties的配置
  13. SSH连接linux时,长时间不操作就断开的解决方案(增强版)
  14. linux用户开机.bashrc,验证linux shell在启动时会自动执行用户主目录下的.bashrc脚本...
  15. 爱情九十一课,留下好的你
  16. JavaScript案例分享+复盘——小米闪购界面
  17. docker本地仓库(本地镜像仓库)环境搭建
  18. Panoramic Photography
  19. 解决 Android Bitmap 合成图片时 PNG透明背景 为黑色的问题
  20. Redis缓存过期和淘汰策略

热门文章

  1. 迄今见过的最好的职业规划的文章
  2. dwz中jqGrid的主题变更
  3. 信号完整性(SI)电源完整性(PI)学习笔记(二十)传输线的串扰(四)
  4. 汉语计算机语言,汉语是唯一可用于计算机时代的语言!
  5. 【C语言】动态内存开辟的使用『malloc』
  6. win 10 读写EFI分区
  7. 有效提升网站关键词排名的优化技巧
  8. 2006德国世界杯完全赛程表
  9. 关于idea中提交svn时一直显示performing VCS refresh
  10. Ubuntu学习笔记6-ESP32接收并处理cmd_vel话题