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

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

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

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值