成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

新手也能實現(xiàn),基于SpirngBoot2.0+ 的 SpringBoot+Mybatis 多數(shù)據(jù)源配

shiina / 2476人閱讀

摘要:下面基于,帶著大家看一下中如何配置多數(shù)據(jù)源。注意版本不一致導致的一些小問題。配置配置兩個數(shù)據(jù)源數(shù)據(jù)庫和數(shù)據(jù)庫注意事項在配置數(shù)據(jù)源的過程中主要是寫成和。五啟動類此注解表示啟動類這樣基于的多數(shù)據(jù)源配置就已經(jīng)完成了,兩個數(shù)據(jù)庫都可以被訪問了。

在上一篇文章《優(yōu)雅整合 SpringBoot+Mybatis ,可能是你見過最詳細的一篇》中,帶著大家整合了 SpringBoot 和 Mybatis ,我們在當時使用的時單數(shù)據(jù)源的情況,這種情況下 Spring Boot的配置非常簡單,只需要在 application.properties 文件中配置數(shù)據(jù)庫的相關(guān)連接參數(shù)即可。但是往往隨著業(yè)務(wù)量發(fā)展,我們通常會進行數(shù)據(jù)庫拆分或是引入其他數(shù)據(jù)庫,從而我們需要配置多個數(shù)據(jù)源。下面基于 SpringBoot+Mybatis ,帶著大家看一下 SpringBoot 中如何配置多數(shù)據(jù)源。

這篇文章所涉及的代碼其實是基于上一篇文章《優(yōu)雅整合 SpringBoot+Mybatis ,可能是你見過最詳細的一篇》 的項目寫的,但是為了考慮部分讀者沒有讀過上一篇文章,所以我還是會一步一步帶大家走完每一步,力爭新手也能在看完之后獨立實踐。

目錄:

一 開發(fā)前的準備

1.1 環(huán)境參數(shù)

1.2 創(chuàng)建工程

1.3 創(chuàng)建兩個數(shù)據(jù)庫和 user 用戶表、money工資詳情表

1.4 配置 pom 文件中的相關(guān)依賴

1.5 配置 application.properties

1.6 創(chuàng)建用戶類 Bean和工資詳情類 Bean

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

三 Dao 層開發(fā)和 Service 層開發(fā)

3.1 Dao 層

3.2 Service 層

四 Controller層

五 啟動類

一 開發(fā)前的準備 1.1 環(huán)境參數(shù)

開發(fā)工具:IDEA

基礎(chǔ)工具:Maven+JDK8

所用技術(shù):SpringBoot+Mybatis

數(shù)據(jù)庫:MySQL

SpringBoot版本:2.1.0. SpringBoot2.0之后會有一些小坑,這篇文章會給你介紹到。注意版本不一致導致的一些小問題。

1.2 創(chuàng)建工程

創(chuàng)建一個基本的 SpringBoot 項目,我這里就不多說這方面問題了,具體可以參考下面這篇文章:

https://blog.csdn.net/qq_34337272/article/details/79563606

本項目結(jié)構(gòu):

1.3 創(chuàng)建兩個數(shù)據(jù)庫和 user 用戶表、money工資詳情表

我們一共創(chuàng)建的兩個數(shù)據(jù)庫,然后分別在這兩個數(shù)據(jù)庫中創(chuàng)建了 user 用戶表、money工資詳情表。

我們的用戶表很簡單,只有 4 個字段:用戶 id、姓名、年齡、余額。如下圖所示:

添加了“余額money”字段是為了給大家簡單的演示一下事務(wù)管理的方式。

我們的工資詳情表也很簡單,也只有 4 個字段: id、基本工資、獎金和懲罰金。如下圖所示:

建表語句:

用戶表:

CREATE TABLE `user` (
  `id` int(13) NOT NULL AUTO_INCREMENT COMMENT "主鍵",
  `name` varchar(33) DEFAULT NULL COMMENT "姓名",
  `age` int(3) DEFAULT NULL COMMENT "年齡",
  `money` double DEFAULT NULL COMMENT "賬戶余額",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

工資詳情表:

CREATE TABLE `money` (
  `id` int(33) NOT NULL AUTO_INCREMENT COMMENT "主鍵",
  `basic` int(33) DEFAULT NULL COMMENT "基本工資",
  `reward` int(33) DEFAULT NULL COMMENT "獎金",
  `punishment` int(33) DEFAULT NULL COMMENT "懲罰金",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
1.4 配置 pom 文件中的相關(guān)依賴

由于要整合 springboot 和 mybatis 所以加入了artifactId 為 mybatis-spring-boot-starter 的依賴,由于使用了Mysql 數(shù)據(jù)庫 所以加入了artifactId 為 mysql-connector-java 的依賴。

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.2
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
1.5 配置 application.properties

配置兩個數(shù)據(jù)源:數(shù)據(jù)庫1和數(shù)據(jù)庫2!

注意事項:

在1.0 配置數(shù)據(jù)源的過程中主要是寫成:spring.datasource.url 和spring.datasource.driverClassName。
而在2.0升級之后需要變更成:spring.datasource.jdbc-url和spring.datasource.driver-class-name!不然在連接數(shù)據(jù)庫時可能會報下面的錯誤:

### Error querying database.  Cause: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.

另外在在2.0.2+版本后需要在datasource后面加上hikari,如果你沒有加的話,同樣可能會報錯。

server.port=8335
# 配置第一個數(shù)據(jù)源
spring.datasource.hikari.db1.jdbc-url=jdbc:mysql://127.0.0.1:3306/erp?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8
spring.datasource.hikari.db1.username=root
spring.datasource.hikari.db1.password=153963
spring.datasource.hikari.db1.driver-class-name=com.mysql.cj.jdbc.Driver
# 配置第二個數(shù)據(jù)源
spring.datasource.hikari.db2.jdbc-url=jdbc:mysql://127.0.0.1:3306/erp2?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8
spring.datasource.hikari.db2.username=root
spring.datasource.hikari.db2.password=153963
spring.datasource.hikari.db2.driver-class-name=com.mysql.cj.jdbc.Driver
1.6 創(chuàng)建用戶類 Bean和工資詳情類 Bean

User.java

public class User {
    private int id;
    private String name;
    private int age;
    private double money;
    ...
    此處省略getter、setter以及 toString方法
}

Money.java

public class Money {
    private int basic;
    private int reward;
    private int punishment;
    ...
    此處省略getter、setter以及 toString方法
}
二 數(shù)據(jù)源配置

通過 Java 類來實現(xiàn)對兩個數(shù)據(jù)源的配置,這一部分是最關(guān)鍵的部分了,這里主要提一下下面這幾點:

@MapperScan 注解中我們聲明了使用數(shù)據(jù)庫1的dao類所在的位置,還聲明了 SqlSessionTemplate 。SqlSessionTemplate是MyBatis-Spring的核心。這個類負責管理MyBatis的SqlSession,調(diào)用MyBatis的SQL方法,翻譯異常。SqlSessionTemplate是線程安全的,可以被多個DAO所共享使用。

由于我使用的是全注解的方式開發(fā),所以下面這條找并且解析 mapper.xml 配置語句被我注釋掉了
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/db2/*.xml"));

比如我們要聲明使用數(shù)據(jù)1,直接在 dao 層的類上加上這樣一個注釋即可:@Qualifier("db1SqlSessionTemplate")

我們在數(shù)據(jù)庫1配置類的每個方法前加上了 @Primary 注解來聲明這個數(shù)據(jù)庫時默認數(shù)據(jù)庫,不然可能會報錯。

DataSource1Config.java

@Configuration
@MapperScan(basePackages = "top.snailclimb.db1.dao", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DataSource1Config {

    /**
     * 生成數(shù)據(jù)源.  @Primary 注解聲明為默認數(shù)據(jù)源
     */
    @Bean(name = "db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.hikari.db1")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 創(chuàng)建 SqlSessionFactory
     */
    @Bean(name = "db1SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //  bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/db1/*.xml"));
        return bean.getObject();
    }

    /**
     * 配置事務(wù)管理
     */
    @Bean(name = "db1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "db1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

DataSource2Config.java

@Configuration
@MapperScan(basePackages = "top.snailclimb.db2.dao", sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class DataSource2Config {

    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.hikari.db2")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/db2/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "db2TransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "db2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}
三 Dao 層開發(fā)和 Service 層開發(fā)

新建兩個不同的包存放兩個不同數(shù)據(jù)庫的 dao 和 service。

3.1 Dao 層

對于兩個數(shù)據(jù)庫,我們只是簡單的測試一個查詢這個操作。在上一篇文章《優(yōu)雅整合 SpringBoot+Mybatis ,可能是你見過最詳細的一篇》中,我?guī)е蠹沂褂米⒔鈱崿F(xiàn)了數(shù)據(jù)庫基本的增刪改查操作。

UserDao.java

@Qualifier("db1SqlSessionTemplate")
public interface UserDao {
    /**
     * 通過名字查詢用戶信息
     */
    @Select("SELECT * FROM user WHERE name = #{name}")
    User findUserByName(String name);

}

MoneyDao.java

@Qualifier("db2SqlSessionTemplate")
public interface MoneyDao {

    /**
     * 通過id 查看工資詳情
     */
    @Select("SELECT * FROM money WHERE id = #{id}")
    Money findMoneyById(@Param("id") int id);
}
3.2 Service 層

Service 層很簡單,沒有復雜的業(yè)務(wù)邏輯。

UserService.java

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    /**
     * 根據(jù)名字查找用戶
     */
    public User selectUserByName(String name) {
        return userDao.findUserByName(name);
    }

}

MoneyService.java

@Service
public class MoneyService {
    @Autowired
    private MoneyDao moneyDao;

    /**
     * 根據(jù)名字查找用戶
     */
    public Money selectMoneyById(int id) {
        return moneyDao.findMoneyById(id);
    }

}
四 Controller層

Controller 層也非常簡單。

UserController.java

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/query")
    public User testQuery() {
        return userService.selectUserByName("Daisy");
    }
}

MoneyController.java

@RestController
@RequestMapping("/money")
public class MoneyController {
    @Autowired
    private MoneyService moneyService;

    @RequestMapping("/query")
    public Money testQuery() {
        return moneyService.selectMoneyById(1);
    }
}
五 啟動類
//此注解表示SpringBoot啟動類
@SpringBootApplication
public class MainApplication {

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

}

這樣基于SpirngBoot2.0+ 的 SpringBoot+Mybatis 多數(shù)據(jù)源配置就已經(jīng)完成了, 兩個數(shù)據(jù)庫都可以被訪問了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/72560.html

相關(guān)文章

  • 基于 SpringBoot2.0+優(yōu)雅整合 SpringBoot+Mybatis

    摘要:基于最新的,是你學習的最佳指南。驅(qū)動程序通過自動注冊,手動加載類通常是不必要。由于加上了注解,如果轉(zhuǎn)賬中途出了意外和的錢都不會改變。三的方式項目結(jié)構(gòu)相比于注解的方式主要有以下幾點改變,非常容易實現(xiàn)。公眾號多篇文章被各大技術(shù)社區(qū)轉(zhuǎn)載。 Github 地址:https://github.com/Snailclimb/springboot-integration-examples(Sprin...

    gghyoo 評論0 收藏0
  • 一起來學SpringBoot | 第七篇:整合Mybatis

    摘要:但是鑒于國內(nèi)市場環(huán)境而言,掌握無異于是佳的選擇,低學習成本和動態(tài)解耦的特點使得更容易被人們所接受。 SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴就可以輕易的搭建出一個 WEB 工程 MyBatis 是一款優(yōu)秀的持久層框架,它支持...

    includecmath 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<