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日

相关文章

  • JavaWeb Servlet实现文件上传与下载功能实例

    下面是 “JavaWeb Servlet实现文件上传与下载功能实例” 的完整攻略。 一、准备工作 在开始实现文件上传与下载功能之前,我们需要准备如下环境和工具: JDK:Java开发环境,最好使用JDK 1.8及以上版本; Eclipse:Java IDE,也可以使用其他Java IDE,比如IntelliJ IDEA等; Tomcat:JavaWeb服务器…

    Java 2023年5月19日
    00
  • 对象的创建过程包括哪些步骤?

    以下是关于“对象的创建过程包括哪些步骤?”的完整使用攻略: 1. 对象的创建过程 在Java中,对象的创建过程包括以下几个步骤: 类加载:在Java程序运行,JVM会将类的字节码加载到内存中,并对类进行解析和验证。 分配内存:在类加载完成后,VM会在堆内存中为对象配一块连续的内存空间。在分配内存时,JVM会根据对象的大小和内存分配策略来确定内存分配方式。 初…

    Java 2023年5月12日
    00
  • JavaWeb开发入门第二篇Tomcat服务器配置讲解

    下面是对”JavaWeb开发入门第二篇Tomcat服务器配置讲解”的完整攻略: 1. 下载Tomcat服务器 首先需要到Tomcat的官网(https://tomcat.apache.org/)下载对应的版本,选择”Download”页面中的合适版本即可。下载完成后,解压到本地即可。 2. 配置环境变量 在操作系统中配置Tomcat服务器的环境变量可以让我们…

    Java 2023年5月20日
    00
  • Java技术汇总

    Java技术汇总是一个比较综合的概念,包括JavaSE、JavaEE、JavaME等多个方向。如果想要掌握Java的全部技术,需要经过以下几个步骤: 第一步:掌握Java基础知识 JavaSE是Java语言的基础,包括基本语法、数据类型、面向对象编程、异常处理、多线程编程、IO流、反射、集合框架等核心知识点。掌握JavaSE是Java技术汇总的必要前提。 第…

    Java 2023年5月23日
    00
  • java获取登录者IP和登录时间的两种实现代码详解

    下面将详细讲解如何实现在Java中获取登录者IP和登录时间的两种方法。 获取登录者IP和登录时间的方法 使用HttpServletRequest对象获取登录者IP 在Java web开发中,我们可以通过获取HttpServletRequest对象来获取登录者的IP地址。 String ip = request.getRemoteAddr(); 当用户登录时,…

    Java 2023年5月20日
    00
  • Java8之Stream流代替For循环操作

    让我来为你详细讲解“Java8之Stream流代替For循环操作”的完整攻略。 概述 Stream是Java8中引入的一种处理数据集合的新特性,可以被用来代替传统的for循环操作,能够提高代码的可读性和运行效率。 Stream入门 首先需要对基本的Stream概念做一些了解。 Stream是数据的一种抽象,它不是一种数据结构,不保存数据,而是提供一个数据集合…

    Java 2023年5月26日
    00
  • 一文带你吃透JSP增删改查实战案例详细解读

    一文带你吃透JSP增删改查实战案例详细解读 概述 本文将介绍JSP的增删改查实战案例,包含如下内容: 数据库的创建与数据表的设计 JSP页面的开发 Servlet的编写 实现增删改查功能 数据库的创建与数据表的设计 在本案例中,我们将以MySQL数据库为例进行数据库的创建和数据表的设计,具体步骤如下: 创建数据库 打开MySQL客户端,输入以下命令创建一个名…

    Java 2023年6月15日
    00
  • Java字符串格式化,{}占位符根据名字替换实例

    Java字符串格式化是一种很常用的字符串处理方式,可以将占位符替换为实际的数据。其中,{}是常见的占位符,可以根据顺序或者名字进行替换。本文将详细讲解使用{}占位符根据名字替换的实现方法和示例。 使用{}占位符根据名字替换的方法 在Java中,可以使用String.format()方法进行字符串格式化,其中{}用来表示占位符,可以通过指定参数顺序或者参数名来…

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