15Mybatis_输出类型

输出类型分为两种:1.resultType          和         2.resultMap

接下来先讲解resultType:

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

如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。

只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

案例:

userMapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- nanmespace:命名空间。 作用就是对sql进行分类话管理,理解Sal分离

注意:使用mapper代理方式,namespace有特殊重要的作用
-->

<mapper namespace="cn.itcast.mybatis.mapper.userMapper">

 <!--
 这里的id要和Mapp接口里面的函数名字一模一样。parameterType表示输入的类型,
 resultType表示输出的类型

  -->
    <select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom">
        SELECT * FROM USER WHERE user.sex= #{userCustom.sex} AND user.username=#{userCustom.username}
    </select>

</mapper>

这里的resultType是"cn.itcast.mybatis.po.UserCustom"。

就是说 SELECT * FROM .......这里的* 如果改为username_而不是UserCustom中的username的话这个username就会映射失败,它的值就是null。

2.resultMap

Mybatis中使用resultMap完成高级输出结果的映射。其实就是对上面的弊端(只有sql语句中select id ...这些要和user中的属性名一致才能映射正确)的一个改正,用resultMap就可以如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

思路:

1.定义resultMap

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

我们要将SELECT id id_,username username_ FROM USER这句话成功映射。我们知道上面的那种resultType是不能成功的。

案例如下;

案例结构如下:

我们主要修改的还是userMapper.xml和userMapper.java

第一步:我们先修改userMapper.xml代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- nanmespace:命名空间。 作用就是对sql进行分类话管理,理解Sal分离

注意:使用mapper代理方式,namespace有特殊重要的作用
-->

<mapper namespace="cn.itcast.mybatis.mapper.userMapper">

    <!--
    定义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="username_" property="username"/>
    </resultMap>
     <!--
        id:表示查询结果集中唯一的标识。
        这里的resultMap要和<resultMap type="User" id="userResultMap">一致

         -->
        <select id="findUserByResultMap" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultMap="userResultMap">
        SELECT id id_,username username_ FROM USER WHERE user.sex= #{userCustom.sex} AND user.username=#{userCustom.username}
    </select>

</mapper>

第二步:编写Mapper.java类

package cn.itcast.mybatis.mapper;

import java.util.List;

import cn.itcast.mybatis.po.User;
import cn.itcast.mybatis.po.UserCustom;
import cn.itcast.mybatis.po.UserQueryVo;

public interface userMapper {
    //这个名字(findUserById)和UserMapper.xml里面的id要一模一样
//注意这里写的是返回的List.这样代码内部就会调用selectList,但是在userMapper.xml中要写的是
//resultType="cn.itcast.mybatis.po.User"
/*
 *
 <select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom">
        SELECT * FROM USER WHERE user.sex= #{userCustom.sex} AND user.username=#{userCustom.username}
    </select>
 *
 *
 */
public List<UserCustom> findUserList(UserQueryVo userQueryVo);
public User findUserByResultMap(UserQueryVo userQueryVo);
}

第三步:编写测试代码:

package cn.itcast.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import cn.itcast.mybatis.Dao.UserMapper;
import cn.itcast.mybatis.mapper.userMapper;
import cn.itcast.mybatis.po.User;
import cn.itcast.mybatis.po.UserCustom;
import cn.itcast.mybatis.po.UserQueryVo;

public class Mybatis_mappertest {

    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void setup() throws IOException
    {   String resource="SqlMapConfig.xml";
        InputStream inputStream= Resources.getResourceAsStream(resource);
        //主要是生成SqlsessionFactory。
        this.sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
    }
    @Test
    public void testMaper()
    {
        SqlSession sqlSession=null;

        sqlSession=sqlSessionFactory.openSession();
        //生成代理类
        userMapper userMapper=sqlSession.getMapper(userMapper.class);
    //创建包装对象,设置查询条件
        UserQueryVo userQueryVo=new UserQueryVo();
        UserCustom userCustom=new UserCustom();

        userCustom.setSex("1");
        userCustom.setUsername("王");
        userQueryVo.setUserCustom(userCustom);

        userMapper.findUserByResultMap(userQueryVo);

    }

}

运行结果:正确。

总结:

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

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

时间: 2024-09-30 06:26:25

15Mybatis_输出类型的相关文章

【SAP业务模式】之ICS(六):发票输出类型

这篇开始主要讲述发票输出类型: 首先我们新建一个发票类型,用于公司间的发票MIV,而标准的发票类型还是F2保持不变: 一.新建发票类型: 目录:SPRO-销售与分销-出具发票-开票凭证-定义出具发票类型 事务代码:VOFA 这里输出确定过程维护了V40000-公司间开票. 当然,要顺利在VF11出现我们新建的发票类型,还得在VOV8 里面将公司间发票类型与订单类型相关联: 二.查看输出确定过程: 事务代码:V/42 三.查看输出类型: 事务代码:V/40 四.为接单方客户号维护RD04输出条件的

paip.多维理念 输入法的外码输入理论跟文字输出类型精髓

通常,我们的输入法使用的外码是拼音,可是,这个的用户体验非常差.. 应该使用多个外码类型... ##依照词汇来源,有例如以下几个 固有词ati 来自english英文 other语言(西班牙语,阿拉伯语,粤语,汉语,日语,韩语etc) ##外码使用的文字 only  拉丁文.. ##外码的拼写格式 ati 英文词::  english原文 或者  ati_english格式 别的语言::  统统使用ati_xx格式拼写.. 作者 老哇的爪子 Attilax 艾龙,  EMAIL:[email p

Visual Stdio 无法直接启动带有“类库输出类型”的项目若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项目!

j解决方法:项目-属性-应用程序-输出类型-Windows应用程序

无法直接启动带有“类库输出类型”的项目

在学习三层搭框架过程中,将bug修改完后,运行的时候,会弹出一个问题,(⊙o⊙)-不能运行,调试完了也卡不到效果啊,赶紧找解决方法.. 提示语: 若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目.将这个可执行项目设置为启动项 因为很久以前就遇到过这样问题,然后我就检查解决方案的启动项是不是设置错误了.但是检查了一下,启动项没有问题. 运行还是会出同样的问题,最后灵机一闪,看看提示,就知道启动项输出类型不对,修改了输出类型,就没有问题了.. 学习框架,是一场宏观的盛宴,是一场"眼高手

无法直接启动带有"类库输出类型"的项目解答

有的时候在调试中会出现  "无法直接启动带有"类库输出类型"的项目解答"的情况,网上也有各种解答,下面介绍我所知道的一种解决方法 1.在解决方案管理器中右击,选择属性,如下图: 2.选择自己要调试的项目,然后进行调试就可以了 原文地址:https://www.cnblogs.com/YangWenStudent/p/8267671.html

怎么改变CAD版本转换的输出类型?

怎么改变CAD版本转换的输出类型?对于经常与CAD打交道的人来说,经常使用CAD相关软件和进行线管的操作已经是见怪不怪了,相信也会将CAD图纸进行版本转换的全部操作步骤了,那么我们在进行版本转换的同时如何改变图纸的输出格式呢,今天小编就要来教教大家怎么改变CAD版本转换的输出类型的全部操作,希望能够帮助到大家! 步骤一:打开电脑进入浏览器上下载一款CAD转换器,小编在这里使用的就是这款"迅捷CAD转换器",完成以上下载后将其安装到您们的电脑桌面上准备进行操作使用!步骤二:打开进入软件的

20190615 NACE关于采购订单的输出类型

项目已经做好的配置,我们复盘一下 一.使用NACE 进入输出控制条件: EF 采购订单,首先看->输出类型 标准是使用 nast 作为记录表 1输出类型, 2过程, 3 存取顺序,4 条件记录: 我们使用的是ZNEU这个输出类型 详细说明:访问顺序   0001  就是存取顺序 缺省值 选择 : 4 立即发送 A 分配(ALE) 这个和后面配置的调用程序有关 合作伙伴功能:VN 通信策略:无(可以配置) 如:CS01 (这个如果打印出错会发送给用户一封邮件) 1.处理程序 双击一下处理程序 (配

解析PDB文件输出类型信息 – dumppdb工具

本文2015-11-29原发于http://blog.zhongts.com/ PDB是微软的调试信息格式,由VS生成,方便源码调试.PDB文件中包含了变量.函数.类型.源码行号等信息,用VS(或者Windbg等调试器)调试二进制时,在源代码上下断点.源码单步.显示变量值等功能都需要有PDB文件. 本文提供的dumppdb工具能解析PDB文件,输出里面的类型信息,如结构体定义.抽出里面的类型定义导入IDA逆向更方便.写程序时也可能用到这些类型定义. 指定要解析的PDB文件名,运行dumppdb,

ACM基础之三种输出类型及常见实现方法

输出_第一类 一个Input Block对应一个Output Block,Output Block之间没有空行. C语法: {     ....    printf("%d\n",ans); } C++语法: { ...     cout << ans << endl;   } Java语法: { ... System.out.println(ans); } 输出_第二类 一个Input Block对应一个Output Block,每个Output Block之