封装mybatis的输出结果方式

 更新时间:2025年12月25日 08:36:32   作者:yuluo_YX  
MyBatis通过resultType将SQL查询结果封装为Java对象,resultType可以是Java类型全限定名或别名,别名需要在MyBatis主配置文件中定义,resultMap用于处理数据库列名与Java属性名不一致的情况,在Mapper文件中,使用resultType或resultMap

封装mybatis的输出结果

  • 封装输出结果:MyBatis执行sql语句,得到ResultSet,转为java对象。

resultType

resultType属性:在执行select时使用,作为标签的属性值出现的

resultType:表示类型,mysql执行sql语句,得到java对象的类型,它的值有两种

  • java类型的全限定名称( 根据Dao接口中的方法返回值类型确定)
  • 使用别名

resultType表示java自定义对象

全限定名称
Student selectById(Integer id);

<select id="selectById" parameterType="int" resultType="indi.yuluo.domain.Student">
    select id,name,email,age from student where id=#{studentId}
</select>

resultType: 使用java对象的全限定名称。表示的意思是mybatis执行sql语句之后,把ResultSet中的数据转为Student类型的对象。mybatis会做以下的操作:
    1,调用indi.yuluo.domain.Student的无参构造方法,创建对象:
    Student student = new Student();
	2, 同名的列赋值给同名的属性
    student.setId(rs.getInt("id"));
	student.setString(rs.get("name"));
	3,得到java对象,如果dao接口返回值是List集合,mybatis把student对象放入到List集合中
        
所以执行 Student studen = dao.selectById(1001);得到的是数据库中id=1001的这行数据,这行数据的列值,赋给了student对象的属性,得到studen对象,就相当于得到了id=1001这行数据
        
所以在声明实体类的时候,属性名和列名尽量保持一致!
使用别名

自定义别名

  • mybatis提供的对java类型定义简短,好记的名称
  • 自定义别名的步骤

在mybatis主配置文件中,使用typeAliases标签声明别名

在mapper文件中,resultType = ”别名“

    <!--类型别名-->
    <typeAliases>
        
        <!--第一种语法格式
            type:java类型的全限定名称(自定义类型)
            alias:自定义别名
        -->
        <typeAlias type="indi.yuluo.domain.Student" alias="stu"/>
        <typeAlias type="indi.yuluo.******" alias="****"/>
        
    </typeAliases>
  • 优点:别名可以自定义
  • 缺点:每个类型都需要自己定义

使用来定义别名

    <!--类型别名-->
        
        <!--别名就是每个类的类名的小写-->
        <package name="indi.yuluo.domain.Student"/>
        <package name="indi.yuluo.****">
        
    </typeAliases>

建议使用全限定名称

resultType表示简单类型

mapper文件

    <!--执行sql语句,得到的是一个一行一列的值-->
    <select id="countStudent" resultType="java.lang.Integer">
        select count(*) from student
    </select>

dan方法

    /**
     * 得到student这张表的记录数
     * @return
     */
    Integer countStudent();

resultType表示map数据结构

mapper文件

    <!--执行sql得到一个map数据结构
        {列名 = 列值,……}
    -->
    <select id="selectByMap" parameterType="int" resultType="java.util.HashMap">
        select * from student where id=#{studentId}
    </select>

dao方法

    // 返回结果是一个Map
    Map<Object, Object> selectByMap(@Param("studentId") Integer id);

单元测试

    /**
     * 用于测试:resultMap 返回的是一个map的数据结构
     */
    @Test
    public void testSelectByMap() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentDao mapper = sqlSession.getMapper(StudentDao.class);

        Map<Object, Object> objectObjectMap = mapper.selectByMap(1002);

        System.out.println(objectObjectMap);
        sqlSession.close();
    }
  • 只能返回一条数据多了会报异常

resultMap

因为数据库的列名定义规范和java的属性值的命名规范不同,所以会经常使用到resultMap这个属性

<!--
	定义resultMap
    id:给resultMap的映射关系七个名称,唯一值
    type:java类型的全限定名称
-->
<resultMap id="customMap" type="indi.yuluo.vo.CustomerOnject">
    <!--定义列名和属性名的对应-->
    <!--主键类型使用id标签-->
    <id column="id" property="cid"/>
    
    <!--非主键类型使用result标签-->
    <result column="name" property="cname"/>
    
    <!--列名和属性名相同不定义-->
    <result column="emial" property="email"/>
    
</result>
    
<!--使用resultMap属性的id值来指定映射关系-->    
<select id="selectByMap" resultMap="customMap">
    select * from student where id=#{studentId}
</select>
  • 定义了之后可以反复使用

resultType和ruseltMap二选一,不能同时使用

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JAVA实现LRU算法的参考示例

    JAVA实现LRU算法的参考示例

    这篇文章主要介绍了JAVA实现LRU算法的参考示例,帮助大家根据需求实现算法,感兴趣的朋友可以了解下
    2020-10-10
  • java学习之一维数组中重复元素的去除

    java学习之一维数组中重复元素的去除

    关于一维数组中有重复的元素该怎么剔除,作为java初学者的我整理出不调用任何特殊库的基础方法,这种思想在其他语言也适用,有需要的朋友可以借鉴参考下
    2021-09-09
  • java实现文件下载的两种方式

    java实现文件下载的两种方式

    这篇文章主要为大家详细介绍了java实现文件下载的两种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Java多线程中不同条件下编写生产消费者模型方法介绍

    Java多线程中不同条件下编写生产消费者模型方法介绍

    这篇文章主要介绍了Java多线程中不同条件下编写生产消费者模型方法介绍,介绍了生产消费者模型,然后分享了相关代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Spring Boot实现动态更新任务的方法

    Spring Boot实现动态更新任务的方法

    这篇文章主要介绍了Spring Boot实现动态更新任务的方法,文中给出了详细的示例代码供大家参考学习,对大家学习使用Spring Boot动态更新任务具有一定的参考价值,需要的朋友们来一起看看吧。
    2017-04-04
  • JavaWeb Session 会话管理实例详解

    JavaWeb Session 会话管理实例详解

    这篇文章主要介绍了JavaWeb Session 会话管理的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • 解析HashMap中的put方法执行流程

    解析HashMap中的put方法执行流程

    在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也是面试中的高频考点,本篇文章就来分析一下HashMap集合中的put方法
    2021-12-12
  • Java基础之让你彻底搞懂代理模式

    Java基础之让你彻底搞懂代理模式

    这篇文章主要介绍了Java基础之让你彻底搞懂代理模式,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • C#中NAudio音频库的安装与使用教程详解

    C#中NAudio音频库的安装与使用教程详解

    NAudio为.NET平台下的开源库,采用ML-PL协议,它支持许多音频操作,可实现多种API播放与录制、多种不同音频格式等功能,下面就跟随小编一起学习一下NAudio的安装与使用吧
    2023-11-11
  • JavaSE异常Exception处理方法以及自定义

    JavaSE异常Exception处理方法以及自定义

    网络异常exception是指在网络通信过程中出现的异常情况,这些异常可能是由于网络连接不稳定、网络故障、服务器故障、网络拥堵等原因导致的,这篇文章主要给大家介绍了关于JavaSE异常Exception处理方法以及自定义的相关资料,需要的朋友可以参考下
    2024-07-07

最新评论