深入浅出:MyBatis的使用方法及最佳实践

news2025/1/12 12:24:47

这里写目录标题

  • 添加MyBatis框架⽀持
  • 配置连接字符串和MyBatis
    • 配置连接字符串
    • 配置 MyBatis 中的 XML 路径
  • 添加业务代码
    • 创建数据库和表
    • 添加用户实体类
    • 添加 mapper 接⼝
    • 添加 UserMapper.xml
    • 添加 Service层
    • 添加 Controller层
  • 增删改操作
    • 增加操作
    • 删除操作
    • 修改操作

添加MyBatis框架⽀持

创建⼀个全新的 MyBatis 和 Spring Boot 的项⽬时添加引⽤
如下:
在这里插入图片描述

配置连接字符串和MyBatis

配置连接字符串

在application.properties中添加如下内容:

spring.datasource.url=jdbc:mysql://localhost:3306/demo?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=666666
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

配置 MyBatis 中的 XML 路径

依旧在application.properties中添加如下内容:

mybatis.mapper-locations=classpath:mapper/*Mapper.xml
# 配置mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件

在这里插入图片描述

添加业务代码

按照后端开发思路,进行mybatis查询用户的功能,流程图如下:
在这里插入图片描述

创建数据库和表

创建demo数据库

drop database if exists demo;
create database demo default character set utf8mb4;

使用数据库

use demo;

创建学生表

drop table if exists stu;
create  table stu(
    id int primary key auto_increment,
    name varchar(100) not null ,
    sex  varchar(10) not null

) default charset 'utf8mb4';

添加学生信息

insert into  demo.stu(id,name,sex) values (1,'zcx','男');

添加用户实体类

import lombok.Data;
@Data
public class User {
    private Integer id;
    private String name;
    private String sex;
}

添加 mapper 接⼝

import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
public List<User> getAll();
}

添加 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisdemo.dao.UserMapper">
   
</mapper>
  • Mapper 标签:需要指定 namespace 属性,表示命名空间,需要写的是 Mapper 接口的全限定名(包括包路径)。namespace 的作用是指定该 Mapper XML 文件对应的 Mapper 接口,建立起二者之间的映射关系。
    在这里插入图片描述
    后续可在Mapper 标签中书写sql操作标签
    例如:
    添加查询操作
 <select id="getAll">
        select * from stu
    </select>

添加 Service层

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserService {
    @Resource
    private UserMapper userMapper;
    public List<User> getAll() {
        return userMapper.getAll();
    }

}

添加 Controller层

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/u")
public class UserController {
    @Resource
    private UserService userService;
    @RequestMapping("/getall")
    public List<User> getAll(){
        return userService.getAll();
    }
}

使用浏览器进行查询访问
在这里插入图片描述

增删改操作

对⽤户的增加、删除和修改的操作,对应使⽤ MyBatis 的标签如下:

  • <insert>标签:插⼊语句
  • <update> 标签:修改语句
  • <delete>标签:删除语句

增加操作

controller 实现代码:

 @RequestMapping(value = "/add",method = RequestMethod.POST)
    public Integer add(@RequestBody User user){
        return userService.add(user);
    }

Service 实现代码:

  public Integer add(User user ){
        return userMapper.add(user);
    }

mapper interface:

Integer add(User user);

mapper.xml:

<insert id="add" >
        insert into stu(name,sex)
        values(#{name},#{sex})
    </insert>

使用Postman 添加访问:
在这里插入图片描述
也可返回自增主键,修改如下代码:

 @RequestMapping(value = "/add",method = RequestMethod.POST)
    public Integer add(@RequestBody User user){
        userService.add(user);
        return user.getId();
    }
<insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into stu(name,sex)
        values(#{name},#{sex})
    </insert>

在这里插入图片描述
在这里插入图片描述

  • useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键,默认false
  • keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert 语句的 selectKey ⼦元素设置它的值

删除操作

修改controller:

 @RequestMapping(value = "/update",method = RequestMethod.POST)
    public Integer update( Integer id,  String name) {
        return userService.update(id, name);
    }

mapper.xml:

<update id="update">
        update stu set name=#{name} where id=#{id}
    </update>

其他代码修改跟增加操作相似
在这里插入图片描述
查看数据库发现修改成功
在这里插入图片描述

修改操作

修改controller:

@RequestMapping("/delById")
    public Integer delById( Integer id){
        return userService.delById(id);
    }

mapper.xml:

  <delete id="delById" parameterType="java.lang.Integer">
        delete from stu where id=#{id}
    </delete>

在这里插入图片描述
查看数据库,删除成功
在这里插入图片描述

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

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

相关文章

vue3+ts+vite全局配置Element-Plus主题色

概述 我找了很多博客&#xff0c;想全局配置Elmenet-Plus组件主题色&#xff0c;但都没有效果。所以有了这篇博客&#xff0c;希望能对你有所帮助&#xff01;&#xff01;&#xff01; 文章目录 概述一、先看效果二、创建全局颜色文件2.1 /src/styles 下新建 element-plus.sc…

王道机组难题分析

第四章 指令系统 大端方式&#xff1a;就是高地址存放高位&#xff0c; LSB的意思是&#xff1a;全称为Least Significant Bit&#xff0c;在二进制数中意为最低有效位 MSB的意思是&#xff1a;全称为Most Significant Bit&#xff0c;在二进制数中属于最高有效位 操作数可以理…

设备工单管理系统如何实现工单流程自动化?

设备工单管理系统属于工单系统的一种&#xff0c;基于其丰富的功能&#xff0c;它可以同时处理不同的多组流程&#xff0c;旨在有效处理发起人提交的事情&#xff0c;指派相应人员完成服务请求和记录全流程。该系统主要面向后勤管理、设备维护、物业管理、酒店民宿等服务行业设…

微服务07-分布式缓存

前提: 单机的Redis存在四大问题: 解决办法:基于Redis集群解决单机Redis存在的问题 1、Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化1.1 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所…

redis的基础命令01

1、操作库的指令 1、清除当前库---flushdb 2、清除所有库---flushAll 2、操作key的指令 最常用的指令get、set 1&#xff09;set key value 2&#xff09;get key 基础指令 1、del 删除单个&#xff1a;del key 、批量删除&#xff1a;del key1 key2 key3 2、exists 判断key是否…

jpa查询返回自定义对象、返回指定VO、POJO

jpa查询返回自定义对象、返回指定VO、POJO jpa查询返回自定义对象、返回指定VO、POJO&#xff0c;JPA查询前会做大量处理&#xff0c;还有线程通知的操作。若并发大&#xff0c;处理性能直线下降。但是jpa就因为做了大量处理&#xff0c;对多数据库兼容极好&#xff0c;操作方…

QT之UDP通信

QT之UDP通信 UDP不分客户端口服务器,只需要使用一个类QUdpSocket QT += core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = udp TEMPLATE = app# The following define makes your compiler emit warnings if you use # any feature of Qt …

通义大模型:打造更智能、更灵活的自然语言处理技术

大家好&#xff0c;今天我想向大家介绍一款备受瞩目的自然语言处理技术——通义大模型。作为一种基于深度学习的人工智能技术&#xff0c;通义大模型能够模拟人类的思维方式&#xff0c;实现更智能、更灵活的自然语言处理&#xff0c;为我们的生活和工作带来了极大的便利。 在…

Java解决四大查找(一)

Java解决四大查找 一.线性查找1.1 题目1.2 思路分析1.3 代码演示 二.二分查找(双指针法)2.1 题目2.2 思路分析(图解加文字)2.3 代码演示 一.线性查找 1.1 题目 在数组{1&#xff0c;8&#xff0c;1024&#xff0c;521&#xff0c;1889}中查找数字8&#xff0c;如果有&#xff…

数学建模(二)线性规划

课程推荐&#xff1a;6 线性规划模型基本原理与编程实现_哔哩哔哩_bilibili 在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支&#xff1a;数学规划。而线性规划(Linear Program…

基于 FPGA 的电机控制

FPGA 非常适合精密电机控制&#xff0c;在这个项目中&#xff0c;我们将创建一个简单的电机控制程序&#xff0c;在此基础上可以构建更复杂的应用。 需要的硬件 Digilent Pmod HB3 介绍 我们可以用一个简单的 8 位微控制器来控制电机&#xff0c;输出一个简单的脉宽调制波形。然…

201、仿真-基于51单片机PT100测温设计铂电阻温度计设计Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图 三、原理图 四、程序源码 资料包括&#xff1a; 方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设…

Linux学习之sed保持空间

echo 1#sed#s >> holdSpaceTest.txt echo 2#deep#d >> holdSpaceTest.txt echo 3#good#g >> holdSpaceTest.txt echo 4#hood#h >> holdSpaceTest.txt把下边的内容写入到holdSpaceTest.txt中&#xff1a; 1#sed#s 2#deep#d 3#good#g 4#hood#htac holdS…

windows任务栏右下角不显示网络图标解决方法

1、背景 我运行windows诊断服务之后&#xff0c;然后重启了一把电脑&#xff0c;结果发现电脑无法上网了&#xff0c;进一步发现任务栏右下角的网络显示图标也没有了&#xff0c;网络状态显示也是一条横线。 几经折腾终于给解决了&#xff0c;遇到了不少坑&#xff0c;记录一…

2022年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:指定顺序输出 依次输入3个整数a、b、c,将他们以c、a、b的顺序输出。 时间限制:1000 内存限制:65536 输入 一行3个整数a、b、c,以空格分隔。 0 < a,b,c < 108 输出 一行3个整数c、a、b,整数之间以一个空格分隔。 样例输入 1 2 3 样例输出 3 1 2 以下是使用C语言…

腾讯出品Pag动画框架在Android端的使用-初级

Pag动画框架作为一个第三方框架&#xff0c;它的优缺点与Lottie是相似&#xff0c;此处不过多赘述。如果你们的项目中打算用了&#xff0c;肯定是经过了一定的调研的。Pag动画框架分几个版本&#xff0c;有免费的有收费的。我们目前用的社区免费版&#xff0c;只用来展示Pag动画…

Vue2到3 Day5 全套学习内容,众多案例上手(内付源码)

简介&#xff1a; Vue2到3 Day1-3 全套学习内容&#xff0c;众多案例上手&#xff08;内付源码&#xff09;_星辰大海1412的博客-CSDN博客本文是一篇入门级的Vue.js介绍文章&#xff0c;旨在帮助读者了解Vue.js框架的基本概念和核心功能。Vue.js是一款流行的JavaScript前端框架…

工单管理系统哪家好?如何让学校后勤报修更方便?

随着互联网的高速发展&#xff0c;学校宿舍管理也必须随之向数字化方向迈进。越来越多的企业利用云计算服务的优势&#xff0c;使后勤维护整个流程实现数字化、自动化运行以及资源共享。这些技术创新的运用&#xff0c;大大提高了学校宿舍的后勤维修管理水平&#xff0c;同时&a…

WinForm内嵌Unity3D

Unity3D可以C#脚本进行开&#xff0c;使用vstu2013.msi插件&#xff0c;可以实现在VS2013中的调试。在开发完成后&#xff0c;由于项目需要&#xff0c;需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、为了能够动态设置ax…

MYSQL幻读问题

幻读是什么&#xff1f; “Phantom Problem是指在同一事务下&#xff0c;连续执行两次同样的SQL语句可能导致不同的结果&#xff0c;第二次的SQL语句可能会返回之前不存在的行。”摘录来自 MySQL技术内幕&#xff1a;InnoDB存储引擎(第2版) (数据库技术丛书) ​ 通俗来说就是&a…