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

【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 对象的全限定类名。
  • idresult:
    • <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 文件&#xff08;.csv&#xff09; 普通的 Excel 文件&#xff08;.xlsx 或 .xls) 主要体现在 文件格式、数据存储、功能支持 等方面: 文件格式 比较项CSV 文件 (.csv)Excel 文件 (.xlsx/.xls)文件类型纯文本文件二进制或 XML 格式数据分隔逗号&#xff08;,&#xff09…...

使用 Vite + React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南

使用 Vite React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南 &#x1f31f; 前言一、创建 React 19 项目二、集成 Tailwind CSS1️⃣ 安装依赖2️⃣ 配置 Vite 插件3️⃣ 引入 Tailwind4️⃣ 启动项目 三、配置路径别名1️⃣ 修改 TypeScript 配置2️⃣ 安装类型声明3…...

【java】基本数据类型和引用数据类型

在 Java 中&#xff0c;数据类型分为 基本数据类型 和 引用数据类型。它们的本质区别在于存储方式和操作方式。下面我会详细解释这两种数据类型&#xff0c;并用通俗易懂的语言帮助你理解。 1. 基本数据类型&#xff08;Primitive Data Types&#xff09; 基本数据类型是 Java…...

mybatis-lombok工具包介绍

Lombok是一个实用的]ava类库&#xff0c;能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率。 使用前要加入Lombok依赖...

2. grafana插件安装并接入zabbix

一、在线安装 如果不指定安装位置&#xff0c;则默认安装位置为/var/lib/grafana/plugins 插件安装完成之后需要重启grafana 命令在上一篇讲到过 //查看相关帮助 [rootlocalhost ~]# grafana-cli plugins --help //从列举中的插件过滤zabbix插件 [rootlocalhost ~]# grafana…...

零基础学CocosCreator·第九季-网络游戏同步策略与ESC架构

课程里的版本好像是1.9&#xff0c;目前使用版本为3.8.3 开始~ 目录 状态同步帧同步帧同步客户端帧同步服务端ECS框架概念ECS的解释ECS的特点EntityComponentSystemWorld ECS实现逻辑帧&渲染帧 ECS框架使用帧同步&ECS 状态同步 一般游戏的同步策略有两种&#xff1a;…...

为什么配置Redis时候要序列化配置呢

序列化和反序列化&#xff1f;&#xff1a; 序列化&#xff1a;将对象转换为二进制数据&#xff0c;以便存储到Redis中。 反序列化&#xff1a;将Redis中的二进制数据转换回对象&#xff0c;以便在应用程序中使用。 1. 默认序列化器的问题 如果不配置序列化器&#xff0c;Re…...

使用爬虫获取1688商品分类:实战案例指南

在电商领域&#xff0c;获取商品分类信息对于市场分析、选品决策和竞争情报收集至关重要。1688作为国内领先的B2B电商平台&#xff0c;提供了丰富的商品分类数据。通过爬虫技术&#xff0c;我们可以高效地获取这些分类信息&#xff0c;为商业决策提供有力支持。 一、为什么选择…...

C#打印设计器

C# 打印设计器&#xff0c;功能强大却操作简单&#xff0c;小白也能快速上手&#xff01; 主要功能&#xff1a; 支持多种设计元素&#xff1a; 文字、图片、图形、二维码、条形码等&#xff0c;满足您多样化的设计需求。 灵活排版&#xff0c;精准定位&#xff1a; 支持拖拽…...

Codeforces Round 1004 (Div. 2)(A-E)

题目链接&#xff1a;Dashboard - Codeforces Round 1004 (Div. 2) - Codeforces A. Adjacent Digit Sums 思路 只有两种情况&#xff1a;n1之后没有进位&#xff0c;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 &#xff0c;意味“高性能的npm”。 pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”。 pnpm安装指令: npm i -g p…...

vscode调试redis

系统&#xff1a;ubuntu redis&#xff1a;redis-6.0.3 1.在vs中安装c/c编译插件 2.用vscode打开redis-6.0.3 3.在菜单中找到run->Add Configuration… 4.会在目录中生成一个./vscode目录&#xff0c;里面包含launch.json,修改launch.json中的program:${workspaceFolder}…...

Windows逆向工程入门之汇编指令格式与操作数类型

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、汇编指令格式基础 二、操作数类型详解 1. 立即数&#xff08;Immediate&#xff09; 2. 寄存器操作数&#xff08;Register&#xff09; 3. 内存操作数&#xff08;Memory&#…...

亚远景-ASPICE 4.0与敏捷开发:如何实现高效协同

ASPICE 4.0与敏捷开发的结合是汽车软件开发领域的重要趋势。通过合理融合&#xff0c;可以实现高效协同&#xff0c;提升软件开发的质量和效率。以下是实现高效协同的关键要点&#xff1a; 1. 理解ASPICE 4.0与敏捷开发的互补性 ASPICE 4.0强调软件开发过程的规范性、可追溯性…...

pptx文档提取信息

目录 一、前言二、python-pptx提取核心代码三、LibreOffice 转换pdf再提取的核心代码一、前言 pptx文档提取解析常用的库。 如果只需要解析 .pptx 的文本、表格、图片,推荐使用 python-pptx(开源,轻量级)。 如果需要高性能、支持 .ppt、动画、格式转换,推荐 Aspose.Slid…...

蓝桥杯篇---超声波距离测量频率测量

文章目录 简介第一部分&#xff1a;超声波的简介工作原理1.发射超声波2.接收反射波3.计算时间差4.计算距离 硬件连接1.Trig2.Echo 示例代码代码说明注意事项1.声速2.延时精度3.硬件连接 第二部分&#xff1a;频率测量简介频率测量原理1.信号输入2.计数3.计算频率 硬件连接示例代…...

ML.Net二元分类

ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ‌ML.NET‌是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…...

vite让每个scss文件自动导入某段内容

写了如下一个scss函数&#xff0c;希望自动导入到每个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 扩展&#xff0c;专门用于制作手机铃声。它支持裁剪音频文件的特定片段&#xff0c;并将其下载为 WAV 格式&#xff0c;方便我们在手机上使用。无论是想从一段长音频中截取精彩部分作为铃声&#xff0c;还是对现有的音频进行个…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...