最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus與Druid結(jié)合Dynamic-datasource實現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例

 更新時間:2023年10月30日 09:09:04   作者:I'm?Jie  
Dynamic-DataSource 可以和絕大多是連接層插件搭配使用,比如:mybatis,mybatis-plus,hibernate等,本文就來介紹一下MyBatis-Plus與Druid結(jié)合Dynamic-datasource實現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例,感興趣的可以了解一下

MyBatis-Plus 官網(wǎng):https://baomidou.com/

MyBatis-Plus 官方文檔:https://baomidou.com/pages/24112f/

dynamic-datasource 文檔(付費):https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611

創(chuàng)建數(shù)據(jù)庫

  • 在這里我分別創(chuàng)建了兩個數(shù)據(jù)庫:test1 和 test2,并分別創(chuàng)建相同結(jié)構的數(shù)據(jù)表 User,當然,你也可以根據(jù)實際情況創(chuàng)建不同結(jié)構的數(shù)據(jù)表:

    -- ----------------------------
    -- User 表結(jié)構
    -- ----------------------------
    CREATE TABLE `user`  (
      `user_id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
      `user_name` varchar(30)  NOT NULL COMMENT '用戶賬號',
      `nick_name` varchar(30)  NOT NULL COMMENT '用戶昵稱',
      `email` varchar(50)  NULL DEFAULT '' COMMENT '用戶郵箱',
      `password` varchar(100)  NULL DEFAULT '' COMMENT '密碼',
      PRIMARY KEY (`user_id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 1 COMMENT = '用戶信息表' ROW_FORMAT = Dynamic;
    
  • 分別向兩個數(shù)據(jù)庫中插入數(shù)據(jù):

    -- ----------------------------
    -- 數(shù)據(jù)庫 test1 插入記錄
    -- ----------------------------
    INSERT INTO `user` VALUES (100, 'wangwu', '王五', 'wangwu@qq.com', '123456');
    INSERT INTO `user` VALUES (101, 'zhaoliu', '趙六', 'zhaoliu@qq.com', '123456');
    
    -- ----------------------------
    -- 數(shù)據(jù)庫 test2 插入記錄
    -- ----------------------------
    INSERT INTO `user` VALUES (100, 'zhangsan', '張三', 'zhangsan@qq.com', '123456');
    INSERT INTO `user` VALUES (101, 'lisi', '李四', 'lisi@qq.com', '123456');
    

添加依賴

接下來我們需要在pom.xml文件中添加所需的依賴項。包括MyBatis-Plus、Dynamic Datasource、Druid和MySQL驅(qū)動程序的依賴:

<dependencies>
    <!-- Mybatis Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>最新版本</version>
    </dependency>
    
    <!-- Dynamic Datasource -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        <version>最新版本</version>
    </dependency>

    <!-- Druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>最新版本</version>
    </dependency>

    <!-- MySQL驅(qū)動程序 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>最新版本</version>
    </dependency>
</dependencies>

注:請確保將最新版本替換為實際使用的版本號。

配置數(shù)據(jù)源

application.ymlapplication.properties文件中配置數(shù)據(jù)源信息。以下是一個示例的application.yml配置:

spring:
  #數(shù)據(jù)源配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    druid:
      statViewServlet:
        enabled: true
        # 設置白名單,不填則允許所有訪問
        allow:
        url-pattern: /druid/*
        # 控制臺管理用戶名和密碼
        login-username: helloworld
        login-password: 123456
    dynamic:
      druid:
        initial-size: 10  # 連接池初始大小
        max-active: 100   # 連接池最大連接數(shù)
        min-idle: 10      # 連接池最小空閑連接數(shù)
        max-wait: 60000   # 獲取連接的最大等待時間,單位為毫秒
        pool-prepared-statements: true  # 是否緩存PreparedStatement,默認為true
        max-pool-prepared-statement-per-connection-size: 20  # 每個連接緩存Statement的最大數(shù)目
        time-between-eviction-runs-millis: 60000  # 連接回收器運行的時間間隔,單位為毫秒
        min-evictable-idle-time-millis: 300000  # 連接在池中最小空閑的時間,達到此值后將被移除,單位為毫秒
        test-while-idle: true   # 空閑連接檢測是否可用,默認為true
        test-on-borrow: false   # 取連接時檢測連接是否可用,默認為false
        test-on-return: false   # 還連接時檢測連接是否可用,默認為false
        validationQuery: "select 1"  # 驗證連接的SQL語句
        filters: stat,wall    # 連接過濾器,用于統(tǒng)計和防火墻功能
        stat:
          log-slow-sql: true  # 是否打印慢SQL日志
          slow-sql-millis: 1000  # 慢SQL的閾值時間,單位為毫秒
          merge-sql: false   # 是否合并SQL,默認為false
        wall:
          multi-statement-allow: true  # 是否允許一次執(zhí)行多條語句,默認為true
      primary: test1 #主數(shù)據(jù)源,在代碼中不指定數(shù)據(jù)源時默認為該主數(shù)據(jù)源
      datasource:
        test1: #數(shù)據(jù)源 test1
          url: jdbc:mysql://localhost:3306/test1
          username: root
          password: root
        test2: #數(shù)據(jù)源 test2
          url: jdbc:mysql://localhost:3306/test2
          username: root
          password: root

這里示例配置了兩個數(shù)據(jù)源,分別是useradmin。你可以根據(jù)實際情況進行配置。

編寫 Mapper

編寫 Mapper 接口和對應的 XML 文件:創(chuàng)建 Mapper 接口,并使用 MyBatis-Plus 提供的注解來定義數(shù)據(jù)庫操作。例如:

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 定義數(shù)據(jù)庫操作方法
}
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <!-- 編寫SQL語句 -->
</mapper>

編寫 Service

在 UserService 接口中,定義了兩個方法:

  • getUsersFromTest1Db():返回一個List類型的列表,表示從test1數(shù)據(jù)庫中獲取用戶信息。
  • getUsersFromTest2Db():返回一個List類型的列表,表示從test2數(shù)據(jù)庫中獲取用戶信息。
public interface UserService extends IService<User> {
    /**
     * 從test1數(shù)據(jù)庫中獲取用戶信息
     */
    List<User> getUsersFromTest1Db() ;

    /**
     * 從test2數(shù)據(jù)庫中獲取用戶信息
     */
    List<User> getUsersFromTest2Db() ;
}

編寫 UserServiceImpl 實現(xiàn)類實現(xiàn)具體的方法:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Autowired
    private UserMapper userMapper;

    @DS("test1") // 指定數(shù)據(jù)源為 test1
    public List<User> getUsersFromTest1Db() {
        return userMapper.selectList(null);
    }

    @DS("test2") // 指定數(shù)據(jù)源為 test2
    public List<User> getUsersFromTest2Db() {
        return userMapper.selectList(null);
    }

}

由于我們需要分別查詢 test1 和 test2 數(shù)據(jù)庫中的 user 表,所以我們需要在查詢時切換數(shù)據(jù)源,Dynamic-datasource提供了注解的方式切換數(shù)據(jù)源,即我們在上述示例中使用的@DS注解來為每個方法指定數(shù)據(jù)源。

這樣,當調(diào)用getUsersFromTest1Db()方法時,會使用名為test1的數(shù)據(jù)源進行數(shù)據(jù)庫操作;而調(diào)用getUsersFromTest2Db()方法時,則會使用名為test2的數(shù)據(jù)源。

編寫 Controller

編寫一個控制器類 UserController,使用@RestController注解標記為控制器組件,表示它可以處理HTTP請求,并將結(jié)果直接響應給客戶端。

在類中使用@Autowired注解將UserService依賴注入到UserController中,以便在方法中使用UserService對象。

user1List()方法使用@GetMapping注解,指定了路徑為"/test1-list",表示當客戶端發(fā)送GET請求到該路徑時,會執(zhí)行該方法。在方法體內(nèi)部,調(diào)用userService的getUsersFromTest1Db方法,以獲取用戶列表,并將結(jié)果作為List類型返回給客戶端。

userList()方法同樣使用@GetMapping注解,指定了路徑為"/test2-list",表示當客戶端發(fā)送GET請求到該路徑時,會執(zhí)行該方法。在方法體內(nèi)部,調(diào)用userService的getUsersFromTest2Db方法,以獲取用戶列表,并將結(jié)果作為List類型返回給客戶端。

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/test1-list")
    public List<User> user1List() {
        // 調(diào)用UserService的getUsersFromTest1Db方法獲取用戶列表并返回
        return userService.getUsersFromTest1Db();
    }

    @GetMapping("/test2-list")
    public List<User> user2List() {
        // 調(diào)用UserService的getUsersFromTest2Db方法獲取用戶列表并返回
        return userService.getUsersFromTest2Db();
    }

}

配置 MyBatis-Plus

在項目啟動類上添加Mapper掃描注解:

@MapperScan("com.hw.mapper")
@SpringBootApplication
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }

}

在配置文件中添加XML路徑:

mybatis-plus:
  # 指定 Mapper XML 文件所在路徑
  mapper-locations: classpath*:mapper/*.xml

測試

啟動項目,查看控制臺輸出日志,可以看到已經(jīng)初始化兩個數(shù)據(jù)源,主數(shù)據(jù)源就是我們在配置文件中指定的 primary: test1

image-20231029231728893

使用 ApiFox 分別訪問兩個接口,分別返回不同數(shù)據(jù)源的數(shù)據(jù)信息:

訪問/test1-list

image-20231029232252219

訪問/test2-list

image-20231029232221843

到此這篇關于MyBatis-Plus與Druid結(jié)合Dynamic-datasource實現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例的文章就介紹到這了,更多相關MyBatis-Plus Druid Dynamic-datasource多數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • Java輸入流與輸出流超全面講解

    Java輸入流與輸出流超全面講解

    這篇文章主要介紹了關于Java輸入流與輸出流的相關資料,包括它們的定義、作用、最基礎的類和方法,以及如何以其他單位進行讀取,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-05-05
  • IDEA配置和啟動maven項目詳細步驟

    IDEA配置和啟動maven項目詳細步驟

    本文介紹了從SVN檢出Web項目并進行Maven化、JDK和項目結(jié)構配置、Spring和Tomcat環(huán)境搭建的詳細步驟,幫助讀者順利完成Java Web項目的開發(fā)環(huán)境搭建
    2025-10-10
  • Javaweb項目啟動Tomcat常見的報錯解決方案

    Javaweb項目啟動Tomcat常見的報錯解決方案

    Java Web項目啟動Tomcat時可能會遇到各種錯誤,本文就來介紹一下Javaweb項目啟動Tomcat常見的報錯解決方案,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 基于mybatis中<include>標簽的作用說明

    基于mybatis中<include>標簽的作用說明

    這篇文章主要介紹了基于mybatis中<include>標簽的作用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot獲取客戶端的IP地址的實現(xiàn)示例

    SpringBoot獲取客戶端的IP地址的實現(xiàn)示例

    在Web應用程序中,獲取客戶端的IP地址是一項非常常見的需求,本文主要介紹了SpringBoot獲取客戶端的IP地址的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 基于java查找最長字符串代碼實例

    基于java查找最長字符串代碼實例

    這篇文章主要介紹了基于java查找最長字符串代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java圖形界面開發(fā)之簡易記事本

    Java圖形界面開發(fā)之簡易記事本

    這篇文章主要為大家詳細介紹了Java圖形界面開發(fā)之簡易記事本的制作方法,,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 深入探究SpringBoot可以同時處理多少請求

    深入探究SpringBoot可以同時處理多少請求

    SpringBoot是一款非常流行的Java后端框架,它可以幫助開發(fā)人員快速構建高效的Web應用程序,但是,許多人對于SpringBoot能夠同時處理多少請求的疑問仍然存在,在本篇文章中,我們將深入探討這個問題,需要的朋友可以參考下
    2023-07-07
  • Java之NIO基本簡介

    Java之NIO基本簡介

    這篇文章主要介紹了Java之NIO基本簡介,文中給大家講到了NIO?與?BIO的比較結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • springboot如何去獲取前端傳遞的參數(shù)的實現(xiàn)

    springboot如何去獲取前端傳遞的參數(shù)的實現(xiàn)

    這篇文章主要介紹了springboot如何去獲取前端傳遞的參數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05

最新評論

婺源县| 肇源县| 崇义县| 昌吉市| 广宁县| 鄱阳县| 天台县| 得荣县| 泽库县| 黄龙县| 凤山县| 金秀| 鹤庆县| 武隆县| 沙河市| 本溪市| 泰来县| 特克斯县| 淮南市| 黑龙江省| 繁峙县| 长岛县| 洛宁县| 婺源县| 宁强县| 来安县| 通榆县| 洪湖市| 绵阳市| 芦山县| 五莲县| 黄平县| 高台县| 常宁市| 盈江县| 西青区| 龙里县| 安新县| 大冶市| 扬中市| 青州市|