MyBatis 中的 SQL 映射文件如何配置参数映射,如何使用

news2024/11/25 9:47:09

MyBatis 中的 SQL 映射文件如何配置参数映射,如何使用

MyBatis 是一种开源的 Java 持久化框架,它可以自动将数据库中的数据映射到 Java 对象中,并且使得 Java 对象可以非常方便地存储到数据库中。在 MyBatis 中,SQL 映射文件是一个非常重要的组成部分,它可以为 Java 对象提供一个与数据库表的映射关系,并且可以配置参数映射,使得 Java 对象的属性可以被映射到 SQL 语句的参数中。本文将介绍 MyBatis 中 SQL 映射文件的参数映射配置和使用方法。

在这里插入图片描述

SQL 映射文件中的参数映射

在 SQL 映射文件中,参数映射是指将 Java 对象的属性映射到 SQL 语句的参数中。在 MyBatis 中,参数映射可以通过以下两种方式进行配置:

使用 #{} 占位符

在 SQL 语句中,我们可以使用 #{} 占位符来表示参数。例如,假设我们有一个 User 类,其中包含一个 id 属性和一个 name 属性:

public class User {
    private int id;
    private String name;

    // 省略 getter 和 setter 方法
}

我们可以在 SQL 语句中使用 #{} 占位符来表示 id 和 name 参数:

<select id="getUserById" resultType="User">
    SELECT * FROM users WHERE id = #{id} AND name = #{name}
</select>

在执行这个 SQL 语句时,MyBatis 会自动将 id 和 name 参数的值设置到 SQL 语句中的 #{} 占位符中。

使用 ${} 占位符

除了 #{} 占位符之外,我们还可以使用 KaTeX parse error: Expected 'EOF', got '#' at position 15: {} 占位符来表示参数。与 #̲{} 占位符不同的是,{} 占位符是直接将参数的值替换到 SQL 语句中。例如,假设我们有一个 Page 类,其中包含一个 offset 属性和一个 limit 属性:

public class Page {
    private int offset;
    private int limit;

    // 省略 getter 和 setter 方法
}

我们可以在 SQL 语句中使用 ${} 占位符来表示 offset 和 limit 参数:

<select id="getUsersByPage" resultType="User">
    SELECT * FROM users LIMIT ${offset}, ${limit}
</select>

在执行这个 SQL 语句时,MyBatis 会直接将 offset 和 limit 参数的值替换到 SQL 语句中的 ${} 占位符中。

使用参数类型别名

在 SQL 映射文件中,我们可以使用参数类型别名来简化参数映射的配置。参数类型别名可以让我们使用一个简短的名称来表示一个 Java 类型。

例如,我们可以使用以下方式定义一个 Page 类型的参数类型别名:

<typeAliases>
    <typeAlias type="com.example.Page" alias="page" />
</typeAliases>

然后,在 SQL 语句中,我们就可以使用 #{page.offset} 和 #{page.limit} 来表示 Page 类型的 offset 和 limit 属性:

<select id="getUsersByPage" resultType="User">
    SELECT * FROM users LIMIT #{page.offset}, #{page.limit}
</select>

SQL 映射文件中的参数映射使用

在配置好 SQL 映射文件中的参数映射后,我们可以通过以下两种方式来使用它们:

使用 Mapper 接口方法参数

在 Mapper 接口方法中,我们可以定义一个参数来接收 SQL 映射文件中配置的参数。例如,假设我们有一个 UserMapper 接口,其中包含一个 getUserById 方法:

public interface UserMapper {
    User getUserById(@Param("id") int id, @Param("name") String name);
}

在这个方法中,我们使用 @Param 注解来指定参数的名称。这个名称应该与 SQL 映射文件中的参数名称相同,以便 MyBatis 能够正确地将参数映射到 SQL 语句中。

使用动态 SQL 标签

除了使用 Mapper 接口方法参数之外,我们还可以使用动态 SQL 标签来使用 SQL 映射文件中的参数映射。动态 SQL 标签可以根据条件来动态生成 SQL 语句。

例如,假设我们有一个 UserMapper 接口,其中包含一个 getUsersByPage 方法:

public interface UserMapper {
    List<User> getUsersByPage(@Param("page") Page page);
}

在这个方法中,我们使用 @Param 注解来指定参数的名称。然后,在 SQL 映射文件中,我们可以使用 if 标签来根据 offset 和 limit 属性的值来生成动态 SQL 语句:

<select id="getUsersByPage" resultType="User">
    SELECT * FROM users
    <if test="page.offset != null and page.limit != null">
        LIMIT #{page.offset}, #{page.limit}
    </if>
</select>

在这个 SQL 映射文件中,我们使用了 if 标签来判断 offset 和 limit 属性的值是否为空。如果它们都不为空,就会生成一个 LIMIT 子句。

示例代码

下面是一个完整的 MyBatis SQL 映射文件的示例代码,包含了参数映射的配置和使用方法:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.UserMapper">

    <typeAliases>
        <typeAlias type="com.example.Page" alias="page" />
    </typeAliases>

    <select id="getUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id} AND name = #{name}
    </select>

    <select id="getUsersByPage" resultType="User">
        SELECT * FROM users
        <if test="page.offset != null and page.limit != null">
            LIMIT #{page.offset}, #{page.limit}
        </if>
    </select>

</mapper>
public class User {
    private int id;
    private String name;

    // 省略 getter 和 setter 方法
}

public class Page {
    private int offset;
    private int limit;

    // 省略 getter 和 setter 方法
}

public interface UserMapper {
    User getUserById(@Param("id") int id, @Param("name") String name);

    List<User> getUsersByPage(@Param("page") Page page);
}

在这个示例代码中,我们定义了一个 User 类和一个 Page 类,其中 User 类包含一个 id 属性和一个 name 属性,Page 类包含一个 offset 属性和一个 limit 属性。然后,我们定义了一个 UserMapper 接口,其中包含一个 getUserById 方法和一个 getUsersByPage 方法。

在 SQL 映射文件中,我们使用了参数类型别名来定义了一个 Page 类型的参数类型别名。然后,在 getUserById 方法中,我们使用了 #{} 占位符来表示 id 和 name 参数,在 getUsersByPage 方法中,我们使用了 if 标签来根据 offset 和 limit 属性的值来生成动态 SQL 语句。

总结

在 MyBatis 中,参数映射是一个非常重要的概念。通过配置参数映射,我们可以将 Java 对象的属性映射到 SQL 语句的参数中,在执行 SQL 语句时,MyBatis 会自动将参数的值设置到 SQL 语句中。在 MyBatis 中,参数映射可以通过 #{} 占位符、${} 占位符和参数类型别名来进行配置。在使用参数映射时,我们可以使用 Mapper 接口方法参数或者动态 SQL 标签来使用它们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tomcat之安装与项目部署

Tomcat是一个免费、开源的javaWeb轻量级应用服务器 优于是使用Java开发的&#xff0c;需要运行在java虚拟机中&#xff0c;所以必须安装jdk&#xff0c;以提供运行环境。 Tomcat可以看做一个http服务器&#xff0c;通过组件Connector接收http请求并解析&#xff0c;然后把结果…

Xmake v2.8.1 发布,大量细节特性改进

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…

hbuilderX 的使用

1 创建nui-app 点击左上角的文件点击新建-》项目&#xff0c;将信息填写完整点击确定 2 uni-modules 插件管理 通过 uni-app 插件市场 实现 uni-modules的插件安装&#xff0c;在插件市场搜索对应的插件名称&#xff0c;点击进去&#xff0c;点使用Hbuild’erX导入插件。详细…

Java 动态规划 64. 最小路径和

代码展示&#xff1a; dp[i][j]Math.min(dp[i-1][j],dp[i][j-1])grid[i-1][j-1]; 该题可以通过动态规划解决&#xff0c;动态规划的题根据以下的5大步骤便可轻松解决 1.状态表示 题目要求我们计算从起点到最后一个位置的最小路径和&#xff0c;我们可以创建一个dp表&#xff0c…

算法笔记: 相似性度量

1 欧氏距离 1.1 标准化欧氏距离 先将数据标准化 &#xff08;减去的均值两两抵消&#xff09; 2 曼哈顿距离 又称为城市街区距离 3 切比雪夫距离 等价形式 4 闵可夫斯基距离 minkowski 当p1时&#xff0c;就是曼哈顿距离 当p2时&#xff0c;就是欧氏距离 当p→∞时&#xf…

WSL安装与使用(Ubuntu22.04)

文章目录 概要WSL介绍WSL安装安装环境安装方式一&#xff1a;命令行安装(不推荐&#xff0c;可能出现奇怪的问题)安装方式二&#xff1a;通过控制面板安装 WSL 安装Ubuntu22.04&#xff08;通过Microsoft Store&#xff09;Ubuntu更换镜像源进入Ubuntu更换镜像源 Ubuntu安装Doc…

Spark-用IDEA编写wordcount demo

配置 Spark版本&#xff1a;3.2.0 Scala版本&#xff1a;2.12.12 JDK&#xff1a;1.8 Maven&#xff1a;3.6.3 pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&quo…

小红书笔记为什么没有流量,归纳总结

我们都知道小红书是一个内容分享类平台。小红书笔记是平台的主要内容形式。但有时候&#xff0c;我们撰写了一篇笔记&#xff0c;却无法搜索到&#xff0c;今天为大家分享下小红书笔记为什么没有流量&#xff0c;归纳总结&#xff01; 一、小红书笔记不被收录的原因 当我们精心…

Java 递归和非递归方式实现二叉树的前、中、后序遍历

文章目录 Node结点定义前序遍历递归方式实现非递归方式实现图文解读 最终结果 中序遍历递归方式实现非递归方式实现图文解读 最终结果 后序遍历递归方式实现非递归方式实现图文解读 最终结果 结语 Node结点定义 private static class Node {public int value;public Node left;…

Vue子组件向父组件传递消息

父子组件之间的通信&#xff1a;props与emit 通常提到props&#xff0c;都会想到的是父组件给子组件传值&#xff1b;提到emit为子组件向父组件发送消息&#xff0c;但其实&#xff0c;props也可以使子组件向父组件传递消息 方式为在父组件中通过为子组件绑定属性&#xff0c…

Docker之centos7环境离线安装

一、docker简介 Docker是一个开源的应用容器引擎&#xff0c;可以让开发者将应用及其依赖打包在一个虚拟的容器中&#xff0c;方便地部署、移植、升级和管理。Docker可以运行在Linux、Windows和MacOS等操作系统上&#xff0c;并且可以在不同的平台之间进行交互和迁移。Docker的…

ES 性能调优,这可能是全网最详细的 Elasticsearch 性能调优指南

文章目录 1、通用优化策略1.1 通用最小化法则1.2 职责单一原则1.3 其他 2、写性能调优2.1 基本原则2.2 优化手段2.2.1 增加 flush 时间间隔&#xff0c;2.2.2 增加refresh_interval的参数值2.2.3 增加Buffer大小&#xff0c;2.2.4 关闭副本2.2.5 禁用swap2.2.6 使用多个工作线程…

小奇猫物语之产品经理篇(1)

小奇猫物语之产品经理篇&#xff08;1&#xff09; 喵喵提示&#xff1a;看到标题后面的&#xff08;1&#xff09;了嘛&#xff1f;没错&#xff01;关于产品经理这方面&#xff0c;小奇会出一个系列哟&#xff0c;感谢各位铲屎官们的观看&#xff0c;欢迎提出指正和批评哦&a…

Springboot设置并访问静态资源目录

目录​​​​​​​ 静态文件 application设置方法 配置详解 编写配置 优缺点 设置配置类方法 配置详解 编写配置 优缺点 总结 静态文件 静态资源&#xff0c;一般是网页端的&#xff1a;HTML文件、JavaScript文件和图片。尤其是设置图片的静态资源&#xff0c;尤其重…

浅谈消防应急照明和疏散指示系统在建筑物中的设计与应用

安科瑞 华楠 摘 要&#xff1a;在消防安全意识逐渐提高的背景下&#xff0c;安全疏散技术也取得了不断发展。基于这种认识&#xff0c;本文对建筑物消防应急照明和疏散指示系统进行了介绍&#xff0c;然后对系统设计与应用方法展开了探讨&#xff0c;为关注这一话题的人们提供…

Linux--查看常驻进程:ps

进程分为瞬时进程和常驻进程 瞬时进程&#xff1a;瞬间完成从加载到内存、显示在输出设备、退出过程 int main() {printf("hello world!\n");return 0; } 常驻进程&#xff1a;一直在内存中 int main() {while (1){printf("hello world!\n");sleep(1);…

Java 动态规划 Leetcode 931. 下降路径最小和

代码展示: class Solution {public int minFallingPathSum(int[][] matrix) {int nmatrix.length;//创建dp数组int[][]dpnew int[n1][n2];//初始化for(int i1;i<n;i){dp[i][0]dp[i][n1]Integer.MAX_VALUE;}//填充数组for(int i1;i<n;i){for(int j1;j<n;j){dp[i][j]Ma…

【网络安全】Burpsuite v2021.12.1安装激活配置快捷启动

Burpsuite v2021.12.1安装&激活&配置&快捷启动 一、下载激活包二、配置JDK11三、启动激活 一、下载激活包 需要下载的内容&#xff1a; Burp Suite jar包JDK11激活jar包汉化jar包 下面是已经下载好的&#xff0c;可以直接使用 BurpSuite网盘下载链接 提取码&#…

单键触摸开关/双键触摸式照明灯/触摸式延时照明灯电路设计

单键触摸开关 触摸式照明开关是一种非常实用的电子开关&#xff0c;用手触摸一下导电片&#xff0c;就能实现开关动作 &#xff0c;使用方便可靠、电路简单、性能稳定、寿命长、节电效果明显。适合于爱好者自制。 一、电路工作原理 电路原理如图 21 所示。 接通电源后&#…

RabbitMQ ---- Hello World

RabbitMQ ---- Hello World 1. 依赖2. 消息生产者3. 信息消费者 本节使用 Java 编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。 1. 依赖 <!--指定 jdk 编译版本--><build><plugins><plugin><groupId>org.apache.maven.plu…