SpringBoot3中數(shù)據(jù)庫(kù)集成實(shí)踐詳解
一、簡(jiǎn)介
項(xiàng)目工程中,集成數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,而對(duì)于這個(gè)功能的實(shí)現(xiàn),其組件選型也非常豐富;
通過(guò)如下幾個(gè)組件來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的整合;
Druid連接池:阿里開(kāi)源的數(shù)據(jù)庫(kù)連接池,并且提供SQL執(zhí)行的監(jiān)控能力;
MybatisPlus框架:基于Mybatis框架的增強(qiáng)工具包,可以用于簡(jiǎn)化持久層開(kāi)發(fā),顯著的提高效率;
MySQL數(shù)據(jù)庫(kù):常用的關(guān)系型數(shù)據(jù)庫(kù)組件,在案例中使用Druid組件來(lái)連接數(shù)據(jù)庫(kù);
二、工程搭建
1、工程結(jié)構(gòu)

2、依賴(lài)管理
Druid連接池使用的是1.2.18版本;在mybatis-plus組件中依賴(lài)mybatis框架的3.5.10版本;MySQL本地環(huán)境是5.7版本,這里依賴(lài)包使用8.0.19版本;
<!-- MySql數(shù)據(jù)庫(kù) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Druid組件 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>${druid-spring-boot.version}</version>
</dependency>
<!-- JDBC依賴(lài) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<!-- MybatisPlus組件 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>三、Druid連接池
1、配置文件
有關(guān)于Druid連接池的可配置參數(shù)還有很多,可以參考源碼中的描述或者官方案例,此處只提供部分常見(jiàn)的參數(shù)配置;
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 數(shù)據(jù)庫(kù)
url: jdbc:mysql://localhost:3306/boot-jdbc
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# 連接池-初始化大小
initial-size: 10
# 連接池-最大連接數(shù)
max-active: 100
# 最大等待時(shí)間
max-wait: 60000
# 連接池-最小空閑數(shù)
min-idle: 10
# 檢測(cè)空閑連接
test-while-idle: true
# 最小空閑時(shí)間
min-evictable-idle-time-millis: 3000002、配置類(lèi)
配置兩個(gè)Bean對(duì)象,分別DruidDataSource類(lèi)和JdbcTemplate類(lèi);
@Configuration
public class DruidConfig {
@Bean("dataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DruidDataSource dataSource() {
return new DruidDataSource();
}
@Bean("jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}四、JDBC操作
1、數(shù)據(jù)庫(kù)表
在boot-jdbc數(shù)據(jù)庫(kù)中添加兩張測(cè)試表,用戶基礎(chǔ)信息tb_user表和用戶擴(kuò)展信息tb_user_extd表,腳本文件在工程的resources/sql-script目錄下;
CREATE TABLE `tb_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_name` varchar(30) NOT NULL COMMENT '用戶名稱(chēng)', `email` varchar(50) DEFAULT NULL COMMENT '郵件', `phone` varchar(20) NOT NULL COMMENT '手機(jī)號(hào)', `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間', `update_time` datetime DEFAULT NULL COMMENT '更新時(shí)間', `state` int(1) DEFAULT '1' COMMENT '狀態(tài):1啟用,2刪除', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶基礎(chǔ)信息'; CREATE TABLE `tb_user_extd` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `user_id` int(11) NOT NULL COMMENT '用戶ID', `city_name` varchar(50) DEFAULT NULL COMMENT '城市名稱(chēng)', `school` varchar(200) DEFAULT NULL COMMENT '學(xué)校名稱(chēng)', PRIMARY KEY (`id`), KEY `user_id_index` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶擴(kuò)展信息';
2、JdbcTemplate
JdbcTemplate是由spring-jdbc組件提供,支持DataSource的注冊(cè),是對(duì)數(shù)據(jù)庫(kù)操作的深層封裝,支持一系列數(shù)據(jù)操作方法;
@Service
public class JdbcService {
private static final Logger logger = LoggerFactory.getLogger(JdbcService.class);
@Resource
private JdbcTemplate jdbcTemplate ;
/**
* 添加數(shù)據(jù)
*/
public int addData (User user){
return jdbcTemplate.update(
"INSERT INTO `tb_user` (`user_name`, `email`, `phone`, `create_time`, `update_time`) VALUES (?, ?, ?, ?, ?)",
user.getUserName(),user.getEmail(),user.getPhone(),user.getCreateTime(),user.getUpdateTime());
}
/**
* 查詢?nèi)?
*/
public List<User> queryAll (){
return jdbcTemplate.query("SELECT * FROM tb_user WHERE state=1",new BeanPropertyRowMapper<>(User.class));
}
/**
* 修改字段
*/
public int updateName (Integer id,String name){
return jdbcTemplate.update("UPDATE `tb_user` SET `user_name` = ? WHERE `id` = ?",name,id);
}
/**
* 主鍵刪除
*/
public int deleteId (Integer id){
return jdbcTemplate.update("DELETE FROM `tb_user` WHERE `id` = ?",id);
}
}五、MybatisPlus框架
1、配置管理
1.1 配置類(lèi)
在配置類(lèi)中,添加MapperScan注解用來(lái)掃描和注冊(cè)MyBatis框架的mapper接口,以及設(shè)置PaginationInnerInterceptor分頁(yè)攔截器;
@Configuration
@MapperScan("com.boot.jdbc.mapper")
public class MybatisConfig {
/**
* 分頁(yè)
*/
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}1.2 配置文件
在日志中輸出mybatis框架解析的SQL語(yǔ)句,方便在測(cè)試的時(shí)候快速發(fā)現(xiàn)問(wèn)題;
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl2、Mapper
Mapper接口編寫(xiě)數(shù)據(jù)庫(kù)操作方法,Mapper.xml文件中定義數(shù)據(jù)庫(kù)執(zhí)行的SQL語(yǔ)句,在mybatis-plus組件中提供很多單表操作的默認(rèn)方法實(shí)現(xiàn),也可以自定義方法;
2.1 Mapper接口
public interface UserMapper extends BaseMapper<User> {
/**
* 自定義分頁(yè)
*/
IPage<UserModel> queryUserPage(@Param("page") IPage<User> page);
}2.2 Mapper文件
<mapper namespace="com.boot.jdbc.mapper.UserMapper">
<select id="queryUserPage" resultType="com.boot.jdbc.entity.UserModel">
SELECT
tb1.id userId,
tb1.user_name userName,
tb1.email,
tb1.phone,
tb1.create_time createTime,
tb1.update_time updateTime,
tb1.state,
tb2.school,
tb2.city_name cityName
FROM tb_user tb1
LEFT JOIN tb_user_extd tb2 ON tb1.id = tb2.user_id
WHERE tb1.state='1'
ORDER BY tb1.id DESC
</select>
</mapper>3、單元測(cè)試
編寫(xiě)UserMapper接口測(cè)試,很多默認(rèn)實(shí)現(xiàn)的方法參考BaseMapper接口即可,或者參考IService接口和ServiceImpl實(shí)現(xiàn)類(lèi),提供了更加豐富的擴(kuò)展方法;
public class UserMapperTest {
@Resource
private UserMapper userMapper ;
@Test
public void testInsert (){
List<User> userBatch = Arrays.asList(
new User(null,"Zhang三","Zhang@qq.com","18623459687",new Date(),new Date(),1));
userBatch.forEach(userMapper::insert);
}
@Test
public void testUpdate (){
User user = userMapper.selectById(1);
user.setState(2);
userMapper.updateById(user);
}
@Test
public void testDelete (){
userMapper.deleteById(7);
}
@Test
public void testQuery (){
List<User> userColumnsList = new LambdaQueryChainWrapper<>(userMapper)
.select(User::getUserName,User::getPhone,User::getEmail)
.like(User::getPhone,"189").orderByDesc(User::getId).last("limit 2").list();
userColumnsList.forEach(System.out::println);
}
@Test
public void testPage (){
// 1、默認(rèn)分頁(yè)查詢
IPage<User> userPage = new Page<>(2,2) ;
IPage<User> userPageList = userMapper.selectPage(userPage,new QueryWrapper<>());
userPageList.getRecords().forEach(System.out::println);
// 2、自定義查詢分頁(yè)
IPage<UserModel> userModelPage = userMapper.queryUserPage(userPage);
userModelPage.getRecords().forEach(System.out::println);
}
}六、參考源碼
文檔倉(cāng)庫(kù):
https://gitee.com/cicadasmile/butte-java-note
到此這篇關(guān)于SpringBoot3中數(shù)據(jù)庫(kù)集成實(shí)踐詳解的文章就介紹到這了,更多相關(guān)SpringBoot3數(shù)據(jù)庫(kù)集成內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java時(shí)間類(lèi)Date類(lèi)和Calendar類(lèi)的使用詳解
這篇文章主要介紹了Java時(shí)間類(lèi)Date類(lèi)和Calendar類(lèi)的使用詳解,需要的朋友可以參考下2017-08-08
Spring依賴(lài)注入中的@Resource與@Autowired詳解
這篇文章主要介紹了Spring依賴(lài)注入中的@Resource與@Autowired詳解,提到Spring依賴(lài)注入,大家最先想到應(yīng)該是@Resource和@Autowired,對(duì)于Spring為什么要支持兩個(gè)這么類(lèi)似的注解卻未提到,屬于知其然而不知其所以然,本文就來(lái)做詳細(xì)講解,需要的朋友可以參考下2023-09-09
java+Okhttp3調(diào)用接口的實(shí)例
這篇文章主要介紹了java+Okhttp3調(diào)用接口的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
一篇文章帶你學(xué)會(huì)Spring?MVC表單標(biāo)簽
Spring MVC表單標(biāo)簽是網(wǎng)頁(yè)的可配置和可重復(fù)使用的構(gòu)建塊,下面這篇文章主要給大家介紹了如何通過(guò)一篇文章學(xué)會(huì)Spring?MVC表單標(biāo)簽的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
JavaWeb如何實(shí)現(xiàn)限制單個(gè)賬號(hào)多處登錄
這篇文章主要介紹了JavaWeb如何實(shí)現(xiàn)限制單個(gè)賬號(hào)多處登錄問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
RabbitMQ 在 Spring Boot 項(xiàng)目中的深度應(yīng)用與實(shí)戰(zhàn)解析
RabbitMQ 作為一款廣受歡迎的開(kāi)源消息隊(duì)列系統(tǒng),遵循 AMQP 協(xié)議,能夠在分布式系統(tǒng)里實(shí)現(xiàn)應(yīng)用程序之間的異步通信、解耦以及流量削峰等關(guān)鍵功能,這篇文章主要介紹了RabbitMQ 在 Spring Boot 項(xiàng)目中的深度應(yīng)用與實(shí)戰(zhàn)解析,需要的朋友可以參考下2025-01-01
MyBatis-Plus通用CRUD操作的實(shí)現(xiàn)
MyBatis-Plus是基于MyBatis的增強(qiáng)工具,主要目的是簡(jiǎn)化MyBatis的使用并提升開(kāi)發(fā)效率,它提供了通可以用CRUD操作、分頁(yè)插件、多種插件支持、自動(dòng)代碼生成器等功能,感興趣的可以了解一下2024-10-10
postgresql 實(shí)現(xiàn)16進(jìn)制字符串轉(zhuǎn)10進(jìn)制數(shù)字
這篇文章主要介紹了postgresql 實(shí)現(xiàn)16進(jìn)制字符串轉(zhuǎn)10進(jìn)制數(shù)字操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java 如何實(shí)現(xiàn)照片轉(zhuǎn)化為回憶中的照片
本文主要介紹了可以對(duì)圖片進(jìn)行色彩處理的Java工具類(lèi),讓圖片變成回憶中的畫(huà)面,主要將圖片做黑白與褐色的處理。代碼具有一定價(jià)值,感興趣的童鞋可以關(guān)注一下2021-11-11

