MyBatis 实战之 Mapper 注解详解

news2024/10/4 15:34:57

一、Mapper 接口注解

MyBatis 是一个流行的 Java 数据持久层框架,它允许使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。

在 MyBatis 中,Mapper 接口用于定义与数据库交互的方法,而注解如 @Select、@Insert、@Update 和 @Delete 等则用于直接在接口方法上声明 SQL 语句。
常用注解的使用示例

1. @Select

用于执行 SQL 查询操作。


import org.apache.ibatis.annotations.Select;  
 
public interface UserMapper {  
      
    @Select("SELECT * FROM users WHERE id = #{id}")  
    User getUserById(int id);  
}

2. @Insert

用于执行 SQL 插入操作。


import org.apache.ibatis.annotations.Insert;  
 
public interface UserMapper {  
      
    @Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")  
    void insertUser(User user);  
}

3. @Update

用于执行 SQL 更新操作。


import org.apache.ibatis.annotations.Update;  
 
public interface UserMapper {  
      
    @Update("UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}")  
    void updateUser(User user);  
}

4. @Delete

用于执行 SQL 删除操作。


import org.apache.ibatis.annotations.Delete;  
 
public interface UserMapper {  
      
    @Delete("DELETE FROM users WHERE id=#{id}")  
    void deleteUserById(int id);  
}

5. @Results 和 @Result

用于映射结果集的列到对象的属性。虽然它们不是直接用于 SQL 操作,但通常在 @Select 注解中使用来定义结果集的映射。这里添加一个使用 DTO 类型的示例。


import org.apache.ibatis.annotations.Result;  
import org.apache.ibatis.annotations.Results;  
import org.apache.ibatis.annotations.Select;  
 
public interface UserMapper {  
      
    @Select("SELECT id, name, email FROM users WHERE id = #{id}")  
    @Results({  
        @Result(property = "userId", column = "id"),  
        @Result(property = "userName", column = "name"),  
        @Result(property = "userEmail", column = "email")  
    })  
    UserDTO getUserByIdWithDTO(int id);  
}  
 
// 定义一个 DTO 类  
public class UserDTO {  
    private int userId;  
    private String userName;  
    private String userEmail;  
 
    // getters and setters  
}

在这个例子中,getUserByIdWithDTO 方法不仅执行查询操作,还使用 @Results@Result 注解来将结果集的列映射到 UserDTO 对象的属性。注意,DTO 类的属性名(如 userId、userName 和 userEmail)可能与数据库表的列名不同,这里通过 @Result 注解的 propertycolumn 属性来指定映射关系。

二、使用 MyBatis Mapper 接口的步骤

  1. 定义 Mapper 接口:在接口中定义方法并使用注解来配置 SQL 语句。
  2. 配置 MyBatis:在 MyBatis 配置文件中注册 Mapper 接口(或使用 Java 配置类)。
  3. 使用 SqlSessionFactory:通过 SqlSessionFactory 获取 SqlSession,然后使用 SqlSession 获取 Mapper 接口的实例。
  4. 调用 Mapper 方法:通过 Mapper 接口的实例调用方法执行数据库操作。

示例代码


import org.apache.ibatis.session.SqlSession;  
import org.apache.ibatis.session.SqlSessionFactory;  
  
public class MyBatisExample {  
  
    public static void main(String[] args) {  
        SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();  
        try (SqlSession session = sqlSessionFactory.openSession()) {  
            UserMapper userMapper = session.getMapper(UserMapper.class);  
            UserDTO userDTO = userMapper.getUserByIdWithDTO(1);  
            System.out.println(userDTO);  
        }  
    }  
}

在这个示例中,MyBatisUtil 是一个工具类,用于获取 SqlSessionFactory 实例。需要根据 MyBatis 配置来实现这个工具类。通过这种方式,可以使用 MyBatis 的注解来简化数据库操作的配置,并使用 DTO 类来封装查询结果。

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

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

相关文章

6 个 Java 工具,轻松分析定位 JVM 问题

使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具,帮助查看 JVM 的一些信息。比如,在机器上运行 ls 命令,可以看到 JDK 8 提供了非常多的工具或程序: 接下来介绍些常用的监控工具。也可以先通过下面这张图…

buuctf[安洵杯 2019]easy misc1

解压的一个文件夹和图片一个,zip压缩包有密码 FLAG IN ((√2524921X8552)15-1794)NNULLULL, ((√2524921X8552)15-1794)7 我用passware kit 2022 所以试试7数字NNULLULL,掩码(mask)攻击试试 mask :?d?d?d?d?d?d?dNNULLU…

基于SSM的Java在线音乐平台

文未可获取一份本项目的java源码和数据库参考。 Java在线音乐平台是基于Java Web,依据Java语言功能性强大和简单易用的两大特点,实现的一个网上音乐平台。该平台包含了前台功能(用户层面)以及后台管理系统(管理员层面&…

报刊订阅系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,报刊类型管理,报刊信息管理,报刊订阅管理,订阅发送管理,系统管理 微信端账号功能包括:系统首页,报刊信息&a…

vector 的使用(上)

1.概念 vector本质是顺序表。它像数组一样,用一块连续的空间对数据进行管理,但又区别于数组,它的空间是根据数据进行动态增容的,并封装了一系列成员变量对数据进行监控,封装成员函数对数据进行操作。 2.区别 vector…

Excel数据分析!开启数据洞察之门

Excel数据分析!开启数据洞察之门 前言Excel数据分析 前言 Excel,这款我们都耳熟能详的办公软件,在数据分析的舞台上,扮演着至关重要的角色。它不仅仅是一个简单的电子表格工具,更是我们开启数据洞察之门的一把钥匙。 …

深度学习的应用综述

文章目录 引言深度学习的基本概念深度学习的主要应用领域计算机视觉自然语言处理语音识别强化学习医疗保健金融分析 深度学习应用案例公式1.损失函数(Loss Function) 结论 引言 深度学习是机器学习的一个子领域,通过模拟人脑的神经元结构来处理复杂的数据。近年来&…

又放大招!2024 OpenAI 开发者日总结:实时 API、提示词缓存、模型蒸馏与视觉微调等多项技术革新

在全球开发者翘首以盼中,OpenAI 于 2024 年 10 月 1 日在旧金山举办了年度开发者日活动。与往年不同,今年的活动并未发布全新的模型,取而代之的是多项面向开发者的 API 能力提升和工具更新。本文将深入剖析 OpenAI 在开发者日中亮相的几项重要…

中伟视界:精准计数,智能预警,矿山罐笼管理迈入AI时代

矿山罐笼乘员超限检测AI算法工作原理,有哪些参数需要考虑的?及其应用效果如何? 矿山罐笼乘员超限检测AI算法工作过程是设置罐笼一次乘坐人数,系统设置检测框,系统计数从一端进入后从另一端出去的人数,累积人…

五子棋双人对战项目(6)——对战模块(解读代码)

目录 一、约定前后端交互接口的参数 1、房间准备就绪 (1)配置 websocket 连接路径 (2)构造 游戏就绪 的 响应对象 2、“落子” 的请求和响应 (1)“落子” 请求对象 (2)“落子…

如何使用ssm实现基于java的实验室设备管理系统

TOC ssm768基于java的实验室设备管理系统jsp 绪论 1.1研究背景与意义 1.1.1研究背景 近年来,第三产业发展非常迅速,诸如计算机服务、旅游、娱乐、体育等服务行业,对整个社会的经济建设起到了极大地促进作用,这一点是毋庸置疑…

SpringBoot与舞蹈艺术:古典舞在线交流平台开发记

第二章 相关技术介绍 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译&#xf…

【基础算法总结】链表篇

目录 一, 链表常用技巧和操作总结二,算法原理和代码实现2.两数相加24.两两交换链表中的节点143.重排链表23.合并k个升序链表25.k个一组翻转链表 三,算法总结 一, 链表常用技巧和操作总结 有关链表的算法题也是一类常见并且经典的题…

案例-猜数字游戏

文章目录 效果展示初始画面演示视频 代码区 效果展示 初始画面 演示视频 猜数字游戏 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

【题解】【动态规划,最长上升子序列LIS】—— [CSP-J 2022] 上升点列

【题解】【动态规划&#xff0c;最长上升子序列LIS】—— [CSP-J 2022] 上升点列 [CSP-J 2022] 上升点列题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2 提示 1.题意解析2.AC代码 [CSP-J 2022] 上升点列 通往洛谷的传送门 题目描述 在一个二维平面内&am…

GAMES101(19节,相机)

相机 synthesis合成成像&#xff1a;比如光栅化&#xff0c;光线追踪&#xff0c;相机是capture捕捉成像&#xff0c; 但是在合成渲染时&#xff0c;有时也会模拟捕捉成像方式&#xff08;包括一些技术 动态模糊 / 景深等&#xff09;&#xff0c;这时会有涉及很多专有名词&a…

确保接口安全:六大方案有效解决幂等性问题

文章目录 六大方案解决接口幂等问题什么是接口幂等&#xff1f;天然幂等不做幂等会怎么样&#xff1f; 解决方案1&#xff09;insert前先select2&#xff09;使用唯一索引3&#xff09;去重表加悲观锁4&#xff09;加乐观锁之版本号机制5&#xff09;使用 Redisson 分布式锁6&a…

银河麒麟系统内存清理

银河麒麟系统内存清理 1、操作步骤2、注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 当银河麒麟系统运行较长时间&#xff0c;内存中的缓存可能会积累过多&#xff0c;影响系统性能。此时&#xff0c;你可以通过简单的命令来清理这…

问:LINUXWINDOWS线程CPU时间如何排序?

Linux 在Linux上&#xff0c;你可以使用ps命令结合sort命令来查看和排序进程或线程的CPU使用时间。 查看进程的CPU使用时间并按时间排序 使用ps命令的-o选项可以自定义输出格式&#xff0c;-e选项表示显示所有进程&#xff0c;--sort选项用于排序。 ps -e -o pid,tid,comm,…

排序大全(干货)

目录 1. 插入排序步骤&#xff1a; 2.选择排序思路&#xff1a;每次从待排序列中选出一个最小值&#xff0c;然后放在序列的起始位置&#xff0c;直到全部待排数据排完即可。实际上&#xff0c;我们可以一趟选出两个值&#xff0c;一个最大值一个最小值&#xff0c;然后将其放…