SpringBoot新手快速入门系列教程六:基于MyBatis的一个简单Mysql读写例子

news2025/1/4 19:25:36

我的教程都是亲自测试可行才发布的,如果有任何问题欢迎留言或者来群里我每天都会解答。

MyBatis和JPA是两种不同的Java持久层框架,各有其优缺点。以下是它们的比较:

MyBatis

优点
  1. 灵活性高:MyBatis允许手动编写SQL查询,可以完全控制SQL执行过程,非常适合复杂的查询和需要高度优化的查询。
  2. SQL分离:SQL语句可以单独存放在XML文件中,便于维护和管理。
  3. 易于学习和使用:MyBatis的学习曲线相对较低,开发者只需掌握SQL和基本的配置即可使用。
  4. 数据库无关性:MyBatis支持多种数据库,可以方便地切换数据库。
  5. 性能:由于手动编写SQL,可以对SQL进行细粒度的优化,性能上有优势。
缺点
  1. 代码冗余:需要手动编写SQL和映射配置,代码量较大,容易出现重复代码。
  2. 缺乏对象关系映射:MyBatis主要处理SQL和数据库的映射,缺乏JPA那样的对象关系映射能力,不适合复杂的对象关系管理。
  3. 维护成本高:由于手动编写SQL,随着项目复杂度增加,维护和管理SQL语句的成本也会增加。

JPA (Java Persistence API)

优点
  1. 对象关系映射:JPA提供了强大的对象关系映射能力,能自动处理对象与数据库表之间的关系,减少了开发者手动处理的工作量。
  2. 自动生成SQL:JPA可以根据实体类自动生成SQL语句,简化了开发过程。
  3. 统一接口:JPA提供了统一的接口,方便切换不同的JPA实现(如Hibernate、EclipseLink等)。
  4. 缓存机制:JPA支持一级和二级缓存机制,可以提高查询性能。
  5. 规范化:作为Java EE的一部分,JPA是一个标准,具有较好的兼容性和可移植性。
缺点
  1. 性能问题:由于自动生成SQL,可能生成的SQL不够优化,影响性能。
  2. 学习曲线陡峭:JPA的学习曲线较高,需要理解实体类、关系映射、查询语言(JPQL)等概念。
  3. 灵活性不足:对一些复杂查询或性能要求较高的查询,JPA的自动生成SQL可能无法满足需求,手动优化SQL的能力有限。
  4. 配置复杂:对于大型项目,JPA的配置和调优可能相对复杂。

总结

  • MyBatis 适合对SQL控制要求高、查询复杂、性能要求高的项目。
  • JPA 适合需要对象关系映射、开发效率高、对标准化和兼容性有要求的项目。

本教程会省略很多IDEA的基础用法以及,MySql的基础知识。如果对此不太熟悉的读者劳烦移步我的前一个教程,略微详细展示了以上基础知识。

SpringBoot新手快速入门系列教程四:创建第一个SringBoot的API-CSDN博客

1,新建HelloMyBatis项目

  • Spring Web:在Web分类下勾选Spring Web。
  • MyBatis Framework:在SQL分类下勾选MyBatis Framework。
  • MySQL Driver:在SQL分类下勾选MySQL Driver。

 

2,项目结构以及说明

我们先构建一下所有的package以及所有的Java类还有xml文件

下面是各个类和XML文件的作用简要说明:

1. HelloMyBatisApplication.java

  • 用途:Spring Boot应用程序的入口类,负责启动应用。
  • 注解
    • @SpringBootApplication:配置和引导Spring Boot应用。
    • @MapperScan:指定MyBatis的Mapper接口包路径。

2. User.java (Model)

  • 用途:表示数据库中的用户实体,对应数据库表中的一行数据。
  • 内容:包含用户的属性(如idname)及其getter和setter方法。

3. UserMapper.java (Mapper Interface)

  • 用途:定义与数据库交互的方法,包括查询和插入操作。
  • 内容:包含MyBatis的SQL注解或XML中定义的SQL映射。

4. UserMapper.xml (Mapper XML)

  • 用途:存放SQL语句,供MyBatis使用。
  • 内容:定义具体的SQL语句,与UserMapper接口中的方法相对应。

5. UserService.java (Service)

  • 用途:处理业务逻辑,调用UserMapper的方法进行数据库操作。
  • 内容:包含对用户的增删改查方法。

6. UserController.java (Controller)

  • 用途:处理HTTP请求,调用UserService的方法并返回结果。
  • 内容:定义RESTful API接口,通过GET方法实现用户的读取和写入操作。

7. build.gradle

  • 用途:项目的构建脚本,管理项目的依赖和构建任务。
  • 内容:定义Spring Boot、MyBatis和MySQL等依赖。

3,所有代码

 1. HelloMyBatisApplication.java

package com.yuye.www.hellomybatis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.yuye.www.hellomybatis.mapper")
public class HelloMyBatisApplication {
	public static void main(String[] args) {
		SpringApplication.run(HelloMyBatisApplication.class, args);
	}
}

2. User.java (Model)

package com.yuye.www.hellomybatis.model;

public class User {
    private Long id;
    private String name;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3. UserMapper.java (Mapper Interface)

package com.yuye.www.hellomybatis.mapper;

import com.yuye.www.hellomybatis.model.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {

    @Insert("INSERT INTO user(name) VALUES(#{name})")
    void insertUser(User user);

    @Select("SELECT COUNT(*) FROM user WHERE name = #{name}")
    int countByName(String name);
}

4. UserMapper.xml (Mapper 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.yuye.www.hellomybatis.mapper.UserMapper">

    <insert id="insertUser">
        INSERT INTO user(name) VALUES(#{name})
    </insert>

    <select id="countByName" resultType="int">
        SELECT COUNT(*) FROM user WHERE name = #{name}
    </select>
</mapper>

5. UserService.java (Service)

package com.yuye.www.hellomybatis.service;

import com.yuye.www.hellomybatis.mapper.UserMapper;
import com.yuye.www.hellomybatis.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

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

    public boolean isUserExist(String name) {
        return userMapper.countByName(name) > 0;
    }
}

6. UserController.java (Controller)

package com.yuye.www.hellomybatis.controller;

import com.yuye.www.hellomybatis.model.User;
import com.yuye.www.hellomybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

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

    @Autowired
    private UserService userService;

    @GetMapping("/add")
    public String addUser(@RequestParam String name) {
        User user = new User();
        user.setName(name);
        userService.saveUser(user);
        return "User added successfully!";
    }

    @GetMapping("/check")
    public String checkUser(@RequestParam String name) {
        boolean exists = userService.isUserExist(name);
        return exists ? "User exists!" : "User does not exist!";
    }
}

7. application.yml (Configuration)

spring.application.name=HelloMyBatis
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/userdata
spring.datasource.username=root
spring.datasource.password=Qwerty123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml

server.port=8081

8. Build Script (build.gradle)

plugins {
    id 'org.springframework.boot' version '3.3.1'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.yuye.www'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
}

test {
    useJUnitPlatform()
}

4,运行项目

1,写入数据库

http://localhost:8081/users/add?name=rola

2,读取数据

http://localhost:8081/users/check?name=rola

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

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

相关文章

AWDAWFAAFAWAWFAWF

创建两张表&#xff1a;部门&#xff08;dept&#xff09;和员工&#xff08;emp&#xff09; 创建视图v_emp_dept_id_1&#xff0c;查询销售部门的员工姓名和家庭住址 创建视图v_emp_dept&#xff0c;查询销售部门员工姓名和家庭住址及部门名称 创建视图v_dept_emp_count(dept…

Ubuntu: gitee免密

安装git sudo apt-get install git下载 git clone XXX SSH keys 第一步&#xff1a;检查本地是否有 SSH Key存在 ls -al ~/.ssh第二步&#xff1a;配置你注册的邮箱 ssh-keygen -t rsa -C "your_emailexample.com"输入命令后一直回车 第三步&#xff1a;获取公钥…

乐观锁原理

乐观锁是一种并发控制的方法&#xff0c;主要用于多线程环境下&#xff0c;用于保证数据的一致性。其核心思想是&#xff1a;"在多个事务中乐观地读取数据&#xff0c;在提交时再验证是否有冲突&#xff0c;如果没有&#xff0c;则提交&#xff1b;如果有&#xff0c;则回…

使用 Apache DolphinScheduler 构建和部署大数据平台,将任务提交至 AWS 的实践经验

作者介绍 李庆旺 - 软件开发工程师&#xff0c;思科 引言 大家好&#xff0c;我是李庆旺&#xff0c;来自思科的软件开发工程师。我们的团队已经使用Apache DolphinScheduler搭建我们自己的大数据调度平台近三年时间。从最初的2.0.3版本开始至今&#xff0c;我们与社区一同成…

基于FPGA的数字信号处理(15)--定点数的舍入模式(6)向0取整fix

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式&#xff1a;向上取整fix。 10进制数的fix fix&#xff1a;也叫 向0取整。它的舍入方式是数据往0的方向&#xff0c;舍入到最近的整数&#xff0c;比如1.75 fix到2&#xf…

【操作系统】进程管理——管程(个人笔记)

学习日期&#xff1a;2024.7.12 内容摘要&#xff1a;管程的定义和基本特征 管程 管程存在的意义&#xff1a;在上一章节中&#xff0c;我们学习了利用信号量机制解决进程同步互斥问题的方法&#xff0c;信号量机制编写程序较为复杂困难&#xff0c;易出错。为了让程序员写程…

MySQL查询语句(DQL)

文章目录 查询语句&#xff08;DQL)简单查询查一个字段查多个字段查所有字段查询字段可以进行数学运算查询时字段可起别名 条件查询and (&&)or (||)between...and...is null 和 is not nullin 和 not inlike (模糊查询) 查询语句&#xff08;DQL) 简单查询 \c可以清空…

JavaScript中的拷贝技术探秘:浅拷贝与深拷贝的奥秘

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ 前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念&#xff0c;它们在处理对象和数组时具有不同的作用。在编程中&#xff0c;经常需要复制数据以便进行各种操作&#xff0c;但必须注…

【python】Python报错分析:深入探索`IndexError`及其解决办法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

GlobalSign证书介绍以及申请流程

在当今高度互联的世界中&#xff0c;网络安全与数据保护的重要性日益凸显&#xff0c;而数字证书作为保障网络通信安全的关键技术&#xff0c;已成为构建数字信任的基石。GlobalSign&#xff0c;作为全球数字证书行业的先驱和领导者&#xff0c;自成立以来便致力于为全球企业和…

unity 手动制作天空盒及使用

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、使用前后左右上下六张图1.准备6张机密结合的图片2.创建Material材质球3.使用天空盒 二、使用HDR贴图制作1.准备HDR贴图2.导入unity 修改Texture Sourpe 属性3.创建材质球4.使用…

Jenkins 离线升级

1. 环境说明 环境 A: jenkins 版本&#xff1a;2.253使用 systemctl 管理的 jenkins 服务 环境 B&#xff1a; 可以上网的机器&#xff0c;装有 docker-compose docker 和 docker-compose 安装&#xff0c;这里都略了。 2. 安装旧版本 2.1 环境 A jenkins 目录打包文件 …

ARM 虚拟机FVP环境搭建

ARM Fixed Virtual Platforms (FVPs) 是由 ARM 提供的一系列虚拟化硬件模拟器&#xff0c;用于在物理硬件可用之前开发和测试软件。FVP 模型非常适用于软件开发、验证和性能分析&#xff0c;涵盖了从裸机到操作系统和复杂 SoC 系统的各种应用。 这里以Cortex-M55为例&#xff0…

80. UE5 RPG 实现UI显示技能冷却进度功能

在上一篇文章里&#xff0c;我们实现了通过GE给技能增加资源消耗和技能冷却功能。UI也能够显示角色能够使用的技能的UI&#xff0c;现在还有一个问题&#xff0c;我们希望在技能释放进去冷却时&#xff0c;技能变成灰色&#xff0c;并在技能冷却完成&#xff0c;技能可以再次使…

【算法】代码随想录之数组

文章目录 前言 一、二分查找法&#xff08;LeetCode--704&#xff09; 二、移除元素&#xff08;LeetCode--27&#xff09; 三、有序数组的平方&#xff08;LeetCode--977&#xff09; 四、长度最小的子数组&#xff08;LeetCode--209&#xff09; 五、螺旋矩阵II&#x…

LLM:tokenizer分词器概念

在做nlp时&#xff0c;首先要对文本进行分词&#xff0c;也就是给定一个句子&#xff0c;将其归到词表中的一系列token上&#xff0c;token有对应的数字&#xff08;token_id&#xff09;。 上图是bert的分词器的json内容&#xff0c;可以看到词表是一个字典&#xff0c;key为t…

电脑显示MSVCR110.dll丢失怎么办,总结5种靠谱的解决方法

在使用电脑过程中&#xff0c;部分用户可能会遇到MSVCR110.dll文件丢失的问题&#xff0c;具体表现为弹出提示窗口&#xff0c;指出缺失该文件&#xff0c;导致部分程序无法正常启动。小编将为您介绍多种解决该问题的指南。 一、找不到MSVCR110.dll是什么情况 MSVCR110.dll是M…

2.线性回归

简化的房价模型 假设1&#xff1a;影响房价的关键因素时卧室个数&#xff0c;卫生间和居住面积&#xff0c;记为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​ 假设2&#xff1a;成交价时关键因素的加权和&#xff1a; y w 1 x 1 w 2 x 2 w 3 x 3 b y w_1x_1w_2x_2w_3x…

在 IVS 2024 加密盛会上开拓创新:CESS 引领去中心化云存储和 CD²N 之发展

作为基于区块链的去中心化云存储网络和 CDN 基础设施网络&#xff0c;CESS 在日本年度加密创业大会 IVS 2024 上成为焦点&#xff01;此次活动在历史悠久的京都举办&#xff0c;围绕“跨越边界”这一主题&#xff0c;吸引了超过15,000 名参会者&#xff0c;其中包括 3,000 创始…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥证明介绍及算法规格】

密钥证明介绍及算法规格 HUKS为密钥提供合法性证明能力&#xff0c;主要应用于非对称密钥的公钥的证明。 基于PKI证书链技术&#xff0c;HUKS可以为存储在HUKS中的非对称密钥对的公钥签发证书&#xff0c;证明其公钥的合法性。业务可以通过系统提供的根CA证书&#xff0c;逐级…