mybatis 增删改查

MyBatis 是一种持久化框架,主要用于简化数据库访问代码的编写。它允许开发者使用 XML 或注解来配置 SQL 映射,并提供了自动将数据库操作映射到 Java 对象的功能。以下是 MyBatis 中的基本增删改查操作的示例:

 1. 增加(Insert):

使用 MyBatis 进行插入操作时,通常需要编写一个对应的 SQL 映射。

XML 映射文件:

xml
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">

  <insert id="insertUser" parameterType="com.example.User">
    INSERT INTO users (id, username, email) VALUES (#{id}, #{username}, #{email})
  </insert>

</mapper>


Java 代码:

java
// User.java
package com.example;

public class User {
  private int id;
  private String username;
  private String email;

  // getters and setters
}

// UserMapper.java
package com.example;

public interface UserMapper {
  void insertUser(User user);
}


 2. 删除(Delete):

XML 映射文件:

xml
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">

  <delete id="deleteUserById" parameterType="int">
    DELETE FROM users WHERE id = #{id}
  </delete>

</mapper>


Java 代码:

java
// UserMapper.java
package com.example;

public interface UserMapper {
  void deleteUserById(int userId);
}


 3. 更新(Update):

XML 映射文件:

xml
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">

  <update id="updateUser" parameterType="com.example.User">
    UPDATE users SET username = #{username}, email = #{email} WHERE id = #{id}
  </update>

</mapper>


Java 代码:

java
// UserMapper.java
package com.example;

public interface UserMapper {
  void updateUser(User user);
}


 4. 查询(Select):

XML 映射文件:

xml
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">

  <select id="getUserById" parameterType="int" resultType="com.example.User">
    SELECT * FROM users WHERE id = #{id}
  </select>

</mapper>


Java 代码:

java
// UserMapper.java
package com.example;

public interface UserMapper {
  User getUserById(int userId);
}


以上示例中,User 类表示数据库表的结构,UserMapper 接口定义了数据库操作的方法,而 XML 映射文件则包含了相应的 SQL 语句。在实际应用中,你需要在 MyBatis 的配置文件中指定这些映射文件,并使用 SqlSessionFactory 和 SqlSession 来执行数据库操作。

在使用 MyBatis 进行数据库操作时,通常会有一个 Service 层来处理业务逻辑,而 Controller 层负责处理用户请求和响应。以下是一个简单的 Spring MVC 的示例,演示了如何在 Controller 中调用 MyBatis Service。

假设你有一个名为 `UserService` 的服务类,该类包含了前面提到的 MyBatis 操作方法,然后你可以在 Controller 中注入并调用该服务类。

 1. Service 类:

java
// UserService.java
package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

  @Autowired
  private UserMapper userMapper;

  public void addUser(User user) {
    userMapper.insertUser(user);
  }

  public void deleteUserById(int userId) {
    userMapper.deleteUserById(userId);
  }

  public void updateUser(User user) {
    userMapper.updateUser(user);
  }

  public User getUserById(int userId) {
    return userMapper.getUserById(userId);
  }
}


 2. Controller 类:

java
// UserController.java
package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/users")
public class UserController {

  @Autowired
  private UserService userService;

  @PostMapping("/add")
  @ResponseBody
  public String addUser(@RequestBody User user) {
    userService.addUser(user);
    return "User added successfully!";
  }

  @GetMapping("/delete/{id}")
  @ResponseBody
  public String deleteUser(@PathVariable("id") int userId) {
    userService.deleteUserById(userId);
    return "User deleted successfully!";
  }

  @PostMapping("/update")
  @ResponseBody
  public String updateUser(@RequestBody User user) {
    userService.updateUser(user);
    return "User updated successfully!";
  }

  @GetMapping("/{id}")
  @ResponseBody
  public User getUserById(@PathVariable("id") int userId) {
    return userService.getUserById(userId);
  }
}


在上述示例中,`UserController` 使用 `@Autowired` 注解来注入 `UserService`,然后在各个请求处理方法中调用 `UserService` 中的方法来执行相应的数据库操作。 `@PostMapping` 和 `@GetMapping` 注解用于映射 HTTP POST 和 GET 请求,`@ResponseBody` 注解表示返回的内容直接作为响应体。

请确保在你的 Spring 配置中启用了注解扫描,以便正确扫描和实例化这些类。这个示例假设你已经正确配置了 Spring MVC 和 MyBatis,并且在 Spring 的配置文件中配置了相应的事务管理。

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

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

相关文章

微信管理大杀器:这个让工作高效不费力的利器你值得拥有!

在如今互联网社交时代&#xff0c;微信已经成为了人们生活中不可或缺的一部分。无论是与朋友聊天、分享生活&#xff0c;还是与客户进行商务洽谈&#xff0c;微信都扮演着重要的角色。对于个人而言&#xff0c;拥有一个高效管理微信私域的工具&#xff0c;将极大地提升运营效率…

可在图像中生成任意精准文本,支持中文!阿里开源AnyText

随着Midjourney、Stable Difusion等产品的出现&#xff0c;文生图像领域获得了巨大突破。但是想在图像中生成/嵌入精准的文本却比较困难。 经常会出现模糊、莫名其妙或错误的文本&#xff0c;尤其是对中文支持非常差&#xff0c;例如&#xff0c;生成一张印有“2024龙年吉祥”…

Arrays 数组工具类常用方法

java.util.Arrays类即为操作数组的工具类&#xff0c;包含了用来操作数组&#xff08;比如排序和搜索&#xff09;的各种方法 equals&#xff1a;比较两个数组是否相等 int[] arr1 new int[]{1,2,3}; int[] arr2 new int[]{1,2,3}; boolean equals Arrays.equals(arr1, ar…

Java学习苦旅(二十七)——Java中的集合框架

本篇博客将初略讲解Java中的集合框架及背后的数据结构。 集合框架介绍 Java 集合框架 Java Collection Framework&#xff0c;又被称为容器 &#xff08;container&#xff09;&#xff0c;是定义在java.util包下的一组接口 interfaces 和其实现类 classes 。其主要表现为将多…

【Linux】宝塔端口不通

1.问题描述&#xff1a;端口不通 以端口16588为例&#xff1a; 服务器16588端口是关闭的&#xff0c;防火墙规则是放通的&#xff0c;是由于服务器内的对应程序没有监听到 对应 的公网上 图1&#xff1a;端口检测 图2&#xff1a; 端口已放行 此时访问仍然不通&#xff0c;但…

基于SpringBoot的考务报名平台的设计与实现,java

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的考务报名平台的设计与实…

EM算法求解男女升高-Python

EM算法求解男女升高-Python 目前关于EM算法理论分析很全了&#xff0c;代码还比较少&#xff0c;一般就停留在最后的似然函数。 问题 现在一个班里有100个男生和女生。我们假定男生的身高服从正态分布&#xff0c;女生的身高则服从另一个正态分布。 求解两个正态分布的参数。…

Vue-6、Vue事件处理

1、点击事件 <!DOCTYPE html> <html lang"en" xmlns:v-model"http://www.w3.org/1999/xhtml" xmlns:v-bind"http://www.w3.org/1999/xhtml"xmlns:v-on"http://www.w3.org/1999/xhtml"> <head><meta charset&quo…

详细介绍如何微调 T5 Transformer 模型:用于构建 Stack Overflow 标签生成器的 Text2Text 传输转换器-含源码

在不断发展的自然语言处理 (NLP) 领域,T5(文本到文本传输转换器)模型已成为一种多功能模型。针对特定任务对该模型进行微调可以释放其全部潜力,使其成为人工智能爱好者和专业人士的一项关键技能。本文深入研究了T5 Transformer 模型的微调,特别是针对基于 Stack Overflow …

ip协议历史

今天的互联网&#xff0c;是万维网&#xff08;WWW&#xff09;一家独大。而在上世纪七八十年代&#xff0c;人们刚开始尝试网络连接时&#xff0c;那时出现了计算机科学研究网络、ALOHA 网、因时网、阿帕网等不同类型的网络&#xff0c;这些网络之间互相通信是个难题。 于是&…

openssl3.2 - 编译

文章目录 openssl3.2 - 编译概述OpenSSL源码下载编译目标如何编译前置环境 - perl前置环境 - VS前置环境 - NASM快速编译步骤编译 - Quick startInstall PerlInstall NASMUse Visual Studio Developer Command Prompt with administrative privilegesFrom the root of the Open…

SV-7042T 15W网络有源音箱 商场广播音箱 酒店广播音箱

SV-7042T 15W网络有源音箱 商场广播音箱 酒店广播音箱 一、描述 SV-7042T是深圳锐科达电子有限公司的一款壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的无源…

【已解决】Pytorch RuntimeError: expected scalar type Double but found Float

本文作者&#xff1a; slience_me 文章目录 项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a; 项目场景&#xff1a; 在训练模型时候&#xff0c;将数据集输入到网络中去&#xff0c;在执行卷积nn.conv1d()的时候&#xff0c;报出此错误 问题描述 报错…

SpringBoot打造高效多级缓存体系

在数据密集型的应用中&#xff0c;缓存是提高性能的关键工具之一。SpringBoot提供了强大的缓存抽象&#xff0c;允许开发者轻松地实现多级缓存&#xff0c;从而显著提升应用性能。本文将带你深入了解SpringBoot中的多级缓存解决方案&#xff0c;并通过详细的Java示例&#xff0…

IEDA中tomcat日志乱码解决

文章目录 乱码样式原因解决方案参考 乱码样式 原因 乱码原因是编码格式的问题&#xff0c;编码格式不统一&#xff0c;导致显示乱码。 解决方案 统一编码格式。 打开tomcat的配置文件&#xff0c;conf/logging.properties,进行如下修改 进入idea的安装文件中&#xff0c;b…

【docker笔记】Docker网络

Docker网络 容器间的互联和通信以及端口映射 容器IP变动时候可以通过服务名直接网络通信而不受到影响 常用命令 查看网络 docker network ls创建网络 docker network create XXX网络名字查看网络源数据 docker network inspect XXX网络名字删除网络 docker network rm…

【力扣100】33.搜索旋转排序数组

添加链接描述 class Solution:def search(self, nums: List[int], target: int) -> int:left,right0,len(nums)-1while left<right:mid left(right-left)//2if nums[mid]target:return midelif nums[mid]<nums[right]:if target>nums[mid] and target<nums[ri…

计算机基础专升本笔记八-操作系统概述

计算机基础专升本笔记八-操作系统概述 操作系统(OS,Operating System)是计算机系统中的核心软件之一&#xff0c;它管理和控制计算机的硬件和软件资源&#xff0c;为用户和应用程序提供一个友好且高效的环境。操作系统的主要功能包括处理器管理、存储管理、设备管理、文件管理和…

竞赛保研 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

【docker】一文讲完docker核心概念

文章目录 一、什么是docker二、docker和虚拟机有什么区别三、docker基本概念1、镜像&#xff08;Image&#xff09;2、docker 容器&#xff08;container&#xff09;3、docker 仓库&#xff08;Repository&#xff09;4、dockerfile简介5、网络&#xff08;Network&#xff09…