Spring Boot 集成 MyBatis 全攻略(最新整理)
Spring Boot 集成 MyBatis 全攻略
1. 為什么選擇 MyBatis
- ORM 靈活性:相比 Hibernate,MyBatis 更靈活,SQL 可控,性能優(yōu)化空間大。
- 學(xué)習(xí)曲線低:對于熟悉 SQL 的開發(fā)者,上手快。
- 與 Spring Boot 無縫整合:只需少量配置,即可快速使用。
2. 基礎(chǔ)環(huán)境
依賴(pom.xml)
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Spring-Boot-Starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- 數(shù)據(jù)庫驅(qū)動(dòng) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok(可選) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>3. 配置數(shù)據(jù)源
application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root123
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
# 指定 Mapper XML 文件位置
mapper-locations: classpath:mapper/*.xml
# 指定實(shí)體類包,自動(dòng)映射列名和屬性名(開啟駝峰命名)
type-aliases-package: com.example.demo.entity
configuration:
map-underscore-to-camel-case: true4. 定義實(shí)體類
package com.example.demo.entity;
import lombok.Data;
@Data
public class User {
private Long id;
private String username;
private String email;
}5. 定義 Mapper 接口
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Long id);
@Select("SELECT * FROM user")
List<User> findAll();
@Insert("INSERT INTO user(username, email) VALUES(#{username}, #{email})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(User user);
@Update("UPDATE user SET username=#{username}, email=#{email} WHERE id=#{id}")
int update(User user);
@Delete("DELETE FROM user WHERE id=#{id}")
int delete(Long id);
}? 這里用注解方式,簡單清晰;復(fù)雜 SQL 可以寫到 XML 文件。
6. 使用 XML 配置 SQL(適合復(fù)雜 SQL)
在 resources/mapper/UserMapper.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.example.demo.mapper.UserMapper">
<select id="findAll" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
<insert id="insert" parameterType="com.example.demo.entity.User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user(username, email) VALUES(#{username}, #{email})
</insert>
</mapper>7. Service + Controller
Service
package com.example.demo.service;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User getUser(Long id) {
return userMapper.findById(id);
}
public List<User> listUsers() {
return userMapper.findAll();
}
public int addUser(User user) {
return userMapper.insert(user);
}
}Controller
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUser(id);
}
@GetMapping
public List<User> listUsers() {
return userService.listUsers();
}
@PostMapping
public String addUser(@RequestBody User user) {
userService.addUser(user);
return "User added successfully!";
}
}8. 分頁支持
推薦集成 PageHelper 插件:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.7</version>
</dependency>使用:
PageHelper.startPage(1, 10); List<User> users = userMapper.findAll(); PageInfo<User> pageInfo = new PageInfo<>(users);
9. 常見優(yōu)化
- 批量插入:使用
foreach標(biāo)簽。 - 動(dòng)態(tài) SQL:使用
<if><choose>等標(biāo)簽構(gòu)建靈活查詢。 - 二級緩存:
<cache/>配置 + Redis 集成。 - 多數(shù)據(jù)源:Spring Boot + MyBatis 支持動(dòng)態(tài)數(shù)據(jù)源切換。
- 統(tǒng)一異常處理:結(jié)合
@ControllerAdvice統(tǒng)一返回接口錯(cuò)誤信息。
10. 總結(jié)
Spring Boot + MyBatis 集成流程大致分為:
- 加依賴 → 2. 配數(shù)據(jù)源 → 3. 寫實(shí)體類 → 4. 寫 Mapper(注解/XML) → 5. 寫 Service/Controller → 6. 增強(qiáng)功能(分頁、緩存、動(dòng)態(tài) SQL)。
這樣,就能快速搭建一個(gè) 基于 Spring Boot + MyBatis 的全棧開發(fā)框架 ??。
到此這篇關(guān)于Spring Boot 集成 MyBatis 全攻略(最新整理)的文章就介紹到這了,更多相關(guān)Spring Boot 集成 MyBatis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot同時(shí)集成Mybatis和Mybatis-plus框架
- Spring Boot集成MyBatis-Plus 自定義攔截器實(shí)現(xiàn)動(dòng)態(tài)表名切換功能
- SpringBoot與MyBatis-Plus的高效集成方式
- springboot集成mybatis-plus全過程
- Springboot集成Mybatis-plus、ClickHouse實(shí)現(xiàn)增加數(shù)據(jù)、查詢數(shù)據(jù)功能
- SpringBoot3.0集成MybatisPlus的實(shí)現(xiàn)方法
- MyBatis-Plus介紹及Spring Boot 3集成指南
- SpringBoot集成MyBatis的多種方式
- SpringBoot中MyBatis-Flex的集成和使用實(shí)現(xiàn)
相關(guān)文章
Java靜態(tài)代理和動(dòng)態(tài)代理總結(jié)
這篇文章主要介紹了Java靜態(tài)代理和動(dòng)態(tài)代理總結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn)
這篇文章主要介紹了通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
springboot整合ehcache和redis實(shí)現(xiàn)多級緩存實(shí)戰(zhàn)案例
這篇文章主要介紹了springboot整合ehcache和redis實(shí)現(xiàn)多級緩存實(shí)戰(zhàn)案例,從源碼角度分析下多級緩存實(shí)現(xiàn)原理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08
java集合框架 arrayblockingqueue應(yīng)用分析
ArrayBlockingQueue是一個(gè)由數(shù)組支持的有界阻塞隊(duì)列。此隊(duì)列按 FIFO(先進(jìn)先出)原則對元素進(jìn)行排序。隊(duì)列的頭部 是在隊(duì)列中存在時(shí)間最長的元素2012-11-11

