当前位置: 首页 > news >正文

Mybatis的简单介绍

文章目录

        • MyBatis 简介
    • 1. MyBatis 核心特点
    • 2. MyBatis 核心组件
    • 3. MyBatis 基本使用示例
      • (1) 依赖引入(Maven)
      • (2) 定义 Mapper 接口
      • (3) 定义实体类
      • (4) 在 Service 层调用
    • 4. MyBatis 与 JPA/Hibernate 对比

MyBatis 简介

MyBatis 是一款优秀的 持久层框架(ORM 框架),它支持 定制化 SQL、存储过程以及高级映射,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解 来配置和映射数据库操作,使得 Java 开发者可以更专注于 SQL 本身,而不需要过多处理 JDBC 的繁琐操作。


1. MyBatis 核心特点

轻量级:相比 Hibernate,MyBatis 更加轻量,不强制使用特定的对象关系映射(ORM)方式。
灵活的 SQL 控制:开发者可以编写原生 SQL,优化复杂查询。
支持动态 SQL:提供 <if>, <choose>, <foreach> 等标签,便于构建动态查询。
易于集成:可以与 Spring、Spring Boot 无缝集成(如 mybatis-spring-boot-starter)。
缓存机制:支持一级缓存(SqlSession 级别)和二级缓存(Mapper 级别),提高查询性能。


2. MyBatis 核心组件

组件说明
SqlSessionFactory用于创建 SqlSession,是 MyBatis 的核心对象。
SqlSession代表一次数据库会话,用于执行 SQL 并获取映射结果。
Mapper 接口定义数据库操作的方法,MyBatis 会动态生成实现类。
Mapper XML存放 SQL 映射文件,定义 SQL 语句和结果映射规则。
Configuration存储 MyBatis 的所有配置信息(数据源、缓存、映射等)。

3. MyBatis 基本使用示例

(1) 依赖引入(Maven)

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>

(如果使用 Spring Boot 3.x,推荐 3.0.x 版本;Spring Boot 2.x 可用 2.3.x

(2) 定义 Mapper 接口

@Mapper // Spring Boot 会自动扫描并注册该接口
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(Long id);@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}

(也可以用 XML 方式定义 SQL)

(3) 定义实体类

public class User {private Long id;private String name;private String email;// getters & setters
}

(4) 在 Service 层调用

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.getUserById(id);}public void addUser(User user) {userMapper.insertUser(user);}
}

4. MyBatis 与 JPA/Hibernate 对比

特性MyBatisJPA/Hibernate
SQL 控制开发者完全控制 SQL自动生成 SQL,也可自定义
灵活性适合复杂查询适合标准 CRUD
学习曲线较简单较复杂(需掌握 JPA 规范)
性能优化手动优化 SQL自动优化,但可能不够灵活
适用场景需要精细控制 SQL 的项目快速开发、标准化的项目

过分简单了,后面会补充的。。

相关文章:

Mybatis的简单介绍

文章目录 MyBatis 简介 1. MyBatis 核心特点2. MyBatis 核心组件3. MyBatis 基本使用示例(1) 依赖引入&#xff08;Maven&#xff09;(2) 定义 Mapper 接口(3) 定义实体类(4) 在 Service 层调用 4. MyBatis 与 JPA/Hibernate 对比 MyBatis 简介 MyBatis 是一款优秀的 持久层框…...

山东大学软件学院创新项目实训(11)之springboot+vue项目接入deepseekAPI

因为该阶段是前后端搭建阶段&#xff0c;所以没有进大模型的专项训练&#xff0c;所以先用老师给的deepseek接口进行代替 且因为前端设计部分非本人负责且还没有提交到github上&#xff0c;所以目前只能先编写一个简易的界面进行功能的测试 首先进行创建model类 然后创建Cha…...

Qt绘图事件

目录 1.绘图事件 1.1绘图事件 1.2声明一个画家对象 2.画线、画圆、画矩形、画文字 2.1画线 ​编辑 2.2画圆 2.3画矩形 2.4画文字 3.设置画笔 3.1设置画笔颜色 3.2设置画笔宽度 3.3设置画笔风格 4.设置画刷 4.1填色 4.2设置画刷风格 5.绘图高级设置 5.1设置抗锯…...

Linux 内核 BUG: Android 手机 USB 网络共享 故障

众所周知, 窝日常使用 ArchLinux 操作系统, 而 ArchLinux 是一个滚动发行版本, 也就是各个软件包更新很快. 然而, 突然发现, Android 手机的 USB 网络共享功能 BUG 了. 经过一通排查, 发现是 Linux 内核造成的 BUG. 哎, 没办法, 只能自己动手修改内核代码, 修复 BUG 了. 本文…...

程序化广告行业(82/89):解锁行业术语,开启专业交流之门

程序化广告行业&#xff08;82/89&#xff09;&#xff1a;解锁行业术语&#xff0c;开启专业交流之门 在程序化广告这个充满活力与挑战的行业里&#xff0c;持续学习是我们不断进步的动力源泉。一直以来&#xff0c;我都期望能和大家一起深入探索这个领域&#xff0c;共同成长…...

Linux的网络配置的资料

目前有两种方式&#xff0c;network和NetworkManager。 network方式是在CentOS 6及更早版本中引入的配置方法&#xff0c;支持使用配置文件的方式管理网卡的配置。 NetworkManager是在CentOS 7及后续的版本中使用的配置方法&#xff0c;支持使用命令行和图形化界面的方式来管理…...

linux: 文件描述符fd

目录 1.C语言文件操作复习 2.底层的系统调用接口 3.文件描述符的分配规则 4.重定向 1.C语言文件操作复习 文件 内容 属性。所有对文件的操作有两部分&#xff1a;a.对内容的操作&#xff1b;b.对属性的操作。内容是数据&#xff0c;属性其实也是数据-存储文件&#xff0c…...

每天学一个 Linux 命令(16):mkdir

每天学一个 Linux 命令(16):mkdir 命令简介 mkdir(Make Directory)是 Linux 和类 Unix 系统中用于创建新目录的基础命令。它允许用户快速创建单个目录、多级嵌套目录,并能灵活设置目录权限。 主要用途 创建单个目录:快速生成新的空目录。递归创建多级目录:自动生成缺…...

Java微服务注册中心深度解析:环境隔离、分级模型与Eureka/Nacos对比

在微服务架构体系中&#xff0c;注册中心如同神经系统般承担着服务发现与健康管理的核心职能。本文将从生产环境实践出发&#xff0c;系统剖析注册中心的环境隔离策略、分级部署模型&#xff0c;并通过Eureka与Nacos两大主流组件的全方位对比&#xff0c;帮助开发者构建高可用服…...

c++:new关键字

目录 基本语法 使用举例 应用场景 使用 new 时的注意事项 基本语法 Type* ptr new Type;Type 是你要创建的类型&#xff08;可以是基本类型、结构体、类等&#xff09; new Type 表示在堆上创建一个 Type 类型的对象 ptr 是一个指针&#xff0c;指向这个对象 使用举例 …...

理解 MCP 协议的数据传递:HTTP 之上的一层“壳子

以下是以 CSDN 博客的风格记录你对 MCP 协议数据传递的理解和发现&#xff0c;内容涵盖了 MCP 协议基于 HTTP 的本质、JSON-RPC 的“壳子”作用&#xff0c;以及为什么熟悉 HTTP 协议就足以理解 MCP 的数据传递。文章面向技术社区&#xff0c;结构清晰&#xff0c;适合分享。 理…...

word中的mathtype公式编辑时,大(中)括号会存在很大的空白

如下所示&#xff0c;公式编辑的时候发现总会多一个空白&#xff0c;怎么删也删不掉 这主要是公式的分隔符问题&#xff0c;选择&#xff1a;“格式”-“分隔符对齐”&#xff0c;选择第三个可以消除下面的空白 点击“确认”&#xff0c;效果如下所示&#xff1a;...

【Java】查看当前 Java 使用的垃圾回收器

一、查询 Code import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import java.util.Arrays; import java.util.List;public class GCTypeDetector {public static void main(String[] args) {List<GarbageCollectorMX…...

Linux编程c/c++程序

前言 我们Windows系统下的idea可以说是非常智能了&#xff0c;集成了各种开发工具&#xff0c;包括并不限于编辑器/编译器/调试器/自动化构建工具/版本控制工具……而在Linux系统中&#xff0c;每个组件之间是相互独立的&#xff0c;每个组件各司其职&#xff0c;共同协作完成…...

【前端网络请求入门】XMLHttpRequest与Fetch保姆级教程

新手学前端时&#xff0c;经常会被「如何让网页和服务器说话」难住。今天我们用最通俗的语言&#xff0c;把浏览器最常用的两种网络请求方式——XMLHttpRequest和Fetch讲清楚&#xff0c;还会带完整的代码示例&#xff0c;跟着敲一遍就能上手&#xff01; 一、先搞懂「网络请求…...

redis单机安装

redis单机安装 下载地址 官网&#xff1a;https://redis.io/下载列表页面&#xff1a;https://download.redis.io/releases/ 说明 版本选择&#xff1a;redis-7.0.0.tar.gz下载地址&#xff1a;https://download.redis.io/releases/redis-7.0.0.tar.gz 安装前准备 在linu…...

从零手写RPC-version0

参考文档 https://github.com/he2121/MyRPCFromZero Version-0 0、写项目第一步&#xff0c;先添加远程仓库 先在 github 上新建仓库&#xff0c;然后将本地新建的项目推送到远程仓库中 由于网上很多教程&#xff0c;所以本节不再赘述&#xff08;可以让 chatGPT给出一个完…...

MOM成功实施分享(八)汽车活塞生产制造MOM建设方案(第二部分)

在制造业数字化转型的浪潮中&#xff0c;方案对活塞积极探索&#xff0c;通过实施一系列数字化举措&#xff0c;在生产管理、供应链协同、质量控制等多个方面取得显著成效&#xff0c;为行业提供了优秀范例。 1.转型背景与目标&#xff1a;活塞在数字化转型前面临诸多挑战&…...

二、Android Studio环境安装

一、下载安装 下载 Android Studio 和应用工具 - Android 开发者 | Android DevelopersAndroid Studio 提供了一些应用构建器以及一个已针对 Android 应用进行优化的集成式开发环境 (IDE)。立即下载 Android Studio。https://developer.android.google.cn/studio?hlzh-c…...

构件与中间件技术:概念、复用、分类及标准全解析

以下是对构件与中间件技术相关内容更详细的介绍&#xff1a; 一、构件与中间件技术的概念 1.构件技术 定义&#xff1a;构件是具有特定功能、可独立部署和替换的软件模块&#xff0c;它遵循一定的规范和接口标准&#xff0c;能够在不同的软件系统中被复用。构件技术就是以构…...

亲手打造可视化故事线管理工具:开发全流程、难点突破与开发过程经验总结

亲手打造可视化故事线管理工具&#xff1a;开发全流程、难点突破与开发过程经验总结 作为还没入门的业余编程爱好者&#xff0c;奋战了2天&#xff0c;借助AI开发一款FLASK小工具&#xff0c;功能还在完善中&#xff08;时间轴可以跟随关联图缩放&#xff0c;加了一个用C键控制…...

CSS 字体学习笔记

在网页设计中&#xff0c;字体的使用对于提升用户体验和页面美观性至关重要。CSS 提供了一系列字体属性&#xff0c;用于控制文本的显示效果。以下是对 CSS 字体属性的详细学习笔记。 一、字体系列&#xff08;font-family&#xff09; 1. 字体系列的分类 在 CSS 中&#xf…...

通过 spring ai 对接 deepseek ai 大模型通过向量数据库,完成 AI 写标书及构建知识库功能的设计与开发

AI写标书及知识库构建详细设计方案 一、系统架构设计 +-------------------+ +-------------------+ +-------------------+ | 用户交互层 | | AI服务层 | | 知识库存储层 | | (Web/API) |---->| (Spring AI) |---…...

cropperjs 2.0裁剪图片后转base64提示“Tainted canvases may not be exported”跨域问题的解决办法。

目录 为什么会有这边文章 辛酸历程&#xff0c;不看也罢 想解决问题&#xff0c;看这里就够了 问题已解决&#xff0c;后边还是废话 为什么会有这边文章 最近&#xff0c;做一个项目需要用在前端实现图片裁剪功能&#xff0c;毋庸置疑&#xff0c;cropperjs是不二选择。当在…...

2、JSX:魔法世界的通行证——用魔法符号编织动态界面

一、开篇&#xff1a;魔法符号的觉醒 "看呐&#xff0c;赫敏&#xff01;这根魔杖&#xff08;React组件&#xff09;为何能自动绘制出动态界面&#xff1f;"年轻的巫师学徒罗恩指着闪烁的屏幕惊呼。 "这就是JSX魔法阵的威力&#xff0c;"邓布利多校长挥舞…...

八大排序算法

目录 八大排序算法排序算法的稳定性比较排序插入排序直接插入排序希尔排序希尔排序的时间复杂度计算 选择排序直接选择排序堆排序 交换排序冒泡排序快速排序递归hoare版本挖坑法lomuto前后指针 非递归 归并排序排序性能对比 非比较排序计数排序 比较排序算法总结 八大排序算法 …...

搭建一个Spring Boot聚合项目

1. 创建父项目 打开IntelliJ IDEA&#xff0c;选择 New Project。 在创建向导中选择 Maven&#xff0c;确保选中 Create from archetype&#xff0c;选择 org.apache.maven.archetypes:maven-archetype-quickstart。 填写项目信息&#xff1a; GroupId&#xff1a;com.exampl…...

Google A2A协议解析:构建分布式异构多Agent系统

一、A2A 是什么&#xff1f;有什么用&#xff1f; 1.1 A2A 是什么&#xff1f; A2A&#xff08;Agent-to-Agent Protocol&#xff09;是Google最新推出的一项开源协议&#xff0c;旨在为AI智能体&#xff08;Agents&#xff09;提供标准化的通信方式。它允许不同框架&#xf…...

【Android读书笔记】读书笔记记录

文章目录 一. Android开发艺术探索1. Activity的生命周期和启动模式1.1 生命周期全面分析 一. Android开发艺术探索 1. Activity的生命周期和启动模式 1.1 生命周期全面分析 onPause和onStop onPause后会快速调用onStop&#xff0c;极端条件下直接调用onResume 当用户打开新…...

支持selenium的chrome driver更新到135.0.7049.84

最近chrome释放新版本&#xff1a;135.0.7049.84 如果运行selenium自动化测试出现以下问题&#xff0c;是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only su…...

【玩泰山派】MISC(杂项)- 使用vscode远程连接泰山派进行开发

文章目录 前言流程1、安装、启动sshd2、配置一下允许root登录3、vscode中配置1、安装remote插件2、登录 **注意** 前言 有时候要在开发板中写一写代码&#xff0c;直接在终端中使用vim这种工具有时候也不是很方便。这里准备使用vscode去通过ssh远程连接泰山派去操作&#xff0…...

利用阿里云企业邮箱服务实现Python群发邮件

目录 一、阿里云企业邮箱群发邮件全流程实现 1. 准备工作与环境配置 2. 收件人列表管理 3. 邮件内容构建 4. 附件添加实现 5. 邮件发送核心逻辑 二、开发过程中遇到的问题与解决方案 1. 附件发送失败问题 2. 中文文件名乱码问题 3. 企业邮箱认证失败 三、完整工作流…...

中文编码,GB系列,UTF

图片来源&#xff1a;https://zhuanlan.zhihu.com/p/701690894 文章目录 ASCIIGB系列编码UTF编码 ASCII American Standard Code for Information Interchange 一个字节&#xff0c;但其实只用了一半&#xff1a; 128个字符 GB系列编码 “国标” 和ASCII是兼容的。 GB2312…...

车载以太网-TLS

文章目录 车载以太网与TLS的技术背景核心定位车载以太网TLS的技术架构车载TLS的核心安全机制TLS报文结构详解TLS工作机制密钥交换与计算流程标题完整握手流程(1-RTT)数据传输加密流程车载TLS的独特优化策略车载TLS的安全威胁相关标准车载以太网TLS(Transport Layer Security…...

【大英赛】大英赛准备笔记

听力 总结 提醒专注 一题一个听力时&#xff0c;听是重点 抓紧时间往后审题 比较容易的部分&#xff1a;secA & secD中的dictation&#xff0c;在大致审当前的基础上&#xff0c;分别利用这个时间提前看后面的secB√& summery secA 听之前应当大致审选项&#x…...

有序数组的平方

暴力排序 每个数平方以后排个序 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int slow0,fast0;int nnums.size();while(fast<n){nums[slow]nums[fast]*nums[fast];fast;slow;}sort(nums.begin(),nums.end());return nums;} }…...

Python基于Django的房屋信息可视化及价格预测系统(附源码,文档说明)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

【5G-A学习】ISAC通信感知一体化学习小记

通信感知一体化&#xff08;Integrated Sensing and Communication, ISAC&#xff09;是一种将无线通信与环境感知功能深度融合的技术&#xff0c;通过共享硬件、频谱和信号处理流程&#xff0c;实现通信与感知的协同增效。其核心原理及无人机与飞鸟的识别方式如下&#xff1a;…...

深入解析@Validated注解:Spring 验证机制的核心工具

一、注解出处与核心定位 1. 注解来源 • 所属框架&#xff1a;Validated 是 Spring Framework 提供的注解&#xff08;org.springframework.validation.annotation 包下&#xff09;。 • 核心定位&#xff1a; 作为 Spring 对 JSR-380&#xff08;Bean Validation 2.0&#…...

学生考勤管理系统(jsp+ssh+mysql5.x)含文档

学生考勤管理系统&#xff08;jspsshmysql5.x&#xff09;含万字详细文档 学生考勤管理系统是一个用于管理学生出勤和请假的系统&#xff0c;系统登录页面提供账号和密码输入框&#xff0c;用户可以选择角色进行登录。系统主菜单包括班级管理、用户管理、课程表管理和考勤情况…...

【响应式编程】Reactor 常用操作符与使用指南

文章目录 一、创建操作符1. just —— 创建包含指定元素的流2. fromIterable —— 从集合创建 Flux3. empty —— 创建空的 Flux 或 Mono4. fromArray —— 从数组创建 Flux5. fromStream —— 从 Java 8 Stream 创建 Flux6. create —— 使用 FluxSink 手动发射元素7. generat…...

为什么我们需要if __name__ == __main__:

[目录] 0.前言 1.什么是 __name__&#xff1f; 2.if __name__ __main__: 的作用 3.为何Windows更需if __name__ &#xff1f;前言 if __name__ __main__: 是 Python 中一个非常重要的惯用法&#xff0c;尤其在使用 multiprocessing 模块或编写可导入的模块时。它的作用是区分…...

Week 1: Time Complexity, Rectangle Geometry

问题集 Square PastureBucket BrigadeBlocked BillboardBlocked Billboard IIWord ProcessorDo You Know Your ABCs?The Cow-SignalD3C - White Sheet 视频解析 Square Pasture Bucket Brigade Blocked Billboard Blocked Billboard II Word Processor Do You Know Your AB…...

论文学习:《通过基于元学习的图变换探索冷启动场景下的药物-靶标相互作用预测》

原文标题&#xff1a;Exploring drug-target interaction prediction on cold-start scenarios via meta-learning-based graph transformer 原文链接&#xff1a;https://www.sciencedirect.com/science/article/pii/S1046202324002470 药物-靶点相互作用&#xff08;DTI&…...

STM32 HAL库 OLED驱动实现

一、概述 1.1 OLED 显示屏简介 OLED&#xff08;Organic Light - Emitting Diode&#xff09;即有机发光二极管&#xff0c;与传统的 LCD 显示屏相比&#xff0c;OLED 具有自发光、视角广、响应速度快、对比度高、功耗低等优点。在嵌入式系统中&#xff0c;OLED 显示屏常被用…...

UE5蓝图之间的通信------接口

一、创建蓝图接口 二、双击创建的蓝图接口&#xff0c;添加函数&#xff0c;并重命名新函数。 三、在一个蓝图&#xff08;如玩家角色蓝图&#xff09;中实现接口&#xff0c;如下图&#xff1a; 步骤一&#xff1a;点击类设置 步骤二&#xff1a;在细节面板已经实现的接口中…...

封装Tcp Socket

封装Tcp Socket 0. 前言1. Socket.hpp2. 简单的使用介绍 0. 前言 本文中用到的Log.hpp在笔者的历史文章中都有涉及&#xff0c;这里就不再粘贴源码了&#xff0c;学习地址如下&#xff1a;https://blog.csdn.net/weixin_73870552/article/details/145434855?spm1001.2014.3001…...

深入解析 Android 图形系统:Canvas、Skia、OpenGL 与 SurfaceFlinger 的协作

在 Android 应用开发中&#xff0c;流畅的 UI 渲染是用户体验的核心。但你是否好奇&#xff0c;一个简单的 View 是如何从代码中的 onDraw() 方法一步步变成屏幕上的像素的&#xff1f;本文将从底层图形系统的视角&#xff0c;解析 Android 中 Canvas、Skia、OpenGL ES 和 Surf…...

LeetCode每日一题4.13

1922. 统计好数字的数目 问题 问题分析 题目要求我们找到长度为 n 且满足特定条件&#xff08;偶数下标处为偶数&#xff0c;奇数下标处为质数&#xff09;的数字字符串的总数&#xff0c;并对 (10^9 7) 取余。 思路 1.枚举 生成所有可能的数字字符串&#xff1a;对于长度…...

Java学习——day29(并发控制高级工具与设计模式)

文章目录 1. 并发控制高级工具简介1.1 CountDownLatch1.2 CyclicBarrier1.3 Semaphore1.4 并发设计模式 2. 扩展生产者—消费者示例2.1 示例代码 3. 代码详解3.1 主类 ExtendedProducerConsumerDemo3.2 Buffer 类3.3 Producer 类3.4 Consumer 类 4. 编译与运行结果4.1 编译4.2 …...