目录


前言

通过 paramterType 指定输入参数类型,类型可以是 简单类型pojohashmap ,这里只讲究相对较难的 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 对列名和属性名之间,进行映射 ;

  1. 在映射关系中定义 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>
  2. 使用 resultMap 作为 statement 的输出映射类型 ;

    <!--如果 map 定义在其他映射关系文件中,则需要加上命名空间-->
    <select id="findUserByMap" parameterType="int" resultMap="userMap">
    SELECT id id_,sex sex_ from user where id = #{id}
    </select>
  3. mapper 接口中,定义方法,方法的返回值,是 **resultMap 中的 type 类型 ;

    public User findUserByMap(int id) throws Exception ;

(七)mybatis 的输入映射与输出映射的更多相关文章

  1. 【mybatis深度历险系列】mybatis中的输入映射和输出映射

    在前面的博文中,小编介绍了mybatis的框架原理以及入门程序,还有mybatis中开发到的两种方法,原始开发dao的方法和mapper代理方法,今天博文,我们来继续学习mybatis中的相关知识,随 ...

  2. Mybatis学习总结(四)——输入映射和输出映射

    在前面几篇文章的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...

  3. MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询

    一.输入映射和输出映射 1. parameterType(输入类型) 1.1 传递简单类型 <select id="getUserById" parameterType=&q ...

  4. 【MyBatis学习06】输入映射和输出映射

    在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...

  5. mybatis入门基础(四)----输入映射和输出映射

    一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询, ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6878529.html 前面有讲到Spring+SpringMVC+MyBatis深入学习及搭建(三)——My ...

  7. mybatis基础系列(二)——基础语法、别名、输入映射、输出映射

    增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...

  8. mybatis进阶--输入映射和输出映射

    我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型.那么这些类型都是怎么配置的呢?今天我们来一起学习下. 输入映 ...

  9. mybatis进阶--mapper输入映射和输出映射

    我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型.那么这些类型都是怎么配置的呢?今天我们来一起学习下. 输入映 ...

随机推荐

  1. PCIe - 那点点事

    各位看官,这是我拷贝过来的,作为学习笔记(本人对图比较感兴趣,你说我懒也行,上图,这个看着舒服易懂): 1. Wire, lane, link 啥关系 注: PCIe 每条lane有1个双向通道(一个 ...

  2. 为一台全新的电脑构建JavaEE开发环境

    1.开发以外的常用软件 2.下载各种资源(x64,2017年8月)JDKhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...

  3. SQL SERVER可重复执行建表、建字段语句

    /*问题:type in (N'U') 中的N和U是什么意思? 答案:N是指Unicode编码,防止乱码:U是指用户表*/IF NOT EXISTS (SELECT * FROM sys.object ...

  4. leveldb源码分析之Slice

    转自:http://luodw.cc/2015/10/15/leveldb-02/ leveldb和redis这样的优秀开源框架都没有使用C++自带的字符串string,redis自己写了个sds,l ...

  5. Prometheus HA详解

    Prometheus 横向扩展 当Exporter或者采集信息需要越来越多时就会考虑高可用,高可用优点不会因为集群中某个节点down而导致Prometheus不可用,可以让算力下沉; 缺点是A-Pro ...

  6. Java中常见的集合类比较

    Collection 是对象集合, Collection 有两个子接口 List 和 Set,List 可以通过下标 (1,2..) 来取得值,值可以重复,而 Set 只能通过游标来取值,并且值是不能 ...

  7. Docker容器数据券

    1.是什么? 2.能干嘛? 3.数据卷 ——容器内添加 方式一:直接命令添加 1).命令 2).在宿主机上新建并添加内容 3).查看容器内相应共享文件夹,发现宿主机的文件夹下发生变化,会同步到容器内的 ...

  8. 7 AOP

    AOP:Aspect Oriented Programming 面向切面编程.AOP是对面向对象编程的一种补充,在运行时动态地将代码切入到类的指定方法.指定位置的编程思想.将不同的方法的同一位置抽象成 ...

  9. 响应式css样式

    <div class="a"> 123 </div> @media(orientation:portrait) and (max-width:600px){ ...

  10. SQL-W3School-高级:SQL ALTER TABLE 语句

    ylbtech-SQL-W3School-高级:SQL ALTER TABLE 语句 1.返回顶部 1. ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.修改或删除列. ...