日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql-plus多数据库_IDEA项目搭建九——MybatisPlus多数据库实现

發布時間:2023/12/1 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql-plus多数据库_IDEA项目搭建九——MybatisPlus多数据库实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

MybatisPlus中引用多數據庫時,傳統的配置就失效了,需要單獨寫配置來實現,下面就說一下具體應該如何操作

二、引入MybatisPlus多數據源配置

還是先看一下我的項目結構,Model是單獨的模塊,請自行創建

1、創建一個Maven項目,修改pom.xml文件增加對spring boot、mybatis plus、druid、mysql connector的引用

org.springframework.boot

spring-boot-dependencies

2.0.3.RELEASE

pom

import

org.springframework.boot

spring-boot-starter-web

com.alibaba

druid-spring-boot-starter

1.1.10

mysql

mysql-connector-java

5.1.9

com.baomidou

mybatis-plus-boot-starter

2.3

2、創建resources文件夾,并創建application.yml文件增加以下配置,此處不需要寫mybatis plus的配置了,因為多數據源時這里的mybatis plus會失效,具體原因還沒找到

#設置提供的服務名

spring:

application:

name: javademo-tyh-service-hotel#配置數據庫

datasource:

type: com.alibaba.druid.pool.DruidDataSource

db1:

url: jdbc:mysql://10.11.12.237:3306/db_test?useUnicode=true&characterEncoding=utf8

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

db2:

url: jdbc:mysql://10.11.12.237:3306/tyh_test?useUnicode=true&characterEncoding=utf8

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver#設置自己啟動的端口

server:

port:12000

3、在resources文件夾下創建mapper文件夾,在其內部創建兩個數據庫的兩張表的mapper.xml文件,分別編寫一個自定義方法

BaseInfoMapper.xml

select count(*) from base_info;

UserInfoMapper.xml

select count(*) from user_info;

4、打開main方法所在的類并修改為如下代碼

importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@MapperScan("javademo.tyh.service.hotel.mapper")//標記掃描的mapper位置

public classAppServiceHotel

{public static voidmain( String[] args )

{

SpringApplication.run(AppServiceHotel.class, args);

}

}

5、創建config文件夾,存放mybatis plus的相關配置,此內部的類很多都摘自官網,是按照他的方式進行實現的

創建枚舉DBTypeEnum

/*** 多數據源枚舉*/

public enumDBTypeEnum {

db1("db1"), db2("db2");privateString value;

DBTypeEnum(String value) {this.value =value;

}publicString getValue() {returnvalue;

}

}

創建數據源操作類DbContextHolder

public classDbContextHolder {private static final ThreadLocal contextHolder = new ThreadLocal<>();/*** 設置數據源

*@paramdbTypeEnum*/

public static voidsetDbType(DBTypeEnum dbTypeEnum) {

contextHolder.set(dbTypeEnum.getValue());

}/*** 取得當前數據源

*@return

*/

public staticString getDbType() {return(String) contextHolder.get();

}/*** 清除上下文數據*/

public static voidclearDbType() {

contextHolder.remove();

}

}

創建spring的DataSource抽象類 DynamicDataSource

importorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/** 擴展Spring的AbstractRoutingDataSource抽象類,實現動態數據源。

* AbstractRoutingDataSource中的抽象方法determineCurrentLookupKey是實現數據源的route的核心,

* 這里對該方法進行Override。 【上下文DbContextHolder為一線程安全的ThreadLocal】*/

public class DynamicDataSource extendsAbstractRoutingDataSource {/*** 取得當前使用哪個數據源

*@return

*/@OverrideprotectedObject determineCurrentLookupKey(){returnDbContextHolder.getDbType();

}

}

創建MybatisPlusConfig配置類

importcom.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;importcom.baomidou.mybatisplus.MybatisConfiguration;importcom.baomidou.mybatisplus.entity.GlobalConfiguration;importcom.baomidou.mybatisplus.mapper.LogicSqlInjector;importcom.baomidou.mybatisplus.plugins.PaginationInterceptor;importcom.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;importorg.apache.ibatis.plugin.Interceptor;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.type.JdbcType;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;importjavax.sql.DataSource;importjava.util.HashMap;importjava.util.Map;/*** MybatisPlus配置*/@Configurationpublic classMybatisPlusConfig {//分頁攔截器

@BeanpublicPaginationInterceptor paginationInterceptor() {return newPaginationInterceptor();

}//定義db1

@Bean(name = "db1")

@ConfigurationProperties(prefix= "spring.datasource.db1")//與配置文件中的層次結構相同

publicDataSource db1() {returnDruidDataSourceBuilder.create().build();

}//定義db2

@Bean(name = "db2")

@ConfigurationProperties(prefix= "spring.datasource.db2")//與配置文件中的層次結構相同

publicDataSource db2() {returnDruidDataSourceBuilder.create().build();

}/*** 動態數據源配置

*@return

*/@Bean

@Primarypublic DataSource multipleDataSource(@Qualifier("db1") DataSource db1, @Qualifier("db2") DataSource db2) {

DynamicDataSource dynamicDataSource= newDynamicDataSource();

Map targetDataSources = new HashMap<>();

targetDataSources.put(DBTypeEnum.db1.getValue(), db1);

targetDataSources.put(DBTypeEnum.db2.getValue(), db2);

dynamicDataSource.setTargetDataSources(targetDataSources);

dynamicDataSource.setDefaultTargetDataSource(db1);returndynamicDataSource;

}

@Bean("sqlSessionFactory")public SqlSessionFactory sqlSessionFactory() throwsException {//***導入MybatisSqlSession配置***

MybatisSqlSessionFactoryBean sqlSessionFactory = newMybatisSqlSessionFactoryBean();//指明數據源

sqlSessionFactory.setDataSource(multipleDataSource(db1(), db2()));//指明mapper.xml位置(配置文件中指明的xml位置會失效用此方式代替,具體原因未知)

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/**Mapper.xml"));//指明實體掃描(多個package用逗號或者分號分隔)

sqlSessionFactory.setTypeAliasesPackage("javademo.tyh.model.base;javademo.tyh.model.hotel");//***導入Mybatis配置***

MybatisConfiguration configuration = newMybatisConfiguration();

configuration.setJdbcTypeForNull(JdbcType.NULL);

configuration.setMapUnderscoreToCamelCase(true);

configuration.setCacheEnabled(false);

sqlSessionFactory.setConfiguration(configuration);

sqlSessionFactory.setPlugins(newInterceptor[]{paginationInterceptor()});//***導入全局配置***

sqlSessionFactory.setGlobalConfig(globalConfiguration());returnsqlSessionFactory.getObject();

}/*** 在代碼中配置MybatisPlus替換掉application.yml中的配置

*@return

*/@BeanpublicGlobalConfiguration globalConfiguration() {

GlobalConfiguration conf= new GlobalConfiguration(newLogicSqlInjector());//主鍵類型 0:數據庫ID自增, 1:用戶輸入ID,2:全局唯一ID (數字類型唯一ID), 3:全局唯一ID UUID

conf.setIdType(0);//字段策略(拼接sql時用于判斷屬性值是否拼接) 0:忽略判斷,1:非NULL判斷,2:非空判斷

conf.setFieldStrategy(2);//駝峰下劃線轉換含查詢column及返回column(column下劃線命名create_time,返回java實體是駝峰命名createTime,開啟后自動轉換否則保留原樣)

conf.setDbColumnUnderline(true);//是否動態刷新mapper

conf.setRefresh(true);returnconf;

}

}

6、創建mapper文件夾用于存放于xml對應的mapper接口

BaseInfoMapper

importcom.baomidou.mybatisplus.mapper.BaseMapper;importjavademo.tyh.model.hotel.BaseInfoModel;importorg.springframework.stereotype.Component;

@Componentpublic interface BaseInfoMapper extends BaseMapper{//自定義方法

intlistCount();

}

UserInfoMapper

importcom.baomidou.mybatisplus.mapper.BaseMapper;importjavademo.tyh.model.hotel.UserInfoModel;importorg.springframework.stereotype.Component;

@Componentpublic interface UserInfoMapper extends BaseMapper{//自定義方法

intlistCount();

}

7、創建service文件夾用于存放業務邏輯類

importjavademo.tyh.model.hotel.BaseInfoModel;importjavademo.tyh.model.hotel.UserInfoModel;importjavademo.tyh.service.hotel.config.DBTypeEnum;importjavademo.tyh.service.hotel.config.DbContextHolder;importjavademo.tyh.service.hotel.mapper.BaseInfoMapper;importjavademo.tyh.service.hotel.mapper.UserInfoMapper;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;

@Servicepublic classHotelService {

@Autowired

BaseInfoMapper baseMapper;

@Autowired

UserInfoMapper userMapper;public voidtestDynamicDb() {//使用db1

DbContextHolder.setDbType(DBTypeEnum.db1);

BaseInfoModel baseModel= baseMapper.selectById(1);int baseCount =baseMapper.listCount();

System.out.println("db1=" +baseModel.getNickname());//使用db2

DbContextHolder.setDbType(DBTypeEnum.db2);

UserInfoModel userModel= userMapper.selectById(1);int userCount =userMapper.listCount();

System.out.println("db2=" +userModel.getUsername());

}

}

8、創建controller文件夾編寫一個controller和action用于測試

importjavademo.tyh.service.hotel.service.HotelService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;

@Controller

@RequestMapping("/hotel")public classHotelController {

@Autowired

HotelService service;

@ResponseBody

@RequestMapping("/test")public voidtest() {

service.testDynamicDb();

}

}

9、創建自己的實體Model,get/set方法自己生成吧

BaseInfoModel

importcom.baomidou.mybatisplus.annotations.TableName;importjava.time.LocalDateTime;

@TableName("base_info")public classBaseInfoModel {private intid;privateString nickname;privateLocalDateTime updateTime;

}

UserInfoModel

importcom.baomidou.mybatisplus.annotations.TableName;importjava.time.LocalDateTime;

@TableName("user_info")public classUserInfoModel {private intid;privateString username;privateString password;private intsex;private intage;privateLocalDateTime createTime;

}

OK,至此Mybatis Plus多數據源配置Demo就完成了,可以運行http://localhost:12000/hotel/test看一下console控制臺會得到以下輸出,db1和db2就切換成功了

總結

以上是生活随笔為你收集整理的mysql-plus多数据库_IDEA项目搭建九——MybatisPlus多数据库实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。