Mybatis框架中resultType和resultMap的区别

2024-09-05 19:52

本文主要是介绍Mybatis框架中resultType和resultMap的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

resultTyperesultMap 是 MyBatis 框架中用于处理查询结果映射的两种方式。

   1. resultType

  • 定义resultType 是最简单的结果映射方式,直接将查询结果映射为指定的 Java 类。
  • 用法:适用于数据库表字段名和 Java 类字段名一致的情况。
  • 优点
    • 简单易用,代码简洁。
    • 适合表字段和 Java 对象属性一一对应的情况。
  • 缺点
    • 当数据库表字段和 Java 对象字段名不一致时,需要使用别名来处理。
  • 无法处理复杂的映射关系(如嵌套对象、多对一、一对多等情况)。
    <select id="selectUser" resultType="com.example.User">SELECT id, name, age FROM users
    </select>
    

    查询的结果将自动映射到 User 类的 id, name, age 字段上

  • 2. resultMap

  • 定义resultMap 是 MyBatis 提供的更为灵活的结果映射方式,可以用来处理复杂的映射关系。
  • 用法:适用于字段名和 Java 类属性名不一致,或者需要进行复杂映射的情况(如嵌套对象、关联查询等)。
  • 优点
    • 支持复杂的映射,比如字段名与属性名不一致、嵌套对象映射、关联查询等。
    • 更具可读性,能够清晰定义每个字段的映射关系。
  • 缺点
    • 配置较为复杂,需要手动指定每个字段的映射。
    • <resultMap id="userResultMap" type="com.example.User"><id property="id" column="user_id" /><result property="name" column="user_name" /><result property="age" column="user_age" />
      </resultMap><select id="selectUser" resultMap="userResultMap">SELECT user_id, user_name, user_age FROM users
      </select>
      

resultMap 允许将数据库表中的 user_iduser_nameuser_age 映射到 Java 对象 Useridnameage 属性上。 

这篇关于Mybatis框架中resultType和resultMap的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139910

相关文章

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域