search
HomeDatabaseMysql TutorialDetailed explanation of mybatis attributes

Preface

MyBatis is based on the idea of ​​"the database structure is uncontrollable", that is, we hope that the database follows the third normal form or BCNF, but in fact it goes against our wishes, then the result set mapping It is MyBatis that provides us with this means of converting between ideal and reality, and resultMap is the configuration label of the result set mapping.
Before going deep into the ResultMap tag, we need to understand the process from the SQL query result set to the JavaBean or POJO entity.

From SQL query results to domain model entities 

  1. Get the ResultSet object through JDBC query

  2. Traverse the ResultSet object and temporarily store each row of data into a HashMap instance, using the field name or field alias of the result set as the key, and the field value as the value

  3. According to the type attribute of the ResultMap tag Instantiate the domain model through reflection

  4. Fill the key-value pairs in the HashMap into the domain model instance according to the type attribute of the ResultMap tag and tag information such as id and result and return

1. resultMap

1. Attribute description

  • id attribute, the identification of the resultMap tag.

  • type attribute , the fully qualified class name of the return value, or a type alias.

  • autoMapping attribute, value range true (default value) | false, set whether to start the automatic mapping function. The automatic mapping function is to automatically find the attribute name with the same name as the field name in lowercase, and call the setter method. After setting it to false, you need to clearly indicate the mapping relationship in resultMap before calling the corresponding setter method.

2. Basic function: Establish a mapping relationship between SQL query result fields and entity attributes
Example 1: Construct a domain model through setters

public class EStudent{  private long id;  private String name;  private int age;  // getter,setter方法  /**
   * 必须提供一个无参数的构造函数
   */  public EStudent(){}
}
<select>
  SELECT ID, Name, Age
    FROM TStudent
</select>
<resultmap>
  <id></id>
  <result></result>
  <result></result>
</resultmap>

Sub-element description:

  • id element, used to set the mapping relationship between primary key fields and domain model attributes

  • result element, used Set the mapping relationship between ordinary fields and domain model attributes

id, result statement attribute configuration details:

##propertyNeeds to be mapped to JavaBean Property name. columnThe column name or label alias of the data table. javaTypeA complete class name, or a type alias. If you match a JavaBean, MyBatis will usually detect it on its own. Then, if you want to map to a HashMap, then you need to specify the purpose of javaType. jdbcType List of types supported by the data table. This attribute is only useful for columns that allow nulls during insert, update, or delete. JDBC requires this, but MyBatis does not. If you are coding directly against JDBC and have columns that allow nulls, you will want to specify this. typeHandlerUse this attribute to override the type handler. This value can be a complete class name or a type alias.

示例2:通过构造函数构造领域模型

<select>
  SELECT ID, Name, Age
    FROM TStudent</select><resultmap>  <constructor>    <idarg></idarg>    <arg></arg>    <arg></arg>  </constructor></resultmap>

子元素说明:

  • constructor元素 ,指定使用指定参数列表的构造函数来实例化领域模型。注意:其子元素顺序必须与参数列表顺序对应

  • idArg子元素 ,标记该入参为主键

  • arg子元素 ,标记该入参为普通字段(主键使用该子元素设置也是可以的)

3、一对一关系、一对多关系查询

 注意:在采用嵌套结果的方式查询一对一、一对多关系时,必须要通过resultMap下的id或result标签来显式设置属性/字段映射关系,否则在查询多条记录时会仅仅返回最后一条记录的情况。

association联合

联合元素用来处理“一对一”的关系。需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。如果想覆写的话返回结果的值,需要指定typeHandler。 
不同情况需要告诉MyBatis 如何加载一个联合。MyBatis 可以用两种方式加载:

  • select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;

  • resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

例如,一个班级对应一个班主任。 
首先定义好班级中的班主任 private TeacherEntity teacherEntity;

使用select实现联合 
例:班级实体类中有班主任的属性,通过联合在得到一个班级实体时,同时映射出班主任实体。 
这样可以直接复用在TeacherMapper.xml文件中定义好的查询teacher根据其ID的select语句。而且不需要修改写好的SQL语句,只需要直接修改resultMap即可。

ClassMapper.xml文件部分内容:

<resultmap>  
    <id></id>  
    <result></result>  
    <result></result>  
    <association></association>  
</resultmap>  
<select>  
    SELECT * FROM CLASS_TBL CT  
    WHERE CT.CLASS_ID = #{classID};  
</select>

TeacherMapper.xml文件部分内容:

<resultmap>  
    <id></id>  
    <result></result>  
    <result></result>  
    <result></result>  
    <result></result>  
    <result></result>  
</resultmap>  
<select>  
    SELECT *  
      FROM TEACHER_TBL TT  
     WHERE TT.TEACHER_ID = #{teacherID}  
</select>

使用resultMap实现联合 
与上面同样的功能,查询班级,同时查询器班主任。需在association中添加resultMap(在teacher的xml文件中定义好的),新写sql(查询班级表left join教师表),不需要teacher的select。

修改ClassMapper.xml文件部分内容:

<resultmap>  
    <id></id>  
    <result></result>  
    <result></result>  
    <association></association>  
</resultmap>  
<select>  
    SELECT *  
      FROM CLASS_TBL CT LEFT JOIN TEACHER_TBL TT ON CT.TEACHER_ID = TT.TEACHER_ID  
     WHERE CT.CLASS_ID = #{classID};  
</select>

其中的teacherResultMap请见上面TeacherMapper.xml文件部分内容中。

collection聚集

聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称; 
不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载: 
1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活; 
2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

例如,一个班级有多个学生。 
首先定义班级中的学生列表属性:private List<studententity> studentList;</studententity>

使用select实现聚集 
用法和联合很类似,区别在于,这是一对多,所以一般映射过来的都是列表。所以这里需要定义javaType为ArrayList,还需要定义列表中对象的类型ofType,以及必须设置的select的语句名称(需要注意的是,这里的查询student的select语句条件必须是外键classID)。

ClassMapper.xml文件部分内容:

<resultmap>  
    <id></id>  
    <result></result>  
    <result></result>  
    <association></association>  
    <collection></collection>  
</resultmap>  
<select>  
    SELECT * FROM CLASS_TBL CT  
    WHERE CT.CLASS_ID = #{classID};  
</select>

StudentMapper.xml文件部分内容:

<!-- java属性,数据库表字段之间的映射定义 -->  
<resultmap>  
    <id></id>  
    <result></result>  
    <result></result>  
    <result></result>  
</resultmap>  
<!-- 查询学生list,根据班级id -->  
<select>  
    <include></include>  
    WHERE ST.CLASS_ID = #{classID}  
</select>

使用resultMap实现聚集 
使用resultMap,就需要重写一个sql,left join学生表。

<resultmap>  
    <id></id>  
    <result></result>  
    <result></result>  
    <association></association>  
    <collection></collection>  
</resultmap>  
<select>  
    SELECT *  
      FROM CLASS_TBL CT  
           LEFT JOIN STUDENT_TBL ST  
              ON CT.CLASS_ID = ST.CLASS_ID  
           LEFT JOIN TEACHER_TBL TT  
              ON CT.TEACHER_ID = TT.TEACHER_ID  
      WHERE CT.CLASS_ID = #{classID};  
</select>

其中的teacherResultMap请见上面TeacherMapper.xml文件部分内容中。studentResultMap请见上面StudentMapper.xml文件部分内容中。

4. 动态映射关系 
通过 discriminator子元素 (鉴别器)可以实现动态映射关系信息的设置。具体示例如下:

public class EStudent{  private long id;  private String name;  private String juniorHighSchool;  private String seniorHighSchool;  private int during; // 在本校就读时间  // getter,setter方法  /**
   * 必须提供一个无参数的构造函数
   */  public EStudent(){}
}

情景:查询学生信息的seniorHighSchool信息,若就读时间during字段值为4、5、6时,则以juniorHighSchool字段作所为seniorHighSchool信息。

<select>
  SELECT ID, Name, JuniorHighSchool, SeniorHighSchool, during
    FROM TStudent</select><resultmap>
  // 若不加这句,则当将juniorHighSchool赋予给seniorHighSchool属性时,juniorHighSchool属性将为null  <result></result>  <discriminator>
    // 形式1:通过resultType设置动态映射信息    <case>      <result></result>    </case>
   // 形式2: 通过resultMap设置动态映射信息   <case></case>   <case></case>  </discriminator></resultmap><resultmap>  <result></result></resultmap>

注意:上面关于 discriminator子元素 的 case元素 的 resultType属性 和 resultMap元素 的 type属性 ,均不是直指返回的领域模型类型,而是指定根据判断条件后得到映射关系,可通过 id子元素 和 result子元素 重写映射关系。

5. id元素,result元素,idArg元素,arg元素,discriminator元素的共同属性

  • javaType属性 :Java类的全限定名,或别名

  • jdbcType属性 :JDBC类型, JDBC类型为CUD操作时列可能为空时进行处理

  • typeHandler属性 :指定类型处理器的全限定类名或类型别名

  • column属性 :指定SQL查询结果的字段名或字段别名。将用于JDBC的 resultSet.getString(columnName)

  • This article explains the detailed explanation of mybatis attributes. For more related content, please pay attention to the PHP Chinese website.

  • Related recommendations:

  • MySQL database multi-table operation

  • MySQL database single table query

  • Oracle database output input

Property Description

The above is the detailed content of Detailed explanation of mybatis attributes. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Explain the InnoDB Buffer Pool and its importance for performance.Explain the InnoDB Buffer Pool and its importance for performance.Apr 19, 2025 am 12:24 AM

InnoDBBufferPool reduces disk I/O by caching data and indexing pages, improving database performance. Its working principle includes: 1. Data reading: Read data from BufferPool; 2. Data writing: After modifying the data, write to BufferPool and refresh it to disk regularly; 3. Cache management: Use the LRU algorithm to manage cache pages; 4. Reading mechanism: Load adjacent data pages in advance. By sizing the BufferPool and using multiple instances, database performance can be optimized.

MySQL vs. Other Programming Languages: A ComparisonMySQL vs. Other Programming Languages: A ComparisonApr 19, 2025 am 12:22 AM

Compared with other programming languages, MySQL is mainly used to store and manage data, while other languages ​​such as Python, Java, and C are used for logical processing and application development. MySQL is known for its high performance, scalability and cross-platform support, suitable for data management needs, while other languages ​​have advantages in their respective fields such as data analytics, enterprise applications, and system programming.

Learning MySQL: A Step-by-Step Guide for New UsersLearning MySQL: A Step-by-Step Guide for New UsersApr 19, 2025 am 12:19 AM

MySQL is worth learning because it is a powerful open source database management system suitable for data storage, management and analysis. 1) MySQL is a relational database that uses SQL to operate data and is suitable for structured data management. 2) The SQL language is the key to interacting with MySQL and supports CRUD operations. 3) The working principle of MySQL includes client/server architecture, storage engine and query optimizer. 4) Basic usage includes creating databases and tables, and advanced usage involves joining tables using JOIN. 5) Common errors include syntax errors and permission issues, and debugging skills include checking syntax and using EXPLAIN commands. 6) Performance optimization involves the use of indexes, optimization of SQL statements and regular maintenance of databases.

MySQL: Essential Skills for Beginners to MasterMySQL: Essential Skills for Beginners to MasterApr 18, 2025 am 12:24 AM

MySQL is suitable for beginners to learn database skills. 1. Install MySQL server and client tools. 2. Understand basic SQL queries, such as SELECT. 3. Master data operations: create tables, insert, update, and delete data. 4. Learn advanced skills: subquery and window functions. 5. Debugging and optimization: Check syntax, use indexes, avoid SELECT*, and use LIMIT.

MySQL: Structured Data and Relational DatabasesMySQL: Structured Data and Relational DatabasesApr 18, 2025 am 12:22 AM

MySQL efficiently manages structured data through table structure and SQL query, and implements inter-table relationships through foreign keys. 1. Define the data format and type when creating a table. 2. Use foreign keys to establish relationships between tables. 3. Improve performance through indexing and query optimization. 4. Regularly backup and monitor databases to ensure data security and performance optimization.

MySQL: Key Features and Capabilities ExplainedMySQL: Key Features and Capabilities ExplainedApr 18, 2025 am 12:17 AM

MySQL is an open source relational database management system that is widely used in Web development. Its key features include: 1. Supports multiple storage engines, such as InnoDB and MyISAM, suitable for different scenarios; 2. Provides master-slave replication functions to facilitate load balancing and data backup; 3. Improve query efficiency through query optimization and index use.

The Purpose of SQL: Interacting with MySQL DatabasesThe Purpose of SQL: Interacting with MySQL DatabasesApr 18, 2025 am 12:12 AM

SQL is used to interact with MySQL database to realize data addition, deletion, modification, inspection and database design. 1) SQL performs data operations through SELECT, INSERT, UPDATE, DELETE statements; 2) Use CREATE, ALTER, DROP statements for database design and management; 3) Complex queries and data analysis are implemented through SQL to improve business decision-making efficiency.

MySQL for Beginners: Getting Started with Database ManagementMySQL for Beginners: Getting Started with Database ManagementApr 18, 2025 am 12:10 AM

The basic operations of MySQL include creating databases, tables, and using SQL to perform CRUD operations on data. 1. Create a database: CREATEDATABASEmy_first_db; 2. Create a table: CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY, titleVARCHAR(100)NOTNULL, authorVARCHAR(100)NOTNULL, published_yearINT); 3. Insert data: INSERTINTObooks(title, author, published_year)VA

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool