day13-SpringBoot整合MyBatis/Plus

来源:https://www.cnblogs.com/liyuelian/archive/2023/03/25/17255766.html
-Advertisement-
Play Games

SpringBoot整合MyBatis/Plus 1.SpringBoot整合MyBatis 1.1整合案例 需求:整合SpringBoot和Mybatis,向資料庫中查詢數據。 項目結構: 1.1.1創建資料庫和表 -- 創建資料庫 DROP DATABASE IF EXISTS springbo ...


SpringBoot整合MyBatis/Plus

1.SpringBoot整合MyBatis

1.1整合案例

需求:整合SpringBoot和Mybatis,向資料庫中查詢數據。

項目結構:

image-20230325185336841

1.1.1創建資料庫和表

-- 創建資料庫
DROP DATABASE IF EXISTS springboot_mybatis;
CREATE DATABASE springboot_mybatis;
USE springboot_mybatis;

-- 創建表
CREATE TABLE monster(
`id` INT NOT NULL  AUTO_INCREMENT,
`age` INT NOT NULL,
`birthday` DATE DEFAULT NULL,
`email` VARCHAR(255) DEFAULT NULL,
`gender` CHAR(1) DEFAULT NULL,
`name` VARCHAR(255) DEFAULT NULL,
`salary` DOUBLE NOT NULL,
PRIMARY KEY(`id`) 
)CHARSET=utf8;

插入測試數據:

image-20230325164153728

1.1.2引入依賴

在pom.xml中引入mybatis及相關的依賴

<!--導入SpringBoot父工程-->
<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.5.3</version>
</parent>

<dependencies>
    <!--web starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--mybatis starter-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>
    <!--mysql驅動,使用版本仲裁-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--配置處理器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
    </dependency>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <!--springboot test starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
     <!--druid 數據源,也可以使用預設的數據源-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.17</version>
    </dependency>
</dependencies>

1.1.3配置數據源

在resource/application.yml中配置數據源,並完成SpringBoot項目啟動測試

spring:
  datasource: #配置數據源
    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
server:
  port: 9090

創建配置類,設置Druid數據源:

這裡如果引入的依賴是druid-starter,可以直接在yml文件中配置

package com.li.springboot.mybatis.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author 李
 * @version 1.0
 */
@Configuration
public class DruidDataSourceConfig {
    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
}

1.1.4指定mapper.xml路徑

在application.yml文件中配置mybatis,指定要掃描的mapper.xml文件的路徑

在ssm整合中,這一步也是在applicationContext.xml容器文件中指定

mybatis:
  mapper-locations: classpath:mapper/*.xml #指定要掃描的mapper.xml路徑

1.1.5代碼實現

(1)創建JavaBean--Monster.java,用於表映射

package com.li.springboot.mybatis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @author 李
 * @version 1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Monster {
    private Integer id;
    private Integer age;
    private Date birthday;
    private String email;
    private String name;
    private String gender;
    private Double salary;
}

(2)創建mapper介面,用於聲明方法

package com.li.springboot.mybatis.mapper;

import com.li.springboot.mybatis.bean.Monster;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author 李
 * @version 1.0
 * 使用註解@mapper,就可以將mapper介面對象註入容器
 */
@Mapper//除了使用註解,也可以直接指定要掃描的包
public interface MonsterMapper {
    //根據id查詢數據記錄
    public Monster getMonsterById(Integer id);
}

(3)在resource/mapper目錄下創建介面對應的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.li.springboot.mybatis.mapper.MonsterMapper">
    <!--配置getMonsterById方法-->
    <select id="getMonsterById" resultType="com.li.springboot.mybatis.bean.Monster">
        SELECT *
        FROM `monster`
        WHERE `id` = #{id}
    </select>
</mapper>

(4)進行測試:

如果要寫測試類,一定要寫主程式

package com.li.springboot.mybatis;

import com.li.springboot.mybatis.bean.Monster;
import com.li.springboot.mybatis.mapper.MonsterMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * @author 李
 * @version 1.0
 */
@SpringBootTest
public class ApplicationTest {
    @Resource
    private MonsterMapper monsterMapper;//註入的實際上是它的代理類

    //測試MonsterMapper介面是否可用
    @Test
    public void getMonsterMapper() {
        Monster monster = monsterMapper.getMonsterById(1);
        System.out.println("monster=" + monster);
    }
}

測試結果:成功從資料庫中獲取信息。

image-20230325175049289

接下來的Service、Controller層和ssm沒有多大區別,這裡不再贅述

1.1.6補充-對mybatis的配置

  • SpringBoot對mybatis的配置有兩種方式:

(1)使用傳統方式配置,即使用mybatis-config.xml。不過要先在application.yml文件中指定mybatis配置文件的路徑。

mybatis:
  config-location:  #指定mybatis-config.xml文件的路徑

(2)直接使用application.yml文件進行配置,例如:

mybatis:
  type-aliases-package: com.li.springboot.mybatis.bean #指定別名
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定標準的日誌輸出
  • 兩種方式的選擇:
    1. 如果配置比較簡單,可以在yml中直接配置
    2. 如果配置內容較多,可以單獨地做一個配置文件

1.2註意事項和使用細節

SpringBoot中日期預設是格林尼治標準時間,和中國標準時相差8小時,可以通過註解@JsonFormat解決此問題:

image-20230325190915992

其中pattern表示日期格式,timezone表示時區,GMT是格林尼治時間

2.SpringBoot整合MyBatis-Plus

2.1MyBatis-Plus基本介紹

MyBatisPlus官方文檔

  1. MyBatis-Plus,簡稱MP,是一個MyBatis的增強工具,在MyBatis的基礎上只做增強不做改變,為簡化開發、提高效率而生。

    image-20230325190915992
  2. 強大的CRUD操作:內置了通用Mapper、通用Service,通過少量配置即可實現單表大部分CRUD操作,更有強大的條件構造器,滿足各類需求。

2.2整合案例

需求:整合SpringBoot和MyBatis-Plus,向資料庫中查詢數據。

2.2.1創建資料庫和表

略,表結構同上。

image-20230325192508855

2.2.2引入依賴

pom.xml文件中引入mybatis-plus starter和其他依賴。

<!--導入SpringBoot父工程-->
<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.5.3</version>
</parent>

<!--引入必要依賴-->
<dependencies>
    <!--web starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--MyBatis-plus starter-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>

    <!--mysql驅動-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!--配置處理器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
    </dependency>

    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <!--springboot test starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--druid 數據源,也可以使用預設的數據源-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.17</version>
    </dependency>
</dependencies>

2.2.3配置數據源

(1)在resource/application.yml中配置數據源

server:
  port: 9090
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456

(2)創建配置類,設置Druid數據源:這一步和mybatis整合相同,見上1.1.3操作

2.2.4代碼實現

(1)創建JavaBean--Monster.java,用於表映射(同1.1.4的操作,略)

(2)創建mapper介面,用於聲明方法

相比於mybatis需要自己聲明方法,MP提供了一個通用的BaseMapper,有很多通用的方法,通過繼承,我們就可以直接使用,簡化開發

package com.li.springboot.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.li.springboot.mybatisplus.bean.Monster;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author 李
 * @version 1.0
 * BaseMapper是MyBatisPlus內置的通用Mapper,提供了很多的方法
 * 如果它提供的方法不能滿足業務需求,我們可以在這裡開發新的方法
 */
@Mapper
public interface MonsterMapper extends BaseMapper<Monster> { 
    
}

如果在這一步沒有自定義的介面方法,就不需要使用Mapper.xml文件實現聲明

(3)開發Service

MP也提供了一個通用的Service介面,裡面也提供了很多方法

package com.li.springboot.mybatisplus.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.li.springboot.mybatisplus.bean.Monster;

/**
 * @author 李
 * @version 1.0
 * 1.在mybatis中,是在MonsterService聲明方法,然後在其實現類實現
 * 2.而在MyBatis-Plus中,我們可以通過繼承父介面:IService,從而使用裡面的很多方法
 * 3.如果它提供的方法不能滿足業務需求,再開發新的方法
 */
@Service
public interface MonsterService extends IService<Monster> {
}

註意:如果在業務Service介面聲明瞭自定義方法,通常會創建一個實現類實現介面方法,問題是:由於業務Service介面繼承了IService介面,那麼業務Service的實現類要同時實現兩個介面的方法才行,非常麻煩。

解決方案是:業務實現類通過繼承ServiceImpl類解決問題。ServiceImpl類是MyBatis-Plus提供的一個類,它已經實現了IService的方法。這樣業務實現類就只需要實現業務Service自定義的方法。

image-20230325210413312

業務實現類MonsterServiceImpl:

package com.li.springboot.mybatisplus.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.li.springboot.mybatisplus.bean.Monster;
import com.li.springboot.mybatisplus.mapper.MonsterMapper;
import com.li.springboot.mybatisplus.service.MonsterService;

/**
 * @author 李
 * @version 1.0
 */
public class MonsterServiceImpl
        extends ServiceImpl<MonsterMapper, Monster>
        implements MonsterService {
    //通過繼承ServiceImpl,這個實現類中就只用實現業務Service自定義的方法
}

controller層的實現和mybatis的大同小異,這裡就不寫了

2.2.5補充-對MP的配置

  • MyBatis-Plus的配置和MyBatis配置幾乎沒有區別,在SpringBoot中,同樣可以通過如下方式進行配置:

(1)使用傳統的配置文件配置,不過要先在application.yml文件中指定配置文件的路徑:

mybatis-plus:
  config-location: xxx #指定mp配置文件的路徑

(2)直接使用application.yml文件進行配置,例如:

mybatis-plus:
  configuration: # 進行mybatis-plus配置,配置項和mybatis一樣
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • @MapperScan註解(修飾於主程式)可以替代@Mapper(修飾於mapper介面),basePackages屬性可以接收多個值

    image-20230325212533916

2.3註意事項和使用細節

MyBatis-Plus的註解

(1)@TableName

描述:表名註解,標識實體類對應的表。如果實體類的類名和表名一致,則該註解可以省略,否則需要通過@TableName指定表名

(2)為了開發方便,IDEA可以安裝MyBatisX插件,參考文檔。該插件具有如下功能:XML 跳轉、生成代碼(需先在 idea 配置 Database 配置數據源)、重置模板、JPA 提示(生成新增、生成查詢、生成修改、生成刪除)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.聲明與變數 let聲明的變數可以多次賦值 let 變數名 = 值; const修飾叫常量,只能賦值一次,但是引用的值可以改變 var聲明的變數可以多次賦值 結論:能用let不用var ,因為作用域的問題 2.基本類型和對象類型 undefined 和 null undefined 指 未定義的對 ...
  • 代理模式(Proxy Pattern)是一種結構型設計模式,結構型模式描述如何將類或對象按某種佈局組成更大的結構。它允許你提供一個代理對象來控制對另一個對象的訪問。代理對象擁有與實際對象相同的介面,因此它可以被用來代替實際對象。 ...
  • 在軟體行業,對於什麼是架構,都有很多的爭論,每個人都有自己的理解。在不同的書籍上, 不同的作者, 對於架構的定義也不統一, 角度不同, 定義不同。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義, 因為概念是人認識這個世界的基礎和用來溝通的手段,如果對架構概... ...
  • 超級大的數做加減乘除 java有八大數據類型: 1、byte(位),最大存儲數據量是255; 2、short(短整數),最大數據存儲量是65536; 3、int(整數),最大數據存儲容量是2的32次方減1; 4、long(長整數),最大數據存儲容量是2的64次方減1; 5、float(單精度浮動數) ...
  • Java已經誕生20多年了,依然是企業級開發中使用最廣泛的語言,也是挨罵最多的語言。Java廣受批評的四個缺點是:性能差、記憶體消耗大、GUI弱、代碼啰嗦,我們應該如何看待這幾個問題呢?在微服務的背景下,提倡圍繞業務能力而非技術來構建應用,允許由不同的語言構建應用程式。一個超大的集群,往往有上萬個微服... ...
  • 什麼是Servlet? Servlet是使用Java語言編寫的運行在伺服器端的程式。狹義的Servlet是指Java語言實現的一個介面,廣義的Servlet是指任何實現了這個Servlet介面的類,一般情況下,人們將Servlet理解為後者。Servlet 主要用於處理客戶端傳來的 HTTP 請求, ...
  • 本文已經收錄到Github倉庫,該倉庫包含電腦基礎、Java基礎、多線程、JVM、資料庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散式、微服務、設計模式、架構、校招社招分享等核心知識點,歡迎star~ Github地址 Spring的優點 通過控制反轉 ...
  • 電腦編程說到底還是程式員的思維體現,人情世故也會反映在代碼的邏輯上, 寫代碼就如學做人一樣,從哪裡來到哪裡去 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...