封装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二选一,不能同时使用

总结

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

相关文章

  • Springboot如何实现对配置文件中的明文密码加密

    Springboot如何实现对配置文件中的明文密码加密

    这篇文章主要介绍了Springboot如何实现对配置文件中的明文密码加密问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java 断言 assert的用法详解

    Java 断言 assert的用法详解

    Java assert断言机制是Java5中推出的新特性,它主要用于在程序运行时检查状态或假设的正确性,本篇文章将全面详细地讲解Java assert断言机制,包括断言概述、语法规则、工作原理、使用场景、注意事项以及示例代码等方面,需要的朋友可以参考下
    2023-05-05
  • Java 面试题和答案 - (下)

    Java 面试题和答案 - (下)

    本文主要介绍Java 面试题,这里整理了Java面试题关于JDBC,线程异常处理,Servlet,JSP的知识的整理,帮助大家理解知识点,便于面试,有兴趣的小伙伴可以参考下
    2016-09-09
  • 解析Spring中@Controller@Service等线程安全问题

    解析Spring中@Controller@Service等线程安全问题

    这篇文章主要为大家介绍解析了Spring中@Controller@Service等线程的安全问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java项目打包Docker镜像全流程

    Java项目打包Docker镜像全流程

    本文是一份超详细的Java项目Docker化实战手册,从环境准备到最终上线,手把手带你完成整个容器化部署流程,无论你是刚接触Docker的新手,还是想系统梳理容器化流程的开发者,这篇文章都能给你带来实实在在的帮助,需要的朋友可以参考下
    2025-04-04
  • jfreechart画折线图的方法

    jfreechart画折线图的方法

    这篇文章主要为大家详细介绍了jfreechart画折线图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Mybatis批量修改时出现报错问题解决方案

    Mybatis批量修改时出现报错问题解决方案

    这篇文章主要介绍了Mybatis批量修改时出现报错问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java 求解如何把二叉搜索树转换为累加树

    Java 求解如何把二叉搜索树转换为累加树

    这篇文章主要介绍了Java 求解把二叉搜索树转换为累加树的代码,总之需要观察示例节点的规律,需要记录上个节点的情况,注意引入前驱节点pre,具体实例代码跟随小编一起看看吧
    2021-11-11
  • springmvc+spring+mybatis实现用户登录功能(上)

    springmvc+spring+mybatis实现用户登录功能(上)

    这篇文章主要为大家详细介绍了springmvc+spring+mybatis实现用户登录功能,比较基础的学习教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Java序列化(Serialization) 机制

    Java序列化(Serialization) 机制

    本篇文章是对Java中对象的序列化(Serialization) 机制进行了详细的分析介绍,并附实例,需要的朋友可以参考下
    2016-07-07

最新评论