Spring Boot与MyBatis

embedded/2025/1/19 4:26:19/

Spring Boot与MyBatis的配置

一、简介

Spring Boot是一个用于创建独立的、基于Spring的生产级应用程序的框架,它简化了Spring应用的初始搭建以及开发过程。MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。将Spring Boot和MyBatis结合使用,可以高效地开发数据驱动的应用程序。

二、环境准备

(一)创建Spring Boot项目
  1. 可以使用Spring Initializr(https://start.spring.io/)来创建一个基础的Spring Boot项目。
    • 在创建项目时,选择合适的项目元数据,如项目的Group和Artifact等信息。
    • 可以选择添加一些常用的依赖,如Web依赖(如果项目需要提供Web服务)等。不过,对于MyBatis的集成,初始创建时不需要专门添加MyBatis相关依赖,我们后续手动添加。
  2. 下载生成的项目压缩包并解压到本地开发环境。
(二)添加MyBatis依赖
  1. 在项目的pom.xml(如果是Maven项目)中添加MyBatis和相关数据库驱动的依赖。
    • 对于MyBatis本身:

      <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis - spring - boot - starter</artifactId><version>2.2.2</version>
      </dependency>
      
    • 如果使用MySQL数据库,添加MySQL驱动依赖:

      <dependency><groupId>mysql</groupId><artifactId>mysql - connector - java</artifactId><version>8.0.26</version>
      </dependency>
      

三、数据库配置

(一)配置数据源
  1. 在Spring Boot的配置文件(application.properties或者application.yml)中配置数据源相关信息。
    • 如果使用application.properties:

      spring.datasource.url = jdbc:mysql://localhost:3306/mydb?useSSL = false&serverTimezone = UTC
      spring.datasource.username = root
      spring.datasource.password = your_password
      spring.datasource.driver - class - name = com.mysql.cj.jdbc.Driver
      
    • 如果使用application.yml:

      spring:datasource:url: jdbc:mysql://localhost:3306/mydb?useSSL = false&serverTimezone = UTCusername: rootpassword: your_passworddriver - class - name: com.mysql.cj.jdbc.Driver
      

四、MyBatis配置

(一)实体类创建
  1. 根据数据库表结构创建对应的实体类。例如,如果有一个名为“user”的表,结构如下:

    CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50),password VARCHAR(50)
    );
    
    • 对应的Java实体类为:

      public class User {private Integer id;private String username;private String password;// 生成getter和setter方法public Integer getId() {return id;}public void setId(Integer 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;}
      }
      
(二)Mapper接口创建
  1. 创建Mapper接口来定义与数据库交互的方法。
    • 例如,创建一个UserMapper接口:

      @Mapper
      public interface UserMapper {User selectUserById(Integer id);int insertUser(User user);int updateUser(User user);int deleteUserById(Integer id);
      }
      
    • 这里的@Mapper注解(如果使用注解方式)用于将该接口标记为MyBatis的Mapper接口,这样Spring Boot就能够识别并自动创建该接口的代理实现。

(三)Mapper XML文件创建(如果使用XML方式)
  1. 如果不使用注解方式编写SQL语句,而是使用XML文件,则需要创建Mapper XML文件。
    • 在resources/mapper目录下创建UserMapper.xml(假设项目采用的是Maven的标准目录结构)。

    • 内容如下:

      <?xml version="1.0" encoding="UTF - 8"?>
      <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis - 3.dtd">
      <mapper namespace="com.example.demo.mapper.UserMapper"><select id="selectUserById" resultMap="userResultMap">SELECT * FROM user WHERE id = #{id}</select><insert id="insertUser">INSERT INTO user (username, password) VALUES (#{username}, #{password})</insert><update id="updateUser">UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}</update><delete id="deleteUserById">DELETE FROM user WHERE id = #{id}</delete><resultMap id="userResultMap" type="com.example.demo.entity.User"><id property="id" column="id"/><result property="username" column="username"/><result property="password" column="password"/></resultMap>
      </mapper>
      
    • 这里的namespace属性的值要与对应的Mapper接口的全限定名相同。

(四)配置MyBatis扫描路径
  1. 如果使用XML方式的Mapper文件,需要在Spring Boot配置文件中配置MyBatis的Mapper扫描路径。
    • 在application.properties中:

      mybatis.mapper - locations = classpath:mapper/*.xml
      
    • 在application.yml中:

      mybatis:mapper - locations: classpath:mapper/*.xml
      

五、使用MyBatis进行数据操作

(一)在Service层调用Mapper方法
  1. 创建一个UserService类来调用UserMapper中的方法。
    • 例如:

      @Service
      public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Integer id) {return userMapper.selectUserById(id);}public int addUser(User user) {return userMapper.insertUser(user);}public int updateUserInfo(User user) {return userMapper.updateUser(user);}public int deleteUser(int id) {return userMapper.deleteUserById(id);}
      }
      
    • 这里通过@Autowired注解注入UserMapper实例,然后就可以在Service方法中调用Mapper中的数据操作方法。

(二)在Controller层调用Service方法(如果是Web应用)
  1. 创建一个UserController类(假设是一个Web应用,需要提供RESTful接口等)。

    @RestController
    public class UserController {@Autowiredprivate UserService userService;@GetMapping("/user/{id}")public User getUserById(@PathVariable("id") Integer id) {return userService.getUserById(id);}@PostMapping("/user")public int addUser(@RequestBody User user) {return userService.addUser(user);}@PutMapping("/user")public int updateUser(@RequestBody User user) {return userService.updateUserInfo(user);}@DeleteMapping("/user/{id}")public int deleteUser(@PathVariable("id") Integer id) {return userService.deleteUser(id);}
    }
    
    • 这里同样通过@Autowired注解注入UserService实例,然后在Controller的各个方法中调用Service方法,实现了从Web请求到数据操作的完整流程。

六、事务管理

  1. 在Spring Boot中管理MyBatis的事务非常方便。
    • 如果要在某个Service方法上添加事务管理,可以使用@Transactional注解。例如:

      @Service
      public class UserService {@Autowiredprivate UserMapper userMapper;@Transactionalpublic int addUser(User user) {// 一些业务逻辑判断等操作int result = userMapper.insertUser(user);// 如果插入成功后还有其他操作,如更新相关联的数据等return result;}
      }
      
    • 这样,如果在addUser方法中的任何一个数据库操作出现异常,整个事务都会回滚,保证数据的一致性。

七、高级配置

(一)配置MyBatis的缓存
  1. MyBatis提供了一级缓存和二级缓存。
    • 一级缓存是基于SqlSession的,默认是开启的。

    • 二级缓存可以通过在Mapper接口或者Mapper 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.dtd">
      <mapper namespace="com.example.demo.mapper.UserMapper"><cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/><!-- 其他SQL语句定义等 -->
      </mapper>
      
    • 这里的标签用于配置二级缓存的相关属性,如缓存的清除策略(eviction)、刷新间隔(flushInterval)、缓存大小(size)和是否只读(readOnly)等。

(二)配置MyBatis的插件
  1. MyBatis允许使用插件来扩展其功能。例如,可以使用PageHelper插件来实现分页功能。
    • 首先添加PageHelper的依赖:

      <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper - spring - boot - starter</artifactId><version>1.3.0</version>
      </dependency>
      
    • 然后在配置文件中进行简单配置(以application.yml为例):

      pagehelper:helper - dialect: mysqlreasonable: truesupport - methods - arguments: true
      
    • 在使用分页查询时,在Mapper接口方法调用之前使用PageHelper.startPage方法即可。例如:

      public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getUsersByPage(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize);return userMapper.selectAllUsers();}
      }
      

通过以上的配置和操作步骤,就可以在Spring Boot项目中成功地集成和使用MyBatis进行高效的数据持久化操作,无论是简单的CRUD操作还是涉及到高级功能如事务管理、缓存和插件的使用等。


http://www.ppmy.cn/embedded/155136.html

相关文章

2025年01月蓝桥杯Scratch1月stema选拔赛真题—美丽的图形

美丽的图形 编程实现美丽的图形具体要求: 1)点击绿旗&#xff0c;角色在舞台中心&#xff0c;如图所示&#xff1b; 2)1秒后&#xff0c;绘制一个边长为 140的红色大正方形&#xff0c;线条粗细为 3&#xff0c;正方形的中心为舞台中心&#xff0c;如图所示; 完整题目可点击下…

大模型(LLM)的若干科普之问(五):调用LLM涉及哪些参数?

一、一个简单的示例 其实&#xff0c;调LLM并不复杂&#xff0c;看一个例子&#xff1a; 以下是一个使用 OpenAI API 的 Python 程序示例&#xff0c;它可以将一段文本进行修改和完善。程序会调用 GPT 模型对输入文本进行润色&#xff0c;使其更加流畅、清晰或符合特定风格。 …

ASP.NET Core - 依赖注入(三)

ASP.NET Core - 依赖注入&#xff08;三&#xff09; 4. 容器中的服务创建与释放 4. 容器中的服务创建与释放 我们使用了 IoC 容器之后&#xff0c;服务实例的创建和销毁的工作就交给了容器去处理&#xff0c;前面也讲到了服务的生命周期&#xff0c;那三种生命周期中对象的创…

C++实现设计模式--- 观察者模式 (Observer)

观察者模式 (Observer) 观察者模式 是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;其依赖者&#xff08;观察者&#xff09;会收到通知并自动更新。 意图 定义对象之间的一对多依赖关系。当一个对象状…

PyTorch DAY2: 搭建神经网络

如今&#xff0c;我们已经了解了 PyTorch 中张量及其运算&#xff0c;但这远远不够。本次实验将学会如何使用 PyTorch 方便地构建神经网络模型&#xff0c;以及 PyTorch 训练神经网络的步骤及方法。 知识点 PyTorch 构建神经网络Sequential 容器结构使用 GPU 加速训练模型保存…

JVM:ZGC详解(染色指针,内存管理,算法流程,分代ZGC)

1&#xff0c;ZGC&#xff08;JDK21之前&#xff09; ZGC 的核心是一个并发垃圾收集器&#xff0c;所有繁重的工作都在Java 线程继续执行的同时完成。这极大地降低了垃圾收集对应用程序响应时间的影响。 ZGC为了支持太字节&#xff08;TB&#xff09;级内存&#xff0c;设计了基…

Python从0到100(八十四):神经网络-卷积神经网络训练CIFAR-10数据集

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

CV与NLP经典大模型解读

一。llm与lora微调策略解读 (1)文本大模型 llama:meta开源语言模型(咱们能负担得起下游任务了)。 lora:绘你模型你也得能训练的动才行(咱们也能微调下游任务)。loradiffusion。 self-instruct:下游任务得规矩些&#xff0c;输入与输出都得有一个标准格式。 peft:将上面三个…