Mybatis 自动映射(使用需谨慎)

Mybatis 自动映射 (Auto-mapping) 是指Mybatis在进行 SQL 查询结果和Java对象映射时,自动查找Java对象对应属性名和SQL查询结果列名相同的项,并进行赋值。自动映射虽然能够简化开发工作,但也存在一些需要注意的地方,使用时需谨慎。

自动映射的配置方式

方式一: 自动映射全局开启

Mybatis提供了全局配置自动映射的方式,即将 autoMappingBehavior 属性设置为 full 。在这种情况下,Mybatis会尝试将所有查询结果都自动映射到Java对象。

<configuration>
  <settings>
    <setting name="autoMappingBehavior" value="full"/>
  </settings>
</configuration>

方式二: 自动映射局部开启

除了全局配置,也可以在SQL Mapper中单独进行自动映射的配置。在 Mapper 配置文件中,使用 resultType 属性声明Java对象类型,并将 autoMapping 属性设置为 true。

<select id="findById" resultType="com.example.User" autoMapping="true">
  SELECT id, username, password FROM users WHERE id = #{id}
</select>

自动映射的优缺点

优点

  • 无需编写 XML 映射文件,满足快速开发需要;
  • 无需为每个Java属性手动定义属性和sql列的映射;
  • 对于简单查询操作,使用自动映射更加方便,简洁。

缺点

  • 自动映射会创建Java对象实例,并反射调用 JavaBean Setter 方法设置属性,有性能消耗,不适用于大规模数据查询;
  • 自动映射有可能会出现 JavaBean 属性和 SQL 列的类型不同时,无法进行正确的映射问题。

示例

示例一

public class User {
  private Long id;
  private String name;
  private Integer age;
  // getter and setter methods
}

<select id="findById" resultType="com.example.User" autoMapping="true">
  SELECT * FROM users WHERE id = #{id}
</select>

对应的SQL查询结果:

id=1
name=Nina
age=23

查询结果会自动映射到 User 对象的 id,name,age属性中。

示例二

public class User {
  private Long id;
  private String name;
  private String age;
  // getter and setter methods
}

<select id="findById" resultType="com.example.User" autoMapping="true">
  SELECT id, name, age FROM users WHERE id = #{id}
</select>

对应的SQL查询结果:

id=1
name=Nina
age=23

查询结果会自动映射到 User 对象的 id属性中,但是由于User对象中的 age 属性类型为 String,而SQL查询结果中 age 列的类型为整形,无法进行自动映射。此时需要手动编写映射规则。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis 自动映射(使用需谨慎) - Python技术站

(1)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • ES6 Promise对象的应用实例分析

    下面是关于 “ES6 Promise对象的应用实例分析” 的完整攻略: 简介 ES6 中引入了 Promise 对象,它是一种异步编程解决方案,可以优雅地解决回调地狱、处理多个异步操作等问题。本文主要是针对 Promise 对象的应用实例进行分析和探讨。 创建 Promise 对象 首先我们先来了解一下 Promise 对象的创建方式。创建一个 Promis…

    Java 2023年5月26日
    00
  • JAVA/JSP学习系列之六(MySQL翻页例子)

    JAVA/JSP学习系列之六(MySQL翻页例子) 本文将介绍如何使用JAVA和JSP实现MySQL翻页效果,以充分利用数据库的性能,同时提高用户体验。 1. 分页原理 分页语句的基本语法如下: SELECT * FROM table LIMIT start, size 其中,start表示起始位置,size表示获取的数据数量。我们可以通过计算来动态生成LI…

    Java 2023年6月15日
    00
  • Java多线程-线程的同步与锁的问题

    Java 多线程 – 线程的同步与锁的问题 Java 中,线程的同步与锁是多线程开发中一个极为重要的概念,也是高并发环境下解决数据同步的关键。线程的同步意味着多个线程之间共享数据时需要做到同步,避免数据错乱。锁是线程同步机制的基础,通过加锁可以使线程按照特定的次序串行执行,从而保证多线程访问共享数据时的安全性。 线程同步 当多个线程不同步访问共享数据时,就可…

    Java 2023年5月26日
    00
  • volatile关键字的作用是什么?

    首先,volatile 是 C 和 C++ 中的一个关键字,用于告诉编译器该变量是可以被其他线程修改的,从而避免了编译器进行一些针对该变量的优化,确保了内存中的正确性。 使用 volatile 的作用是使变量的访问和修改都在主内存中进行,而不是在寄存器或缓存中进行,以实现不同线程之间的可见性和互通性。例如,在多线程程序中,如果一个线程修改了一个变量的值,而另…

    Java 2023年5月10日
    00
  • JavaWeb中导出excel文件的简单方法

    下面是JavaWeb中导出Excel文件的简单方法的完整攻略。 步骤一:导入相关的依赖 在项目中导出Excel文件,需要用到POI库。因此需要在pom.xml中导入相关的依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</…

    Java 2023年5月26日
    00
  • SSH框架网上商城项目第14战之商城首页UI的设计

    SSH框架网上商城项目第14战之商城首页UI的设计攻略 本次项目的目标是设计网上商城的首页UI界面,以下是完整攻略: 1. UI设计前期准备 在UI设计之前,为了能够更好的理解网上商城的运营模式,建议广泛了解目前热门商城的首页设计,如淘宝,京东和天猫等大型商城的首页设计,了解他们的页面布局和样式,可以借鉴他们的设计元素,同时也要挖掘出更多的特点,以创新和提高…

    Java 2023年6月15日
    00
  • java.lang.NullPointerException出现的几种原因及解决方案

    Java.lang.NullPointerException出现的几种原因及解决方案 简介 Java.lang.NullPointerException是Java程序中常见的运行时异常,一般会出现在调用空对象的方法或属性时。出现该异常的原因较为多样,本文将介绍其中几种常见的原因,并提出对应的解决方案,以帮助程序开发者快速解决问题。 原因和解决方案 1. 调用…

    Java 2023年5月27日
    00
  • MyBatis注解实现动态SQL问题

    下面是针对”MyBatis注解实现动态SQL问题”的完整攻略: 动态SQL语句的背景: 在进行数据库操作时,我们经常会用到动态SQL语句,而MyBatis也提供了多种方式来实现动态SQL,比如XML方式等,但是本文主要讲解注解实现动态SQL的问题。注解方式的实现相比XML更加简洁,可读性更强。在注解方式中,我们可以使用MyBatis提供的@SelectPro…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部