欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot與MyBatis-Plus的高效集成方式

 更新時(shí)間:2024年11月21日 09:16:39   作者:真心喜歡你吖  
本文詳細(xì)介紹了如何在SpringBoot項(xiàng)目中整合MyBatis-Plus,包括環(huán)境準(zhǔn)備、實(shí)體類與Mapper接口定義、CRUD操作、條件構(gòu)造器、事務(wù)管理、安全性考慮、性能優(yōu)化、版本兼容性與遷移、實(shí)際應(yīng)用場(chǎng)景和監(jiān)控與日志等內(nèi)容,通過(guò)這些步驟,讀者可以掌握MyBatis-Plus的高級(jí)特性和最佳實(shí)踐

引言

在現(xiàn)代 Java 開發(fā)中,MyBatis-Plus 作為 MyBatis 的增強(qiáng)工具,以其簡(jiǎn)化 CRUD 操作和無(wú)需編寫 XML 映射文件的特點(diǎn),受到了開發(fā)者的青睞。

本篇文章將帶你一步步整合 Spring Boot 與 MyBatis-Plus,并展示其在實(shí)際開發(fā)中的應(yīng)用,包括事務(wù)管理、安全性考慮、性能優(yōu)化等高級(jí)特性。

環(huán)境準(zhǔn)備

1.1 導(dǎo)入依賴

pom.xml 文件中添加 MyBatis-Plus 的起步依賴:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>

確保使用 Maven Helper 插件檢查依賴沖突。

1.2 修改配置文件

application.yml 中配置數(shù)據(jù)庫(kù)連接和 MyBatis-Plus 參數(shù):

server:
  port: 8889
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/boot_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True
    username: root
    password: 123456
mybatis-plus:
  mapper-locations: mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  type-aliases-package: com.example.demo.entity

1.3 IUser 實(shí)體類

定義 IUser 實(shí)體類,映射數(shù)據(jù)庫(kù)中的用戶表:

@Data
@TableName("t_user")
public class IUser {
    @TableId(value = "u_id", type = IdType.AUTO)
    private Integer uId;
    @TableField("user_name")
    private String userName;
    private String email;
    private String passWord;
    private Date birth;
    private int gender;
}

1.4 UserMapper 接口

創(chuàng)建 UserMapper 接口,繼承 BaseMapper:

@Mapper
public interface IUserMapper extends BaseMapper<IUser> {}

使用

2.1 基礎(chǔ)增刪改查

新增一條 User 數(shù)據(jù)

@Autowired
private IUserMapper userMapper;

@Test
public void insertUser() {
    IUser user = new IUser();
    user.setUserName("曹操");
    user.setPassWord("88888888");
    user.setEmail("321@qin.com");
    userMapper.insert(user);
}

根據(jù)條件刪除 User

@Test
public void deleteUserById() {
    userMapper.deleteById(1001);
}

2.2 批量操作

批量新增

@Test
public void batchInsertUsers() {
    List<IUser> users = Arrays.asList(
        new IUser().setUserName("關(guān)羽").setPassWord("258"),
        new IUser().setUserName("關(guān)公").setPassWord("7530"),
        new IUser().setUserName("關(guān)項(xiàng)").setPassWord("159")
    );
    userMapper.insertBatch(users);
}

2.3 查詢條件構(gòu)造器【QueryWrapper】使用

使用 QueryWrapper 構(gòu)造查詢條件:

@Test
public void selectUsersByQueryWrapper() {
    QueryWrapper<IUser> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("user_name", "項(xiàng)羽").like("email", "123@163.com");
    userMapper.selectList(queryWrapper);
}

2.4 修改條件構(gòu)造器【UpdateWrapper】使用

使用 UpdateWrapper 構(gòu)造更新條件:

@Test
public void updateUserByUpdateWrapper() {
    UpdateWrapper<IUser> updateWrapper = new UpdateWrapper<>();
    updateWrapper.eq("user_name", "王小五").set("email", "wxw@qq.com");
    userMapper.update(null, updateWrapper);
}

2.5 事務(wù)管理

事務(wù)的配置

在服務(wù)層方法上使用 @Transactional 注解來(lái)確保操作的原子性。

@Service
public class UserService {

    @Autowired
    private IUserMapper userMapper;

    @Transactional
    public void updateUserAndSendEmail(String userName, String newEmail) {
        // 更新用戶信息
        IUser user = new IUser();
        user.setUserName(userName);
        user.setEmail(newEmail);
        userMapper.updateById(user);

        // 發(fā)送郵件操作(示例)
        sendEmailToUser(userName, newEmail);
    }

    private void sendEmailToUser(String userName, String email) {
        // 郵件發(fā)送邏輯
    }
}

事務(wù)的傳播行為

Spring 支持多種事務(wù)傳播行為,可以根據(jù)業(yè)務(wù)需求配置。

2.6 安全性考慮

防止 SQL 注入

MyBatis-Plus 通過(guò)預(yù)編譯的語(yǔ)句防止 SQL 注入。

數(shù)據(jù)加密

在應(yīng)用層對(duì)敏感數(shù)據(jù)進(jìn)行加密,比如用戶密碼的存儲(chǔ)和驗(yàn)證。

public class SecurityUtils {

    public static String encryptPassword(String password) {
        // 加密密碼邏輯
    }

    public static boolean checkPassword(String rawPassword, String encryptedPassword) {
        // 驗(yàn)證密碼邏輯
    }
}

代碼生成器

3.1 準(zhǔn)備項(xiàng)目和數(shù)據(jù)庫(kù)表

準(zhǔn)備一個(gè) Spring Boot 空項(xiàng)目,并創(chuàng)建數(shù)據(jù)庫(kù)表:

CREATE TABLE `t_user` (
    `u_id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
    `user_name` varchar(10) NOT NULL COMMENT '用戶登錄名',
    `email` varchar(50) DEFAULT NULL COMMENT '郵箱',
    `pass_word` varchar(30) NOT NULL COMMENT '密碼',
    ...
    PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

3.2 引入依賴

pom.xml 中添加代碼生成器的依賴:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.0</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>

3.3 配置文件

application.yml 中配置數(shù)據(jù)庫(kù)連接:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/generate?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

3.4 測(cè)試工具類

創(chuàng)建一個(gè)測(cè)試工具類,用于自動(dòng)生成代碼:

public class CodeGenerator {
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        mpg.setDataSource(new DataSourceConfig.Builder()
            .setUrl("jdbc:mysql://localhost:3306/generate?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True")
            .setDriverName("com.mysql.cj.jdbc.Driver")
            .setUsername("root")
            .setPassword("123456")
            .build());
        mpg.setGlobalConfig(new GlobalConfig.Builder()
            .setOutputDir(System.getProperty("user.dir") + "/src/main/java")
            .setAuthor("Your Name")
            .setOpen(false)
            .build());
        mpg.setPackageInfo(new PackageConfig.Builder()
            .setParent("com.example.demo")
            .setEntity("entity")
            .setMapper("mapper")
            .setService("service")
            .setController("controller")
            .build());
        mpg.setStrategy(new StrategyConfig.Builder()
            .setInclude("t_user")
            .build());
        mpg.execute();
    }
}

3.5 生成目錄結(jié)構(gòu)

運(yùn)行上述測(cè)試工具類,生成項(xiàng)目的目錄結(jié)構(gòu)。

3.6 調(diào)整和測(cè)試

調(diào)整生成的 Mapper XML 文件位置,并在 Mapper 接口上添加 @Mapper 注解。

在啟動(dòng)類上添加 @MapperScan 注解。然后進(jìn)行測(cè)試,例如新增一個(gè)用戶:

@Autowired
private TUserMapper userMapper;

@Test
public void testInsertUser() {
    TUser user = new TUser();
    user.setUserName("王中王");
    user.setPassWord("wzw123456");
    userMapper.insert(user);
}

總結(jié)與學(xué)習(xí)成果

本篇文章,您將能夠獲得以下知識(shí)和技能:

  1. 環(huán)境搭建:您將學(xué)會(huì)如何在 Spring Boot 項(xiàng)目中引入 MyBatis-Plus,并配置必要的依賴和數(shù)據(jù)庫(kù)連接。
  2. 實(shí)體類與Mapper接口:您將了解如何創(chuàng)建實(shí)體類來(lái)映射數(shù)據(jù)庫(kù)表,以及如何定義 Mapper 接口來(lái)操作數(shù)據(jù)庫(kù)。
  3. CRUD操作:您將掌握使用 MyBatis-Plus 進(jìn)行基礎(chǔ)的增刪改查操作,包括單條記錄和批量操作的處理。
  4. 條件構(gòu)造器:您將學(xué)會(huì)使用 QueryWrapper 和 UpdateWrapper 來(lái)構(gòu)建復(fù)雜的查詢和更新條件,提高代碼的可讀性和維護(hù)性。
  5. 事務(wù)管理:您將了解如何在服務(wù)層方法上使用 @Transactional 注解來(lái)確保數(shù)據(jù)庫(kù)操作的原子性。
  6. 安全性實(shí)踐:您將學(xué)到如何防止 SQL 注入攻擊,并對(duì)敏感數(shù)據(jù)進(jìn)行加密處理,增強(qiáng)應(yīng)用的安全性。
  7. 性能優(yōu)化:您將探索查詢優(yōu)化技巧和緩存策略,以提高數(shù)據(jù)庫(kù)操作的性能。
  8. 版本兼容性與遷移:您將了解不同版本的 MyBatis-Plus 之間的差異,并學(xué)會(huì)如何將舊版本遷移到新版本。
  9. 實(shí)際應(yīng)用場(chǎng)景:您將通過(guò)實(shí)際案例分析,了解 MyBatis-Plus 在解決實(shí)際問(wèn)題中的應(yīng)用。
  10. 監(jiān)控與日志:您將學(xué)會(huì)如何配置和使用 MyBatis-Plus 的日志記錄功能,以及如何監(jiān)控?cái)?shù)據(jù)庫(kù)操作的性能。
  11. 代碼生成器:您將掌握如何使用 MyBatis-Plus 提供的代碼生成器來(lái)快速生成項(xiàng)目代碼,提高開發(fā)效率。

通過(guò)這些內(nèi)容,您不僅能夠深入了解 MyBatis-Plus 的強(qiáng)大功能,還能夠?qū)⑦@些知識(shí)應(yīng)用到實(shí)際項(xiàng)目中,提升您的開發(fā)能力和項(xiàng)目質(zhì)量。希望這篇文章能夠幫助您在 Spring Boot 和 MyBatis-Plus 的學(xué)習(xí)之路上更進(jìn)一步。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud中的分布式鎖用法示例詳解(Java+Redis SETNX命令)

    SpringCloud中的分布式鎖用法示例詳解(Java+Redis SETNX命令)

    在Spring Cloud項(xiàng)目中,使用Java和Redis結(jié)合實(shí)現(xiàn)的分布式鎖可以確保訂單的一致性和并發(fā)控制,分布式鎖的使用能夠在多個(gè)實(shí)例同時(shí)提交訂單時(shí),僅有一個(gè)實(shí)例可以成功進(jìn)行操作,本文給大家介紹Spring,Cloud中的分布式鎖用法詳解(Java+Redis SETNX命令),感興趣的朋友一起看看吧
    2023-10-10
  • 深入理解java中的null“類型”

    深入理解java中的null“類型”

    這篇文章主要介紹了深入理解java中的null“類型”,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 淺談@PostConstruct不被調(diào)用的原因

    淺談@PostConstruct不被調(diào)用的原因

    這篇文章主要介紹了淺談@PostConstruct不被調(diào)用的原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法

    SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法

    SpringBoot接口防抖主要通過(guò)前端和后端兩種方式實(shí)現(xiàn),前端通過(guò)JavaScript控制用戶操作,后端通過(guò)攔截器、過(guò)濾器等機(jī)制控制請(qǐng)求頻率,文中介紹的非常詳細(xì),感興趣的可以了解一下
    2024-11-11
  • Java內(nèi)存溢出和內(nèi)存泄露

    Java內(nèi)存溢出和內(nèi)存泄露

    這篇文章主要介紹了Java內(nèi)存溢出和內(nèi)存泄露的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • MyBatis項(xiàng)目的創(chuàng)建和增刪查改操作詳解

    MyBatis項(xiàng)目的創(chuàng)建和增刪查改操作詳解

    這篇文章主要介紹了MyBatis項(xiàng)目的創(chuàng)建和增刪查改操作,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • java獲取機(jī)器碼簡(jiǎn)單實(shí)現(xiàn)demo

    java獲取機(jī)器碼簡(jiǎn)單實(shí)現(xiàn)demo

    這篇文章主要為大家介紹了java獲取機(jī)器碼的簡(jiǎn)單實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java中的JetCache?實(shí)戰(zhàn)

    Java中的JetCache?實(shí)戰(zhàn)

    這篇文章主要介紹了Java中的JetCache實(shí)戰(zhàn),JetCache是一個(gè)基于Java的緩存系統(tǒng)封裝,提供統(tǒng)一的API和注解來(lái)簡(jiǎn)化緩存的使用,下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • java數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)的實(shí)現(xiàn)

    java數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了java數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • SpringBoot加載不出來(lái)application.yml文件的解決方法

    SpringBoot加載不出來(lái)application.yml文件的解決方法

    這篇文章主要介紹了SpringBoot加載不出來(lái)application.yml文件的解決方法,文中通過(guò)示例代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作有一定的幫助,需要的朋友跟著小編來(lái)一起來(lái)學(xué)習(xí)吧
    2023-12-12

最新評(píng)論