Mybatis学习笔记(八)【输出映射】

Mybatis系列(八)集合映射 Mybatis系列之集合映射 上篇文章我们讲了关联映射,实现了销售与登录用户之间的关联。本文我们接着来讲一讲集合映射,实现销售与客户的多对多关系。 实现销售与客户多对多关系 本文中仍延用《Mybatis系列之关联映射》中的映射接口和测试用例,这里仅对增加和修改的内容进行讲解。 第一步,在动手编写映射文件之前,我们需要对Sales类增加一个List属性,用以保存销售员对应的客户列 阅读详情

Contents


本文主要讲解mybatis的输出映射。

输出映射有两种方式

  • resultType
  • resultMap

resultType

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

输出简单类型

  • mapper.xml
 <!-- 用户信息综合查询总数
        parameterType:指定输入类型和findUserList一样
        resultType:输出结果类型
    -->
    <select id="findUserCount" parameterType="com.iot.mybatis.po.UserQueryVo" resultType="int">
        SELECT count(*) FROM user WHERE user.sex=#{userCustom.sex} AND user.username LIKE '%${userCustom.username}%'
    </select>
  • mapper.java
    //用户信息综合查询总数
    @Test
    public void testFindUserCount() throws Exception {

        SqlSession sqlSession = sqlSessionFactory.openSession();

        //创建UserMapper对象,mybatis自动生成mapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //创建包装对象,设置查询条件
        UserQueryVo userQueryVo = new UserQueryVo();
        UserCustom userCustom = new UserCustom();
        //由于这里使用动态sql,如果不设置某个值,条件不会拼接在sql中
        userCustom.setSex("1");
        userCustom.setUsername("小");
        userQueryVo.setUserCustom(userCustom);
        //调用userMapper的方法

        int count = userMapper.findUserCount(userQueryVo);

        System.out.println(count);


    }
  • 小结

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

输出pojo对象和pojo列表

不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。

在mapper.java指定的方法返回值类型不一样:

  • 输出单个pojo对象,方法返回值是单个对象类型
//根据id查询用户信息
public User findUserById(int id) throws Exception;
  • 输出pojo对象list,方法返回值是List
//根据用户名列查询用户列表
public List<User> findUserByName(String name) throws Exception;

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

resultMap

mybatis中使用resultMap完成高级输出结果映射。(一对多,多对多)

resultMap使用方法

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

1.定义resultMap

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

  • 定义reusltMap
<!-- 定义resultMap
    将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系

    type:resultMap最终映射的java对象类型,可以使用别名
    id:对resultMap的唯一标识
     -->
     <resultMap type="user" id="userResultMap">
        <!-- id表示查询结果集中唯一标识 
        column:查询出来的列名
        property:type指定的pojo类型中的属性名
        最终resultMap对column和property作一个映射关系 (对应关系)
        -->
        <id column="id_" property="id"/>
        <!-- 
        result:对普通名映射定义
        column:查询出来的列名
        property:type指定的pojo类型中的属性名
        最终resultMap对column和property作一个映射关系 (对应关系)
         -->
        <result column="username_" property="username"/>

     </resultMap>
  • 使用resultMap作为statement的输出映射类型
<!-- 使用resultMap进行输出映射
        resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前边需要加namespace
        -->
    <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
        SELECT id id_,username username_ FROM USER WHERE id=#{value}
    </select>
  • mapper.java
//根据id查询用户信息,使用resultMap输出
public User findUserByIdResultMap(int id) throws Exception;
  • 测试代码
@Test
public void testFindUserByIdResultMap() throws Exception {

    SqlSession sqlSession = sqlSessionFactory.openSession();

    //创建UserMapper对象,mybatis自动生成mapper代理对象
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    //调用userMapper的方法

    User user = userMapper.findUserByIdResultMap(1);

    System.out.println(user);


}

小结

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

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

【MySQL用法】mybatis框架中,查询出来的实体类结果集中的某一个字段无法映射到实体类中的解决方案 本文目录 一、背景描述 二、解决方案 一、背景描述 根据某人出现的次数做一次汇总,数据库中并未存在此字段,但是前端页面中要用到,所以就需要在实体类中添加上一个逻辑字段(通过mybatis-plus里的@TableField注解可以解决此问题) SQL语句如下: <!--分组查询日/周/月报未读列表数据--> <select id="queryList" resultType="com.iot.uoa.daily.entity.DailyNoReadReport"> S 阅读详情

相关推荐

MyBatis:MyBatis的输入映射和输出映射

当sql语句需要一个参数时:当sql语句需要多个参数时:注意:当sql语句中需要判断一个基本数据类型的值是否为空时:当sql语句中的字段名与实体对象中的属性名一致时,使用:当sql语句中的字段名与实体对象中的属性名不一致时,使用:当sql语句中的字段名与实体对象中的字段名不一致时,可以使用来显式的进行映射。例如下面的案例: 调用 注意:resultMap属性说明:association表示配置单个对象的关联映射 :之前学习的都是基于单表操作的,而实际开发中,随着业务难度的加深,肯定需要多表操作的。一对一模型

流楚丶格念的博客 2240

mybatis学习笔记(7)-输出映射

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34032792的博客 205

原样输出mybatis的sql执行语句(mysql和oracle都可用).zip

适用于springboot(整合过mybatis的)和常规SSM项目,可以获取完整的mybatis执行的sql语句,用于直观的看到执行sql是否异常

【MyBatis框架点滴】——MyBatis输出映射

上文说到,MyBatis中,通过parameterType指定输入参数的类型。这里说一下用resultType和resultMap来指定输出参数的类型。 resultType   resultType是最常用的指定输入参数类型的方式,一般用来指定输出简单类型和pojo。 一、指定输出简单类型   映射文件: select id="findUserByUserName" parame

点滴汇聚,智在积累。——Danny 1479

Kettle安装与使用

Pentaho Data Integration作为一个端对端的数据集成平台,可以对多种数据源进行抽取(Extraction)、加载(Loading)、数据落湖(Data Lake Injection)、对数据进行各种清洗(Cleasing)、转换(Transformation)、混合(Blending),并支持多维联机分析处理(OLAP)和数据挖掘(Data mining)。勺子(spoon.bat/spoon.sh):是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。

jnrjian的博客 1万+

如何用Arduino和HX711压力传感器制作一个简易电子秤(含OLED显示)

本文详细介绍了如何使用Arduino、HX711压力传感器和OLED显示屏制作一个简易电子秤。从硬件连接到软件编程,提供了分步教程,包括核心元件功能解析、接线方法、库安装、模块测试以及关键的校准流程。项目实践性强,适合创客和DIY爱好者学习嵌入式系统与传感器应用。

tea88的博客 535

resultMap结果映射

查询结果的列名和java对象的属性名对应不上怎么办?

qq_58718649的博客 786

SpringBoot整合海康SDK实战:从设备初始化到PS流录像转MP4全流程(附避坑指南)

本文详细介绍了SpringBoot整合海康SDK的完整实战流程,涵盖设备初始化、通道管理、录像检索与下载。针对海康设备生成的PS流录像文件无法直接播放的痛点,重点解析了如何利用FFmpeg高效、无损地将其转换为通用的MP4格式,并提供了关键的避坑指南和性能优化建议。

chair的专栏 763

mybatis

1    Mybatis是什么?         MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。          MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者...

whaleluo的博客 463

【数字IC设计】Centos 7桌面版 安装Synopsys EDA Tools

简称DC,是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺库的门级网表。

qiumingT的博客 9788

工业自动化实战:用LabVIEW的DSC模块实现MODBUS-TCP设备控制

本文详细介绍了如何利用LabVIEW的DSC模块实现工业自动化中的MODBUS-TCP设备控制。通过环境准备、核心功能解析、状态机实现及典型工业场景实战,帮助工程师快速掌握稳定可靠的通讯技术,提升工业自动化系统的运行效率。

salt9的博客 1057

Mybatis——输入映射和输出映射

输入映射指的是将数据库中的数据映射到Java对象上。在MyBatis中,可以使用SQL语句来查询数据库,并将查询结果映射到Java对象上。通过使用MyBatis的注解或XML配置,可以指定数据库字段与Java对象属性之间的映射关系。例如,可以将数据库表的列映射到Java对象的属性,或者将多个表的关联查询结果映射到一个Java对象的属性。单表一般不用resultMap,一般都用resultTyperesultType支持的类型基本数据类型、pojo、hashMap输出是POJO和POJO列表问题。

nine06的博客 1384

Xilinx的DDR4 IP

Xilinx的DDR4 IP

weixin_39896700的博客 4456

mybatis输入映射和输出映射

输入映射 Mybatis支持输入 哪些类型 简单类型、POJO,HashMap,POJO的包装的类型。 需求:查询用户列表:已经下过订单男性用户,那么传入的参数包含用户信息(User)和订单信息(Order) 输出映射 resultType (1)支持的类型 基本类型、pojo、hashMap (2)输出是POJO和POJO列表问题 不管是输出是单个POJO,还是POJO列表,在Mapper.xm...

simple_start的博客 1423

从零开始使用CubeMX配置STM32使用lwip实现httpd服务器以及使用vscode编辑阅读keil代码(三)

使用stm32搭载lwip实现HTTPd服务器

qq_30623327的博客 5932

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MyBatis的输入映射和输出映射

MyBatis的输入映射和输出映射是将Java对象和数据库表的列进行映射,实现数据的自动转换。

二哈喇子! 1131

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

企业培训笔记:MyBatis的输出映射

MyBatis 中的输出映射(Result Mapping)是指将 SQL 查询结果映射到 Java 对象的过程。当执行数据库查询后,MyBatis 需要将返回的结果集(ResultSet)转换为对应的 Java 对象,这个转换规则的定义就是输出映射。

梁辰兴的博客 1148

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Mybatis映射详解

在最近的工作中,碰到一个比较复杂的返回结果,发现简单映射已经解决不了这个问题了,只好去求助百度,学习mybatis复杂映射应该怎么写,将学习笔记结合工作碰到的问题写下本文,供自身查漏补缺,同时已被不时之需。

asxyxxx的博客 1万+

Mybatis框架|输入/输出参数映射

文章目录一、输入映射parameterType1.简单的参数类型(参数只有一个的时候)2.pojo类型3.pojo对象的包装类型(1)UserQueryvo类(2)UserMapper接口(3)UserMapper.xml(4)全局配置文件(5)测试类二、输出类型resultType1.返回简单的类型2.返回pojo对象三、输出映射ResultMap1.UserMapper.xml2.UserMa...

匿名攻城狮 1903

Mybatis 输入映射 输出映射 高级映射

1.输入映射     通过parameterType指定输入参数的类型,类型可以是简单类型、 hashmap 、 pojo 的包装类型。     [1]简单类型   例如入门程序里的根据用户ID查询用户信息的映射文件,输入Int值。   [2]POJO类型   例如入门程序里的添加用户文件,就是输入POJO类型的USER   [3]包装POJO类型

JavaLab 716

【MyBatis】输入映射和输出映射

在mybatis中,我们需要通过输入和输出映射来指定输入(参数)和输出(返回值)的类型。 【输入映射】 在mapper的statement中,我们通过parameterType指定输入参数的类型,类型可以是简单类型、hashMap以及pojo的包装类型。 1、简单类型,比如int,我们可以直接进行使用,例如: <select id="findUserB...

swebin的专栏 464

mybatis(5)mybatis输入映射和输出映射

目录 输入映射 传递pojo的包装对象 resulttype 简单类型输出 输出pojo对象或者pojo列表 使用resultMap作为statement的输出映射类型 输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型 传递pojo的包装对象 需求 完成用户信息的综合查询,需要传入查询条件很复...

qq_38125626的博客 181

Mybatis的输出映射

输出映射的两种形式:resultType | resultMap一、resultType(1)、输出简单类型(2)、输出pojo对象(3)、输出pojo列表二、resultMap 它俩分别对应在什么时候使用? resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。 sql查询字段名和pojo的属性名不一致时,可通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。 result

qq_46100517的博客 200

mybatis输入映射与输出映射

一、输入映射 1、定义包装类型pojo,在包装类型的pojo中将复杂的查询条件包装进去。 User类为和表对照类,再mybatis其他博客有列出 2)为什么使用User的子类UserCustom,不直接使用User,因为User类可以通过逆向工程生成,是不变的,使用子类UserCustom可以方便扩展。 public class UserCustom extends User{ private static final long serialVersionUID = 1L; } public cla

qq_37133554的博客 273
上一篇: Mybatis学习笔记(七)【输入映射】
下一篇: Mybatis学习笔记(九)【动态sql】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值