文档章节

【Mybatis框架】输出映射-resultType与resultMap

M
 Mysoft
发布于 2015/09/18 11:12
字数 1113
阅读 746
收藏 6

输出映射
接下来说说有关Mapper.xml配置文件中查询标签中关于返回值类型resultType与resultMap的一些内容

1.resultType
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。
只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

1.1输出简单类型
1.1.1需求
用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页。

1.1.2mapper.xml

<mapper namespace="cn.edu.hpu.mybatis.mapper.UserMapper">
    
    <!-- 用户信息综合查询 
    #{UserCustom.sex}取出包装对象中性别值
    ${UserCustom.username}取得pojo包装对象中用户名称
    -->
    <select id="findUserList" parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo" 
                                resultType="cn.edu.hpu.mybatis.PO.UserCustom">
        select * from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'
    </select>
    
    <!-- 用户信息综合查询总数 -->
    <select id="findUserCount" parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo" resultType="int">
        select count(*) from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'
    </select>
    ......
</mapper>

1.1.3mapper.java

//用户管理的Dao接口
public interface UserMapper {
    
    //用户信息综合查询
    public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;
    
    //用户信息综合查询总数
    public int findUserCount(UserQueryVo userQueryVo) throws Exception;
    ......
}

1.1.4测试代码

//用户信息综合查询总数
    @Test
    public void testFindUserCount() throws Exception{
        
        SqlSession sqlSession=sqlSessionFactory.openSession();
        
        //创建UserMapper代理对象
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        
        //创建包装对象,设置查询条件
        UserQueryVo userQueryVo=new UserQueryVo();
        UserCustom userCustom=new UserCustom();
        userCustom.setSex("男");
        userCustom.setUsername("张三");
        userQueryVo.setUserCustom(userCustom);
        
        //调用userMapper的方法
        int count=userMapper.findUserCount(userQueryVo);
        
        System.out.println("总数为:"+count);
    }

测试结果:
总数为:2


1.1.5小结
查询出来的结果集只有一行且一列,可以使用简单类型进行输出映射。(输出简单类型的要求)

1.2输出pojo对象和pojo列表

不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。
在mapper.java指定的方法返回值类型不一样:
(1)输出单个pojo对象,方法返回值是单个对象类型
 
(2)输出pojo对象list,方法返回值是List<Pojo>

生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用 ).

(3)输出hashmap
输出pojo对象可以改用hashmap输出类型,将输出的字段名称作为map的key,value为字段值。如果是集合,那就是list里面套了HashMap。

2.resultMap
mybatis中使用resultMap完成高级输出结果映射。

2.1resultMap使用方法
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

下面来进行实验,实验需求
2.2将下边的sql使用User完成映射
SELECT id id_,username username_ FROM USER WHERE id=#{value}

User类中属性名和上边查询列名不一致。

resultMap使用方法:(一下属性均定义在Mapper.xml映射文件中)
(1)定义resultMap

<!-- 定义resultType
将select id id_,username _username from user和User类中的属性做一个映射关系
    
type:resultMap最终所映射的Java对象类型,可以使用别名
id:对resultMap的唯一标识 
-->
<resultMap type="user" id="userResultMap">
    <!-- id表示查询结果集中唯一标识 
    column:查询出的列名
    property:type所指定的POJO中的属性名
    最终reslutMap对column和property做一个映射关系(对应关系)
    -->
    <id column="_id" property="id"/>
    <!-- 对普通列的映射定义 -->
    <result column="_username" property="username"/>
</resultMap>

(2)使用resultMap作为statement的输出映射类型

<!-- 使用resultMap进行输出映射 
    resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前面需要加namespace
    -->
<select id="findUserByResultMap" parameterType="int" resultMap="userResultMap">
    select id _id,username _username from user where id=#{value}
</select>

(3)mapper接口类中添加相应方法

//用户管理的Dao接口
public interface UserMapper {
    
    public User findUserByResultMap(int id) throws Exception;
    ......
}

测试:

@Test
public void testFindUserByResultMap() throws Exception{
        
    SqlSession sqlSession=sqlSessionFactory.openSession();
        
    //创建UserMapper代理对象
    UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        
    //调用userMapper的方法
    User user=userMapper.findUserByResultMap(1);
        
    System.out.println(user.getUsername());
}

小结
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。


本文转载自:http://blog.csdn.net/acmman/article/details/46509375

M
粉丝 4
博文 58
码字总数 24535
作品 0
广州
高级程序员
私信 提问
【MyBatis框架】高级映射-一对一查询

一对一查询 根据上面我们分析的订单商品数据模型(链接:12.订单商品数据模型-分析思路.txt),我们来写一下有关一对一的查询,分别使用了resultType和resultMap指定输出参数类型 1.一对一查询使...

Mysoft
2015/09/18
73
0
一文理清Mybatis中resultType与resultMap之间的关系和使用场景

1.概要 Mybatis ORM半自动映射框架对java开发工程师来说应该是必会的框架之一。它的好处这里不是我们讨论的重点。令很多刚刚入行的java开发小伙伴迷茫的是 与的使用。今天来探讨一下这个问题...

码农小胖哥
07/27
69
0
mybatis学习笔记(7)-输出映射

mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射。 输出映射有两种方式 resultType 使用进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可...

brianway
2016/02/28
201
0
mybatis学习笔记(2)-mybatis概述

mybatis学习笔记(2)-mybatis概述 标签: mybatis [TOC] 本文对mybatis做一个简单介绍,包括框架原理,执行过程,开发方法,输入输出映射以及动态sql,我会在后续的系列文章中一一详细说明 my...

brianway
2016/02/27
467
0
MyBatis初探三

一、输入类型( parameterType ) 简单类型( 基本数据类型 ) HashMap 单个JavaBean( 自定义JavaBean类型 ) 传入JavaBean的包装类型( 用处:比如说用户的复杂查询( 关联查询 ),需要传入用户信息...

AAASSSSddd
2016/04/03
42
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
42
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部