(七)mybatis 的输入映射与输出映射
目录
前言
通过 paramterType 指定输入参数类型,类型可以是 简单类型、pojo、hashmap ,这里只讲究相对较难的 pojo ;
输入映射 — — 传递 pojo 包装类型 (复杂查询 )
需求 :完成用户信息的综合查询,需要 传入查询条件(可能包括用户信息、其他信息,比如:商品信息、订单信息) ;
例子:查询所有买了 i7-4710 cpu 电脑的用户信息 ;
针对上面需求,建议使用自定义的 包装类型 pojo ,在包装类型的 pojo 中将复杂的 查询条件 包装起来 ;将需要查询的条件,作为包装类型的属性,封装进去 ;
后面学到逆向工程的时候,我们就不再需要手写 User 这样的类,直接使用工具根据数据库的字段,自动生成 ;
假如,生成的类,我们需要做一些改动,我们推荐写一个增强类继承生成的类,在增强类中改动 ;
事例代码:
public class UserStrengthen extends User {
//.... 要增强的内容
}
说明:其实复杂查询,也很好理解,就是当查询条件比较复杂的时候,我们需要对其进行封装,这里我们将复杂条件封装到 UserQueryVo 中 ,需要对该类,设置 get 、set 方法,为了mybatis 使用反射获取其属性 ;
UserQueryVo 类 :
/**
* 封装复杂查询条件
* @author An
*/
public class UserQueryVo {
/**
* 封装用户条件
*/
private UserStrengthen userStrengthen ;
public UserStrengthen getUserStrengthen() {
return userStrengthen;
}
public void setUserStrengthen(UserStrengthen userStrengthen) {
this.userStrengthen = userStrengthen;
}
//.... 封装其他条件,比如商品订单
}
在映射文件中,写出 sql 语句,参数类型就是我们封装的 UserQueryVo 类 ;
<!--复杂查询-->
<select id="findUsersByVo" parameterType="userQueryVo" resultType="userStrengthen">
SELECT * from user where sex = #{userStrengthen.sex} and name like '%${userStrengthen.name}%'
</select>
在 mapper 代理接口中,构建出方法:
/**
* 复杂查询
* @param userQueryVo
* @return
* @throws Exception
*/
public List<UserStrengthen> findUsersByVo(UserQueryVo userQueryVo) throws Exception ;
输出映射 — — resultType
输出映射可以,可以输出 简单类型,pojo 对象,pojo 列表、hashmap ;
其中输出 pojo 对象 可改为输出 hashmap,其中字段名是 key ,名字值是 value ;输出 pojo 列表 可改为输出 List<HashMap> ;
说明:在使用 resultType 进行输出映射的时候,只要查询出来的列名和 pojo 对象的属性名一致的时候,该列结果才会得到映射; 如果查询结果的列,没有一列 得到映射,则不会创建 pojo 对象,但是 只要有一列 得到映射,就会创建 pojo 对象 ;
输出映射 — — resultMap
mybatis 中完成高级输出结果映射的东西,完成 一对多、多对多、多对一 ;(以后会讲)
简单的使用场景
如果查询出来的列名和 pojo 对象的属性名不一致,那么可以通过定义一个 resultMap 对列名和属性名之间,进行映射 ;
在映射关系中定义
resultMap<!--定义一个 resultMap-->
<!--
id 是 resultMap 的唯一标识 ;
type 是 resultMap 最终要将查询的列名和谁进行映射的类
-->
<resultMap id="userMap" type="user">
<!--对 结果集中的唯一标识,例如主键,使用 id标签 进行映射-->
<id column="id_" property="id"></id>
<!--其他属性使用 result 进行映射-->
<result column="sex_" property="sex"></result>
</resultMap>使用
resultMap作为statement的输出映射类型 ;<!--如果 map 定义在其他映射关系文件中,则需要加上命名空间-->
<select id="findUserByMap" parameterType="int" resultMap="userMap">
SELECT id id_,sex sex_ from user where id = #{id}
</select>在
mapper接口中,定义方法,方法的返回值,是 **resultMap中的type类型 ;public User findUserByMap(int id) throws Exception ;
(七)mybatis 的输入映射与输出映射的更多相关文章
- 【mybatis深度历险系列】mybatis中的输入映射和输出映射
在前面的博文中,小编介绍了mybatis的框架原理以及入门程序,还有mybatis中开发到的两种方法,原始开发dao的方法和mapper代理方法,今天博文,我们来继续学习mybatis中的相关知识,随 ...
- Mybatis学习总结(四)——输入映射和输出映射
在前面几篇文章的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...
- MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询
一.输入映射和输出映射 1. parameterType(输入类型) 1.1 传递简单类型 <select id="getUserById" parameterType=&q ...
- 【MyBatis学习06】输入映射和输出映射
在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...
- mybatis入门基础(四)----输入映射和输出映射
一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询, ...
- Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6878529.html 前面有讲到Spring+SpringMVC+MyBatis深入学习及搭建(三)——My ...
- mybatis基础系列(二)——基础语法、别名、输入映射、输出映射
增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...
- mybatis进阶--输入映射和输出映射
我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型.那么这些类型都是怎么配置的呢?今天我们来一起学习下. 输入映 ...
- mybatis进阶--mapper输入映射和输出映射
我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型.那么这些类型都是怎么配置的呢?今天我们来一起学习下. 输入映 ...
随机推荐
- 7.26T3小游戏
小游戏 题目描述 有一个简单的小游戏.游戏的主人公是一个勇士,他要穿过一片黑森林,去 解救公主.黑森林的地图可以用一张 V 个点.E 条边的无向图来描述,起点是 1 号点,终点是 V 号点.勇士从起点 ...
- c语言 内存,可执行文件
c语言代码与可执行文件的映射关系 函数中的代码 存储在.text 段中 已初始化的全局变量 存储在.data段 未初始化的全局变量 存储在.bss段中 程序类型 映射到file header中 面试题 ...
- Ubuntu 14.04 用户操作
新建用户sudo adduser linuxidc 修改hosts文件sudo gedit /etc/hosts ubuntu修改主机名sudo gedit /etc/hostname 删除用户在ro ...
- django报错TypeRError:__init__() missing 1 required positional argument: 'on_delete'
在添加外键的时候,在括号里添加on_delete=models.CASCADE即可 on_delete=models.CASCADE是级联删除的意思,意思就是说当你更新或删除主键表,那外键表也会跟随一 ...
- Leetcode题目283.移动零(简单)
题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原 ...
- 设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。
原创,转载请注明出处.https://www.cnblogs.com/yangf428/p/11254370.html 天勤例题[2-1]: 设顺序表va中的数据元素递增有序.试写一算法,将x插入到顺 ...
- 第11组 Alpha事后诸葛亮
第11组 Alpha事后诸葛亮 组长博客链接 https://www.cnblogs.com/xxylac/p/11924846.html 设想和目标 我们的软件要解决什么问题?是否定义得很清楚? ...
- KVM——以桥接的方式搭建虚拟机网络配置
以桥接的方式搭建虚拟机网络,其优势是可以将网络中的虚拟机看作是与主机同等地位的服务器. 在原本的局域网中有两台主机,一台是win7(IP: 192.168.0.236),一台是CentOS7(IP: ...
- 记录Redis连接未正确释放,TCP连接过多,造成服务器上部分功能不可用和linux服务器内存一直增加问题
问题1 多人共享开发服务器(windows系统),我们小组有个程序,定时检测mongodb,redis,mysql连接是否正常,程序启动一段时间后,服务器管理人员找到我们说,我们的某个pid的程序把T ...
- ORACLE EXECUTE IMMEDIATE 小结
EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,E ...