SpringBoot3中數(shù)據(jù)庫集成實(shí)踐詳解
一、簡介
項(xiàng)目工程中,集成數(shù)據(jù)庫實(shí)現(xiàn)對數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,而對于這個(gè)功能的實(shí)現(xiàn),其組件選型也非常豐富;
通過如下幾個(gè)組件來實(shí)現(xiàn)數(shù)據(jù)庫的整合;
Druid連接池:阿里開源的數(shù)據(jù)庫連接池,并且提供SQL
執(zhí)行的監(jiān)控能力;
MybatisPlus框架:基于Mybatis框架的增強(qiáng)工具包,可以用于簡化持久層開發(fā),顯著的提高效率;
MySQL數(shù)據(jù)庫:常用的關(guān)系型數(shù)據(jù)庫組件,在案例中使用Druid
組件來連接數(shù)據(jù)庫;
二、工程搭建
1、工程結(jié)構(gòu)
2、依賴管理
Druid連接池使用的是1.2.18
版本;在mybatis-plus
組件中依賴mybatis
框架的3.5.10
版本;MySQL本地環(huán)境是5.7
版本,這里依賴包使用8.0.19
版本;
<!-- MySql數(shù)據(jù)庫 --> <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依賴 --> <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ù)還有很多,可以參考源碼中的描述或者官方案例,此處只提供部分常見的參數(shù)配置;
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource druid: # 數(shù)據(jù)庫 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 # 檢測空閑連接 test-while-idle: true # 最小空閑時(shí)間 min-evictable-idle-time-millis: 300000
2、配置類
配置兩個(gè)Bean對象,分別DruidDataSource
類和JdbcTemplate
類;
@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ù)庫表
在boot-jdbc
數(shù)據(jù)庫中添加兩張測試表,用戶基礎(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 '用戶名稱', `email` varchar(50) DEFAULT NULL COMMENT '郵件', `phone` varchar(20) NOT NULL COMMENT '手機(jī)號', `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 '城市名稱', `school` varchar(200) DEFAULT NULL COMMENT '學(xué)校名稱', PRIMARY KEY (`id`), KEY `user_id_index` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶擴(kuò)展信息';
2、JdbcTemplate
JdbcTemplate
是由spring-jdbc
組件提供,支持DataSource
的注冊,是對數(shù)據(jù)庫操作的深層封裝,支持一系列數(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 配置類
在配置類中,添加MapperScan
注解用來掃描和注冊MyBatis框架的mapper
接口,以及設(shè)置PaginationInnerInterceptor
分頁攔截器;
@Configuration @MapperScan("com.boot.jdbc.mapper") public class MybatisConfig { /** * 分頁 */ @Bean public MybatisPlusInterceptor paginationInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
1.2 配置文件
在日志中輸出mybatis
框架解析的SQL語句,方便在測試的時(shí)候快速發(fā)現(xiàn)問題;
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2、Mapper
Mapper
接口編寫數(shù)據(jù)庫操作方法,Mapper.xml
文件中定義數(shù)據(jù)庫執(zhí)行的SQL
語句,在mybatis-plus
組件中提供很多單表操作的默認(rèn)方法實(shí)現(xiàn),也可以自定義方法;
2.1 Mapper接口
public interface UserMapper extends BaseMapper<User> { /** * 自定義分頁 */ 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、單元測試
編寫UserMapper
接口測試,很多默認(rèn)實(shí)現(xiàn)的方法參考BaseMapper
接口即可,或者參考IService
接口和ServiceImpl
實(shí)現(xiàn)類,提供了更加豐富的擴(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)分頁查詢 IPage<User> userPage = new Page<>(2,2) ; IPage<User> userPageList = userMapper.selectPage(userPage,new QueryWrapper<>()); userPageList.getRecords().forEach(System.out::println); // 2、自定義查詢分頁 IPage<UserModel> userModelPage = userMapper.queryUserPage(userPage); userModelPage.getRecords().forEach(System.out::println); } }
六、參考源碼
文檔倉庫:
https://gitee.com/cicadasmile/butte-java-note
到此這篇關(guān)于SpringBoot3中數(shù)據(jù)庫集成實(shí)踐詳解的文章就介紹到這了,更多相關(guān)SpringBoot3數(shù)據(jù)庫集成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java時(shí)間類Date類和Calendar類的使用詳解
這篇文章主要介紹了Java時(shí)間類Date類和Calendar類的使用詳解,需要的朋友可以參考下2017-08-08Spring依賴注入中的@Resource與@Autowired詳解
這篇文章主要介紹了Spring依賴注入中的@Resource與@Autowired詳解,提到Spring依賴注入,大家最先想到應(yīng)該是@Resource和@Autowired,對于Spring為什么要支持兩個(gè)這么類似的注解卻未提到,屬于知其然而不知其所以然,本文就來做詳細(xì)講解,需要的朋友可以參考下2023-09-09java+Okhttp3調(diào)用接口的實(shí)例
這篇文章主要介紹了java+Okhttp3調(diào)用接口的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12一篇文章帶你學(xué)會Spring?MVC表單標(biāo)簽
Spring MVC表單標(biāo)簽是網(wǎng)頁的可配置和可重復(fù)使用的構(gòu)建塊,下面這篇文章主要給大家介紹了如何通過一篇文章學(xué)會Spring?MVC表單標(biāo)簽的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03JavaWeb如何實(shí)現(xiàn)限制單個(gè)賬號多處登錄
這篇文章主要介紹了JavaWeb如何實(shí)現(xiàn)限制單個(gè)賬號多處登錄問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08RabbitMQ 在 Spring Boot 項(xiàng)目中的深度應(yīng)用與實(shí)戰(zhàn)解析
RabbitMQ 作為一款廣受歡迎的開源消息隊(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-01MyBatis-Plus通用CRUD操作的實(shí)現(xiàn)
MyBatis-Plus是基于MyBatis的增強(qiáng)工具,主要目的是簡化MyBatis的使用并提升開發(fā)效率,它提供了通可以用CRUD操作、分頁插件、多種插件支持、自動代碼生成器等功能,感興趣的可以了解一下2024-10-10postgresql 實(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à)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02Java 如何實(shí)現(xiàn)照片轉(zhuǎn)化為回憶中的照片
本文主要介紹了可以對圖片進(jìn)行色彩處理的Java工具類,讓圖片變成回憶中的畫面,主要將圖片做黑白與褐色的處理。代碼具有一定價(jià)值,感興趣的童鞋可以關(guān)注一下2021-11-11