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日

相关文章

  • Java如何实现通过键盘输入一个数组

    Java 可以通过 Scanner 类实现键盘输入一个数组。 具体步骤如下: 引入 Scanner 类 需要使用 java.util 包中的 Scanner 类,因此需要在程序开头声明引入这个包。 import java.util.Scanner; 定义 Scanner 对象 在程序中定义一个 Scanner 对象用于读取键盘输入: Scanner sc =…

    Java 2023年5月26日
    00
  • SpringBoot环境搭建及第一个程序运行(小白教程)

    下面是关于“SpringBoot环境搭建及第一个程序运行(小白教程)”的详细攻略。 1. 背景介绍 SpringBoot 是一个基于Spring框架的快速开发WEB应用程序的框架。具有使用简单、快速、灵活 配置等特点。该教程旨在让小白快速掌握 SpringBoot 的环境搭建及第一个程序的运行,便于快速实现业务开发。 2. 环境搭建 在进行SpringBoo…

    Java 2023年5月15日
    00
  • 教你用Java SpringBoot如何解决跨域

    教你用 Java Spring Boot 如何解决跨域 在本文中,我们将详细讲解如何使用 Java Spring Boot 解决跨域问题。我们将使用 Spring Boot 2.5.0 版本的源码进行分析。 什么是跨域? 跨域是指在浏览器中,当一个 Web 应用程序试图访问另一个域名下的资源时,浏览器会阻止这种行为。这是由于浏览器的同源策略所导致的。同源策略…

    Java 2023年5月15日
    00
  • Java实现简单客户信息管理系统

    下面是Java实现简单客户信息管理系统的完整攻略: 目录 项目介绍 技术栈 实现步骤 示例说明 总结 1. 项目介绍 本项目是一个简单的客户信息管理系统,主要实现以下功能: 显示所有客户信息 添加客户信息 修改客户信息 删除客户信息 按照姓名查询客户信息 2. 技术栈 Java语言 MySQL数据库 JDBC 3. 实现步骤 创建数据库和表格 首先我们需要创…

    Java 2023年5月23日
    00
  • java生成抽样随机数的多种算法

    Java生成抽样随机数的多种算法 在Java中生成抽样随机数,可以使用多种算法。下面将介绍一些常用的方法和示例说明。 1. Math.random方法 Math.random方法是Java中最基本的生成随机数的方法。它返回一个[0,1)之间的double类型的随机数。如果我们要生成一个[a,b]之间的随机数,可以使用下面的公式: double randomN…

    Java 2023年5月19日
    00
  • 在Tomcat服务器下使用连接池连接Oracle数据库

    详细讲解一下在Tomcat服务器下使用连接池连接Oracle数据库的完整攻略。 步骤一:下载JDBC驱动程序 首先需要下载并安装Oracle的JDBC驱动程序。下载地址为:Oracle JDBC驱动程序。 步骤二:配置Tomcat服务器 在Tomcat服务器的 conf 目录下的 context.xml 文件中添加数据库连接池的配置信息,并指定使用的JDBC…

    Java 2023年5月20日
    00
  • spring-transaction源码分析(3)Transactional事务失效原因

    问题概述 在Transactional方法中使用this方式调用另一个Transactional方法时,拦截器无法拦截到被调用方法,严重时会使事务失效。 类似以下代码: @Transactional public void insertBlogList(List<Blog> blogList) { for (Blog blog : blogLis…

    Java 2023年5月11日
    00
  • Spring AOP如何实现注解式的Mybatis多数据源切换详解

    让我为你详细讲解一下“Spring AOP如何实现注解式的Mybatis多数据源切换详解”。 1. 什么是Spring AOP Spring AOP是Spring框架中的一个重要子模块,用于实现面向切面编程,是一种方便、高效的编程方式。AOP(Aspect Oriented Programming)即面向切面编程是一种能够很好地与OOP(Object Ori…

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