在SpringBoot中整合數(shù)據(jù)源的示例詳解
在企業(yè)級(jí)應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)存儲(chǔ)是必不可少的一環(huán)。為了簡(jiǎn)化數(shù)據(jù)訪問(wèn)層的開(kāi)發(fā),SpringBoot提供了對(duì)多種數(shù)據(jù)源的整合支持。本文將介紹如何在SpringBoot項(xiàng)目中整合常見(jiàn)的數(shù)據(jù)源,包括JdbcTemplate、MyBatis和JPA,并探討如何配置和使用多數(shù)據(jù)源。
1. 數(shù)據(jù)源的選擇與配置
1.1. 常見(jiàn)的數(shù)據(jù)源類(lèi)型
在Java開(kāi)發(fā)中,常見(jiàn)的數(shù)據(jù)源類(lèi)型有以下幾種:
- JDBC:Java數(shù)據(jù)庫(kù)連接,是Java訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)API。使用JDBC可以直接操作數(shù)據(jù)庫(kù),但需要編寫(xiě)大量的SQL語(yǔ)句和處理結(jié)果集,開(kāi)發(fā)效率較低。
- JdbcTemplate:基于JDBC的一個(gè)封裝庫(kù),簡(jiǎn)化了JDBC的使用,提高了開(kāi)發(fā)效率。
- MyBatis:一個(gè)優(yōu)秀的持久層框架,支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。
- JPA:Java持久化API,是一種ORM(對(duì)象關(guān)系映射)規(guī)范,實(shí)現(xiàn)了對(duì)象模型和關(guān)系型數(shù)據(jù)庫(kù)之間的映射。Hibernate是JPA的一種實(shí)現(xiàn)。
1.2. 數(shù)據(jù)源配置文件的編寫(xiě)
在SpringBoot項(xiàng)目中,我們通常在application.properties或application.yml文件中配置數(shù)據(jù)源。以下是一個(gè)典型的數(shù)據(jù)源配置示例:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver其中,url指定了數(shù)據(jù)庫(kù)的連接地址,username和password分別表示數(shù)據(jù)庫(kù)的用戶(hù)名和密碼,driver-class-name是數(shù)據(jù)庫(kù)驅(qū)動(dòng)類(lèi)的全限定名。
1.3. SpringBoot自動(dòng)配置數(shù)據(jù)源的原理
在SpringBoot中,數(shù)據(jù)源的配置得到了極大的簡(jiǎn)化,這得益于其自動(dòng)配置的特性。一旦我們?cè)陧?xiàng)目中添加了相應(yīng)的依賴(lài)并正確配置了數(shù)據(jù)源信息,SpringBoot便會(huì)自動(dòng)創(chuàng)建一個(gè)DataSource對(duì)象,并將其注冊(cè)到Spring容器中,從而實(shí)現(xiàn)了數(shù)據(jù)源的自動(dòng)化管理。
具體而言,SpringBoot會(huì)根據(jù)項(xiàng)目中的依賴(lài)來(lái)智能選擇合適的數(shù)據(jù)源實(shí)現(xiàn)。例如,如果項(xiàng)目中引入了HikariCP、Tomcat連接池或者C3P0等依賴(lài),SpringBoot會(huì)自動(dòng)選擇并使用這些數(shù)據(jù)源實(shí)現(xiàn)。而在沒(méi)有引入這些依賴(lài)的情況下,SpringBoot則會(huì)采用默認(rèn)的數(shù)據(jù)源實(shí)現(xiàn)。
通過(guò)這種方式,SpringBoot為我們提供了一種簡(jiǎn)潔、高效的數(shù)據(jù)源配置方法,使得我們能夠更專(zhuān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn),而無(wú)需過(guò)多關(guān)注底層的數(shù)據(jù)源配置細(xì)節(jié)。
2. SpringBoot整合JdbcTemplate
2.1. JdbcTemplate的簡(jiǎn)介與作用
JdbcTemplate是Spring框架中提供的一個(gè)簡(jiǎn)化JDBC操作的工具類(lèi),它可以幫助我們避免編寫(xiě)大量的重復(fù)代碼,提高開(kāi)發(fā)效率。JdbcTemplate主要提供了以下功能:
- 簡(jiǎn)化數(shù)據(jù)庫(kù)連接的獲取和釋放;
- 簡(jiǎn)化SQL語(yǔ)句的執(zhí)行;
- 簡(jiǎn)化結(jié)果集的處理。
2.2. 在SpringBoot中配置JdbcTemplate
要在SpringBoot項(xiàng)目中使用JdbcTemplate,首先需要引入相關(guān)依賴(lài):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
然后,在配置文件中配置數(shù)據(jù)源信息,如前文所述。
最后,在需要使用JdbcTemplate的地方,通過(guò)@Autowired注解注入JdbcTemplate對(duì)象:
@Autowired private JdbcTemplate jdbcTemplate;
2.3. 使用JdbcTemplate進(jìn)行數(shù)據(jù)庫(kù)操作
使用JdbcTemplate進(jìn)行數(shù)據(jù)庫(kù)操作非常簡(jiǎn)單,以下是一個(gè)簡(jiǎn)單的示例:
public List<User> findAllUsers() {
String sql = "SELECT * FROM user";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}在這個(gè)示例中,我們使用JdbcTemplate的query方法執(zhí)行了一個(gè)查詢(xún)語(yǔ)句,并將結(jié)果集映射為User對(duì)象的列表。這里使用了BeanPropertyRowMapper作為結(jié)果集的映射器,它會(huì)自動(dòng)將結(jié)果集中的列映射到Java對(duì)象的屬性上。
3. SpringBoot整合MyBatis
3.1. MyBatis的簡(jiǎn)介與作用
MyBatis是一個(gè)優(yōu)秀的持久層框架,它支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis的主要特點(diǎn)包括:
- 靈活的SQL編寫(xiě),支持動(dòng)態(tài)SQL;
- 易于集成,可以與Spring、SpringBoot等框架無(wú)縫集成;
- 支持多種數(shù)據(jù)庫(kù)和多種數(shù)據(jù)源;
- 提供了豐富的映射類(lèi)型,支持一對(duì)一、一對(duì)多等關(guān)聯(lián)查詢(xún)。
3.2. 在SpringBoot中配置MyBatis
要在SpringBoot項(xiàng)目中使用MyBatis,首先需要引入相關(guān)依賴(lài):
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
然后,在配置文件中配置數(shù)據(jù)源信息和MyBatis的相關(guān)配置,例如:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.entity其中,mapper-locations指定了MyBatis的映射文件的位置,type-aliases-package指定了實(shí)體類(lèi)的包名。
3.3. 使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作
使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作需要編寫(xiě)Mapper接口和映射文件。以下是一個(gè)簡(jiǎn)單的示例:
編寫(xiě)Mapper接口:
public interface UserMapper {
List<User> findAll();
}編寫(xiě)映射文件:
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="findAll" resultType="User">
SELECT * FROM user
</select>
</mapper>在需要使用UserMapper的地方,通過(guò)@Autowired注解注入U(xiǎn)serMapper對(duì)象:
@Autowired private UserMapper userMapper;
調(diào)用UserMapper的方法進(jìn)行數(shù)據(jù)庫(kù)操作:
public List<User> findAllUsers() {
return userMapper.findAll();
}4. SpringBoot整合JPA
4.1. JPA的簡(jiǎn)介與作用
JPA(Java Persistence API)是Java EE 5規(guī)范中的持久化規(guī)范,它的目的是簡(jiǎn)化實(shí)體Bean的持久化操作。JPA的主要特點(diǎn)包括:
- 提供了一種基于注解的對(duì)象關(guān)系映射;
- 支持多種數(shù)據(jù)庫(kù)和多種數(shù)據(jù)源;
- 提供了豐富的查詢(xún)方式,包括JPQL(Java Persistence Query Language)和Criteria API;
- 支持事務(wù)管理。
4.2. 在SpringBoot中配置JPA
要在SpringBoot項(xiàng)目中使用JPA,首先需要引入相關(guān)依賴(lài):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
然后,在配置文件中配置數(shù)據(jù)源信息和JPA的相關(guān)配置,例如:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true其中,ddl-auto表示Hibernate的自動(dòng)建表策略,show-sql表示是否打印SQL語(yǔ)句。
4.3. 使用JPA進(jìn)行數(shù)據(jù)庫(kù)操作
使用JPA進(jìn)行數(shù)據(jù)庫(kù)操作需要編寫(xiě)實(shí)體類(lèi)和Repository接口。以下是一個(gè)簡(jiǎn)單的示例:
編寫(xiě)實(shí)體類(lèi):
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
// 省略getter和setter方法
}編寫(xiě)Repository接口:
public interface UserRepository extends JpaRepository<User, Long> {
}在需要使用UserRepository的地方,通過(guò)@Autowired注解注入U(xiǎn)serRepository對(duì)象:
@Autowired private UserRepository userRepository;
調(diào)用UserRepository的方法進(jìn)行數(shù)據(jù)庫(kù)操作:
public List<User> findAllUsers() {
return userRepository.findAll();
}5. 多數(shù)據(jù)源的配置與使用
5.1. 在SpringBoot中配置多數(shù)據(jù)源
在某些場(chǎng)景下,我們需要在一個(gè)項(xiàng)目中使用多個(gè)數(shù)據(jù)源。要在SpringBoot中配置多數(shù)據(jù)源,首先需要在配置文件中配置多個(gè)數(shù)據(jù)源的信息,例如:
spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/test1
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
secondary:
url: jdbc:mysql://localhost:3306/test2
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver然后,需要編寫(xiě)一個(gè)配置類(lèi),用于創(chuàng)建多個(gè)數(shù)據(jù)源對(duì)象:
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}5.2. 使用多數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫(kù)操作
在配置了多數(shù)據(jù)源之后,我們可以在不同的場(chǎng)景下使用不同的數(shù)據(jù)源。以下是一個(gè)使用多數(shù)據(jù)源的示例:
編寫(xiě)一個(gè)Service類(lèi),用于操作不同的數(shù)據(jù)源:
@Service
public class UserService {
@Autowired
@Qualifier("primaryJdbcTemplate")
private JdbcTemplate primaryJdbcTemplate;
@Autowired
@Qualifier("secondaryJdbcTemplate")
private JdbcTemplate secondaryJdbcTemplate;
public List<User> findAllUsersFromPrimary() {
String sql = "SELECT * FROM user";
return primaryJdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
public List<User> findAllUsersFromSecondary() {
String sql = "SELECT * FROM user";
return secondaryJdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
}在需要使用多數(shù)據(jù)源的地方,調(diào)用UserService的方法進(jìn)行數(shù)據(jù)庫(kù)操作:
public List<User> findAllUsers() {
List<User> primaryUsers = userService.findAllUsersFromPrimary();
List<User> secondaryUsers = userService.findAllUsersFromSecondary();
return Stream.concat(primaryUsers.stream(), secondaryUsers.stream()).collect(Collectors.toList());
}總結(jié)
本文介紹了如何在SpringBoot項(xiàng)目中整合常見(jiàn)的數(shù)據(jù)源,包括JdbcTemplate、MyBatis和JPA,并探討了如何配置和使用多數(shù)據(jù)源。通過(guò)使用SpringBoot提供的自動(dòng)配置和簡(jiǎn)化的API,我們可以輕松地在項(xiàng)目中使用不同的數(shù)據(jù)源,提高開(kāi)發(fā)效率。
到此這篇關(guān)于在SpringBoot中整合數(shù)據(jù)源的示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot整合數(shù)據(jù)源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot整合JPA配置多數(shù)據(jù)源流程詳解
- springboot整合多數(shù)據(jù)源配置方式
- tk-mybatis整合springBoot使用兩個(gè)數(shù)據(jù)源的方法
- SpringBoot+Mybatis plus實(shí)現(xiàn)多數(shù)據(jù)源整合的實(shí)踐
- springboot 中整合mybatis多數(shù)據(jù)源不使用JPA
- 詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源
- SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實(shí)現(xiàn)
相關(guān)文章
mybatis 返回Map類(lèi)型key改為小寫(xiě)的操作
這篇文章主要介紹了mybatis 返回Map類(lèi)型key改為小寫(xiě)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Spring Boot實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳與進(jìn)度條功能
本文介紹了如何使用SpringBoot實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳和進(jìn)度條等功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2026-02-02
idea2019版與maven3.6.2版本不兼容的解決方法
這篇文章主要介紹了idea2019版與maven3.6.2版本不兼容的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
hibernate-validator后端表單數(shù)據(jù)校驗(yàn)的使用示例詳解
這篇文章主要介紹了hibernate-validator后端表單數(shù)據(jù)校驗(yàn)的使用,hibernate-validator提供的校驗(yàn)方式為在類(lèi)的屬性上加入相應(yīng)的注解來(lái)達(dá)到校驗(yàn)的目的,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Java語(yǔ)言中&&與& ||與|的區(qū)別是什么
這篇文章主要介紹了Java語(yǔ)言中&&與& ||與|的區(qū)別是什么的相關(guān)資料,需要的朋友可以參考下2017-04-04
詳解Java實(shí)現(xiàn)的k-means聚類(lèi)算法
這篇文章主要介紹了詳解Java實(shí)現(xiàn)的k-means聚類(lèi)算法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

