【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
mybatis 的常用配置
配置数据库连接
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test
characterEncoding=utf8&useSSL=false
#连接数据库的名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root
打印志
#指定mybatis输出志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
开启驼峰命名
mybatis:
configuration:
map-underscore-to-camel-case: true #配置驼峰动转换
MyBatis 的 XML 件配置
# 配置 mybatis xml 的件路径,在 resources/mapper 创建所有表的 xml 件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml
Spring 通过注解方式操作 mybatis
MyBatis 是一个强大的 Java 数据持久化框架,可通过注解简化 SQL 操作。下面将详细介绍几个常用的 MyBatis 注解及其用法,包括@Mapper、@Select、@Insert、@Options、@Delete、@Update、@Results和@ResultMap。
1. @Mapper
@Mapper注解用于标识一个接口为 MyBatis 的 Mapper 接口。该注解使 MyBatis 能够找到并生成实现类。
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper {// 方法定义
}
2. @Select
@Select注解用于定义 SQL 查询。可以在接口方法上直接指定查询语句。
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(int id);
}
3. @Insert
@Insert注解用于执行插入操作。与@Select类似,可以在方法上直接编写插入 SQL 语句。
import org.apache.ibatis.annotations.Insert;@Mapper
public interface UserMapper {@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")void insertUser(User user);
}
4. @Options
@Options注解用于配置执行 SQL 语句时的选项,比使用生成的主键值、指定更新用的 SQL 类型等。
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;@Mapper
public interface UserMapper {@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}
5. @Delete
@Delete注解用于定义删除操作的 SQL 语句。
import org.apache.ibatis.annotations.Delete;@Mapper
public interface UserMapper {@Delete("DELETE FROM users WHERE id = #{id}")void deleteUser(int id);
}
6. @Update
@Update注解用于定义更新操作的 SQL 语句。
import org.apache.ibatis.annotations.Update;@Mapper
public interface UserMapper {@Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")void updateUser(User user);
}
7. @Results
@Results注解用于定义查询结果的映射关系。通常与@Select一起使用,可以指定将 SQL 查询结果中的列映射到对象的属性。
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")@Results({@Result(property = "name", column = "name"),@Result(property = "age", column = "age")})User getUserById(int id);
}
8. @ResultMap
@ResultMap注解可以用来引用已定义的结果集映射。它提供了一种更灵活的方式来重用映射,特别是在多个查询中使用相同的结果映射时。
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;@Mapper
public interface UserMapper {@Results(id = "userResultMap", value = {@Result(property = "id", column = "id"),@Result(property = "name", column = "name"),@Result(property = "age", column = "age")})User getUserById(int id);@Select("SELECT * FROM users WHERE age > #{age}")@ResultMap("userResultMap")List<User> getUsersOlderThan(int age);
}
Spring 通过XML方式操作 mybatis
使用 MyBatis 通过 XML 方式进行数据库操作是一个常见的模式。以下是通过 XML 配置 MyBatis 的基本步骤和示例,包括如何配置 MyBatis、映射 SQL 语句以及进行数据库操作的步骤。
1. 添加 MyBatis 依赖
如果你使用 Maven,可以在pom.xml中添加 MyBatis 的依赖:
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version> <!-- 请根据需要选择版本 -->
</dependency>
2. 创建 MyBatis 配置文件
创建一个mybatis-config.xml文件,用于 MyBatis 的全局配置。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/your_database"/><property name="username" value="your_username"/><property name="password" value="your_password"/></dataSource></environment></environments><mappers><mapper resource="path/to/YourMapper.xml"/></mappers>
</configuration>
3. 创建 Mapper XML 文件
创建一个 Mapper XML 文件,例如YourMapper.xml,定义 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.mapper.YourMapper"><select id="selectUserById" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select><insert id="insertUser" parameterType="com.example.model.User">INSERT INTO users (name, age) VALUES (#{name}, #{age})</insert></mapper>
4. 创建实体类
创建一个与数据库表对应的实体类,例如User.java:
package com.example.model;public class User {private int id;private String name;private int age;// Getters and Setters
}
5. 创建 Mapper 接口
为了使用 MyBatis 提供的方法,需要创建一个 Mapper 接口,例如YourMapper.java:
package com.example.mapper;import com.example.model.User;
import java.util.List;public interface YourMapper {User selectUserById(int id);void insertUser(User user);
}
6. 使用 MyBatis 进行数据库操作
在你的主程序中,使用 SqlSessionFactory 和 SqlSession 来进行数据库操作。
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.Reader;public class Main {public static void main(String[] args) {try {// 读取 mybatis-config.xml 配置文件Reader reader = Resources.getResourceAsReader("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);// 获取 SqlSessiontry (SqlSession sqlSession = sqlSessionFactory.openSession()) {YourMapper mapper = sqlSession.getMapper(YourMapper.class);// 插入用户User newUser = new User();newUser.setName("Alice");newUser.setAge(25);mapper.insertUser(newUser);sqlSession.commit(); // 提交事务// 查询用户User user = mapper.selectUserById(1);System.out.println(user.getName());}} catch (IOException e) {e.printStackTrace();}}
}
定义数据库字段与Java属性的映射
在 MyBatis 中,通过 XML 文件定义数据库字段和 Java 属性的映射是实现数据持久化的重要步骤。这个映射过程允许你将 SQL 结果集中的列与 Java 对象的属性相对应,确保数据在两者之间正确转换。
1. 创建数据库表和 Java 实体类
假设有一个数据库表users,其结构如下:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(100),password VARCHAR(100),email VARCHAR(100)
);
我们将创建一个与该表对应的 Java 实体类User:
package com.example.model;public class User {private int id;private String username;private String password;private String email;// Getters and Setterspublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}
2. 定义 Mapper XML 文件进行映射
在 Mapper XML 文件中,使用resultMap元素来定义 SQL 查询结果与 Java 对象字段之间的映射关系。下面是一个示例的UserMapper.xml文件:
<?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.mapper.UserMapper"><!-- 定义结果映射 --><resultMap id="userResultMap" type="com.example.model.User"><id property="id" column="id"/><result property="username" column="username"/><result property="password" column="password"/><result property="email" column="email"/></resultMap><!-- 使用结果映射进行查询 --><select id="selectUserById" resultMap="userResultMap">SELECT id, username, password, email FROM users WHERE id = #{id}</select><!-- 插入用户 --><insert id="insertUser" parameterType="com.example.model.User">INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})</insert></mapper>
3. 解释映射的元素
resultMap: 用于定义一组映射规则,id为映射的唯一标识符,type指定要映射到的 Java 对象的全限定类名。id和result:<id property="id" column="id"/>指定了主键的映射关系。property对应 Java 对象的属性名,column对应数据库表中的列名。<result property="username" column="username"/>表示将数据库中username列的值映射到 Java 对象的username属性上。
相关文章:
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
mybatis 的常用配置 配置数据库连接 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_test characterEncodingutf8&useSSLfalse #连接数据库的名 spring.datasourc…...
CSV格式和普通EXCEL格式文件的区别
CSV 文件(.csv) 普通的 Excel 文件(.xlsx 或 .xls) 主要体现在 文件格式、数据存储、功能支持 等方面: 文件格式 比较项CSV 文件 (.csv)Excel 文件 (.xlsx/.xls)文件类型纯文本文件二进制或 XML 格式数据分隔逗号(,)…...
使用 Vite + React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南
使用 Vite React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南 🌟 前言一、创建 React 19 项目二、集成 Tailwind CSS1️⃣ 安装依赖2️⃣ 配置 Vite 插件3️⃣ 引入 Tailwind4️⃣ 启动项目 三、配置路径别名1️⃣ 修改 TypeScript 配置2️⃣ 安装类型声明3…...
【java】基本数据类型和引用数据类型
在 Java 中,数据类型分为 基本数据类型 和 引用数据类型。它们的本质区别在于存储方式和操作方式。下面我会详细解释这两种数据类型,并用通俗易懂的语言帮助你理解。 1. 基本数据类型(Primitive Data Types) 基本数据类型是 Java…...
mybatis-lombok工具包介绍
Lombok是一个实用的]ava类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。 使用前要加入Lombok依赖...
2. grafana插件安装并接入zabbix
一、在线安装 如果不指定安装位置,则默认安装位置为/var/lib/grafana/plugins 插件安装完成之后需要重启grafana 命令在上一篇讲到过 //查看相关帮助 [rootlocalhost ~]# grafana-cli plugins --help //从列举中的插件过滤zabbix插件 [rootlocalhost ~]# grafana…...
零基础学CocosCreator·第九季-网络游戏同步策略与ESC架构
课程里的版本好像是1.9,目前使用版本为3.8.3 开始~ 目录 状态同步帧同步帧同步客户端帧同步服务端ECS框架概念ECS的解释ECS的特点EntityComponentSystemWorld ECS实现逻辑帧&渲染帧 ECS框架使用帧同步&ECS 状态同步 一般游戏的同步策略有两种:…...
为什么配置Redis时候要序列化配置呢
序列化和反序列化?: 序列化:将对象转换为二进制数据,以便存储到Redis中。 反序列化:将Redis中的二进制数据转换回对象,以便在应用程序中使用。 1. 默认序列化器的问题 如果不配置序列化器,Re…...
使用爬虫获取1688商品分类:实战案例指南
在电商领域,获取商品分类信息对于市场分析、选品决策和竞争情报收集至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品分类数据。通过爬虫技术,我们可以高效地获取这些分类信息,为商业决策提供有力支持。 一、为什么选择…...
C#打印设计器
C# 打印设计器,功能强大却操作简单,小白也能快速上手! 主要功能: 支持多种设计元素: 文字、图片、图形、二维码、条形码等,满足您多样化的设计需求。 灵活排版,精准定位: 支持拖拽…...
Codeforces Round 1004 (Div. 2)(A-E)
题目链接:Dashboard - Codeforces Round 1004 (Div. 2) - Codeforces A. Adjacent Digit Sums 思路 只有两种情况:n1之后没有进位,y-x1。n1之后进位(y-x-1)%90。 代码 void solve(){int x,y;cin>>x>>y;if(y-x1){cout<<…...
pnpm的使用
pnpm的使用 1.安装和使用2.统一包管理工具下载依赖 1.安装和使用 pnpm:performant npm ,意味“高性能的npm”。 pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”。 pnpm安装指令: npm i -g p…...
vscode调试redis
系统:ubuntu redis:redis-6.0.3 1.在vs中安装c/c编译插件 2.用vscode打开redis-6.0.3 3.在菜单中找到run->Add Configuration… 4.会在目录中生成一个./vscode目录,里面包含launch.json,修改launch.json中的program:${workspaceFolder}…...
Windows逆向工程入门之汇编指令格式与操作数类型
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 一、汇编指令格式基础 二、操作数类型详解 1. 立即数(Immediate) 2. 寄存器操作数(Register) 3. 内存操作数(Memory&#…...
亚远景-ASPICE 4.0与敏捷开发:如何实现高效协同
ASPICE 4.0与敏捷开发的结合是汽车软件开发领域的重要趋势。通过合理融合,可以实现高效协同,提升软件开发的质量和效率。以下是实现高效协同的关键要点: 1. 理解ASPICE 4.0与敏捷开发的互补性 ASPICE 4.0强调软件开发过程的规范性、可追溯性…...
pptx文档提取信息
目录 一、前言二、python-pptx提取核心代码三、LibreOffice 转换pdf再提取的核心代码一、前言 pptx文档提取解析常用的库。 如果只需要解析 .pptx 的文本、表格、图片,推荐使用 python-pptx(开源,轻量级)。 如果需要高性能、支持 .ppt、动画、格式转换,推荐 Aspose.Slid…...
蓝桥杯篇---超声波距离测量频率测量
文章目录 简介第一部分:超声波的简介工作原理1.发射超声波2.接收反射波3.计算时间差4.计算距离 硬件连接1.Trig2.Echo 示例代码代码说明注意事项1.声速2.延时精度3.硬件连接 第二部分:频率测量简介频率测量原理1.信号输入2.计数3.计算频率 硬件连接示例代…...
ML.Net二元分类
ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ML.NET是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…...
vite让每个scss文件自动导入某段内容
写了如下一个scss函数,希望自动导入到每个scss文件里面 vite.config.ts里面如下配置 import fs from fsconst filePath resolve(__dirname, ./src/assets/css/index.scss);const Minxcss fs.readFileSync(filePath, utf8); css: {preprocessorOptions: {scss: {…...
分享一个使用的音频裁剪chrome扩展-Ringtone Maker
一、插件简介 铃声制作器是一个简单易用的 Chrome 扩展,专门用于制作手机铃声。它支持裁剪音频文件的特定片段,并将其下载为 WAV 格式,方便我们在手机上使用。无论是想从一段长音频中截取精彩部分作为铃声,还是对现有的音频进行个…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
