首页 > 其他分享 >MyBatis ORM映射方式详解

MyBatis ORM映射方式详解

时间:2024-12-18 19:29:03浏览次数:7  
标签:username 映射 ORM MyBatis 注解 password id 详解

在现代的Java应用开发中,ORM(Object-Relational Mapping,对象关系映射)框架是不可或缺的一部分。MyBatis作为一种灵活且强大的ORM框架,因其能够直接操作SQL语句而受到许多开发者的青睐。

1. MyBatis简介

MyBatis是一个持久层框架,它通过XML描述符或注解将Java对象与数据库记录进行映射。与Hibernate等全自动ORM框架不同,MyBatis允许开发者直接编写SQL语句,从而提供了更高的灵活性和控制力。

在这里插入图片描述

2. MyBatis的ORM映射方式

MyBatis的ORM映射方式主要分为以下几种:

2.1 基于XML的映射

MyBatis最初是通过XML文件来配置SQL映射的。开发者可以在XML文件中定义SQL语句、参数映射、结果映射等。

2.1.1 SQL映射文件
<mapper namespace="com.allen.mapper.UserMapper">
    <select id="selectUser" resultType="com.allen.model.User">
        SELECT id, username, password
        FROM users
        WHERE id = #{id}
    </select>
</mapper>

在这个例子中,<select>标签定义了一个查询语句,id属性用于标识这个SQL语句,resultType属性指定了查询结果映射到的Java对象类型。

2.1.2 参数映射

MyBatis支持多种参数映射方式,包括简单类型、JavaBean、Map等。

<select id="selectUserByUsername" resultType="com.allen.model.User">
    SELECT id, username, password
    FROM users
    WHERE username = #{username}
</select>

在这个例子中,#{username}表示一个参数占位符,MyBatis会自动将传入的参数值替换到SQL语句中。

2.1.3 结果映射

结果映射是指将查询结果集映射到Java对象的过程。MyBatis提供了多种结果映射方式,包括自动映射、手动映射等。

<resultMap id="userResultMap" type="com.allen.model.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="password" column="password"/>
</resultMap>

<select id="selectUser" resultMap="userResultMap">
    SELECT id, username, password
    FROM users
    WHERE id = #{id}
</select>

在这个例子中,<resultMap>标签定义了一个结果映射,<id><result>标签分别用于映射主键和普通字段。

2.2 基于注解的映射

随着Java注解的流行,MyBatis也提供了基于注解的映射方式,使得开发者可以在Java代码中直接定义SQL映射,而无需编写XML文件。

2.2.1 基本注解
public interface UserMapper {
    @Select("SELECT id, username, password FROM users WHERE id = #{id}")
    User selectUser(int id);
}

在这个例子中,@Select注解用于定义一个查询语句,#{id}表示一个参数占位符。

2.2.2 参数注解

MyBatis注解方式也支持多种参数注解,如@Param@Results等。

public interface UserMapper {
    @Select("SELECT id, username, password FROM users WHERE username = #{username}")
    User selectUserByUsername(@Param("username") String username);
}

在这个例子中,@Param注解用于指定参数名称。

2.2.3 结果映射注解

MyBatis注解方式也支持结果映射,通过@Results@Result注解可以定义结果映射。

public interface UserMapper {
    @Results({
        @Result(property = "id", column = "id"),
        @Result(property = "username", column = "username"),
        @Result(property = "password", column = "password")
    })
    @Select("SELECT id, username, password FROM users WHERE id = #{id}")
    User selectUser(int id);
}

在这个例子中,@Results注解用于定义结果映射,@Result注解用于映射字段。

2.3 混合映射

MyBatis允许开发者同时使用XML和注解进行映射,这种方式称为混合映射。开发者可以根据需要选择合适的映射方式。

public interface UserMapper {
    @Select("SELECT id, username, password FROM users WHERE id = #{id}")
    User selectUser(int id);

    @Select("SELECT id, username, password FROM users WHERE username = #{username}")
    User selectUserByUsername(@Param("username") String username);

    @Results({
        @Result(property = "id", column = "id"),
        @Result(property = "username", column = "username"),
        @Result(property = "password", column = "password")
    })
    @Select("SELECT id, username, password FROM users WHERE id = #{id}")
    User selectUserWithResultMap(int id);
}

在这个例子中,selectUserselectUserByUsername方法使用了注解映射,而selectUserWithResultMap方法使用了注解和结果映射。

3. MyBatis映射的高级特性

3.1 动态SQL

MyBatis提供了强大的动态SQL功能,允许开发者根据不同的条件生成不同的SQL语句。

<select id="selectUsers" resultType="com.allen.model.User">
    SELECT id, username, password
    FROM users
    <where>
        <if test="username != null">
            AND username = #{username}
        </if>
        <if test="password != null">
            AND password = #{password}
        </if>
    </where>
</select>

在这个例子中,<where>标签和<if>标签用于生成动态SQL语句。

3.2 关联映射

MyBatis支持一对一、一对多、多对多等关联映射。

<resultMap id="userResultMap" type="com.allen.model.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="password" column="password"/>
    <association property="role" javaType="com.allen.model.Role">
        <id property="id" column="role_id"/>
        <result property="name" column="role_name"/>
    </association>
</resultMap>

<select id="selectUserWithRole" resultMap="userResultMap">
    SELECT u.id, u.username, u.password, r.id as role_id, r.name as role_name
    FROM users u
    JOIN roles r ON u.role_id = r.id
    WHERE u.id = #{id}
</select>

在这个例子中,<association>标签用于映射一对一关联。

3.3 延迟加载

MyBatis支持延迟加载,可以在需要时才加载关联对象,从而提高性能。

<resultMap id="userResultMap" type="com.allen.model.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="password" column="password"/>
    <association property="role" javaType="com.allen.model.Role" select="selectRole" column="role_id" fetchType="lazy"/>
</resultMap>

<select id="selectUserWithRole" resultMap="userResultMap">
    SELECT id, username, password, role_id
    FROM users
    WHERE id = #{id}
</select>

<select id="selectRole" resultType="com.allen.model.Role">
    SELECT id, name
    FROM roles
    WHERE id = #{role_id}
</select>

在这个例子中,fetchType="lazy"表示延迟加载。

4. 总结

MyBatis作为一种灵活且强大的ORM框架,提供了多种映射方式,包括基于XML的映射、基于注解的映射以及混合映射。开发者可以根据项目需求选择合适的映射方式,并通过动态SQL、关联映射、延迟加载等高级特性进一步提升应用的性能和可维护性。

标签:username,映射,ORM,MyBatis,注解,password,id,详解
From: https://blog.csdn.net/weixin_39033358/article/details/144548794

相关文章

  • 跨链的基本流程和操作详解
    随着区块链技术的发展,越来越多的链(如以太坊、BSC、Solana等)开始承载各类去中心化应用(DApps)。然而,不同链之间的隔离性成为了阻碍生态协作的一大问题。在这种背景下,跨链桥作为连接不同链的重要工具,变得至关重要。本篇文章将详细介绍跨链的基本流程和操作。跨链的基本概念跨链是......
  • Linux常用命令之who命令详解
    who是Unix和Linux系统中的一个命令行工具,主要用于显示当前登录到系统的用户信息。它不仅能够列出所有活跃的用户会话,还可以提供有关这些会话的一些额外信息,如登录时间、使用的终端(TTY)、远程主机名或IP地址等。这对于系统管理员监控系统活动以及普通用户了解谁正在使......
  • 三维仿射变换(3D Affine Transformation)
    三维仿射变换(3DAffineTransformation)是对三维空间中的点、向量或几何体进行一系列几何变换的操作,这些变换通常包括旋转、平移、缩放、剪切等。仿射变换是比刚性变换(如旋转和平移)更一般的一类变换,它不仅保留点之间的直线性和比例关系,还能改变物体的大小、形状和位置。一、三维仿......
  • 模型参数量计算(以transformer为例)
    前言模型中常见的可训练层包括卷积层和线性层,这里将给出计算公式并在pytorch下进行验证。计算模型的参数:importtorch.nnasnndefcal_params(model:nn.Module):num_learnable_params=sum(p.numel()forpinmodel.parameters()ifp.requires_grad)num_non_l......
  • C#中HttpWebRequest的用法详解
    HttpWebRequest是一个常用的类,用于发送和接收HTTP请求。在C#中使用HttpWebRequest可以实现各种功能,包括发送GET和POST请求、处理Cookie、设置请求头、添加参数等 1、HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。2、命名空间:System.Net3、HttpWeb......
  • 基于Spring Boot + SSM(Spring + Spring MVC + MyBatis)+Vue+MySQL实现一个简单的用户管
    后端代码(SpringBoot+SSM部分)1.创建SpringBoot项目使用SpringInitializr(可以通过IDEA等IDE自带的创建SpringBoot项目功能,或者访问Spring官网的Initializr页面)创建一个基础的SpringBoot项目,添加相关依赖,比如Web(用于构建Web应用)、MyBatis、MyBatisSpringBootStarter、My......
  • C语言数组和字符数组和字符串详解
    数组的概念和定义我们知道,要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个int类型的内存空间:inta[4];这样,就在内存中分配了4个int类型的内存空间,共4×4=16个字节,并为它们起了一个名字,叫a。我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫......
  • 说说你对text-transform属性的理解
    text-transform属性在前端开发中用于控制文本的大小写形式。通过这个属性,开发者可以轻松地实现文本的大写、小写、首字母大写等效果,而无需手动修改文本内容。具体来说,text-transform属性有以下几个常用的取值:uppercase:将文本转换为大写形式。这意味着无论原始文本的大小写如何......
  • DevExpress WinForms中文教程:Grid View - 如何实现固定列?
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!GridViews允许您使用类似于MicrosoftExcel中的冻......
  • MyBatis Generator安装详细步骤
    1.准备工作确保你的系统已经安装了Java开发环境(JDK),并且配置好了相关的环境变量。因为MyBatisGenerator是一个Java工具,它依赖于Java运行环境来执行。你可以在命令行中输入java-version来检查JDK是否正确安装。2.添加依赖Maven项目如果你的项目是使用Maven构建的,需要在......