最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3中數(shù)據(jù)庫(kù)集成實(shí)踐詳解

 更新時(shí)間:2023年08月13日 08:51:54   作者:知了一笑  
項(xiàng)目工程中,集成數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,所以下面小編就來(lái)和大家講講SpringBoot3如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)集成,需要的可以參考下

一、簡(jiǎn)介

項(xiàng)目工程中,集成數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,而對(duì)于這個(gè)功能的實(shí)現(xiàn),其組件選型也非常豐富;

通過如下幾個(gè)組件來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的整合;

Druid連接池:阿里開源的數(shù)據(jù)庫(kù)連接池,并且提供SQL執(zhí)行的監(jiān)控能力;

MybatisPlus框架:基于Mybatis框架的增強(qiáng)工具包,可以用于簡(jiǎn)化持久層開發(fā),顯著的提高效率;

MySQL數(shù)據(jù)庫(kù):常用的關(guān)系型數(shù)據(jù)庫(kù)組件,在案例中使用Druid組件來(lái)連接數(shù)據(jù)庫(kù);

二、工程搭建

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ù)庫(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依賴 -->
<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ù)庫(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: 300000

2、配置類

配置兩個(gè)Bean對(duì)象,分別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ù)庫(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 '用戶名稱',
  `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 '城市名稱',
  `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的注冊(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 配置類

在配置類中,添加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)問題;

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2、Mapper

Mapper接口編寫數(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è)試

編寫UserMapper接口測(cè)試,很多默認(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)分頁(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)文章

  • FastJSON字段智能匹配踩坑的解決

    FastJSON字段智能匹配踩坑的解決

    這篇文章主要介紹了FastJSON字段智能匹配踩坑的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 重學(xué)SpringBoot3之如何發(fā)送Email郵件功能

    重學(xué)SpringBoot3之如何發(fā)送Email郵件功能

    這篇文章主要給大家介紹了重學(xué)SpringBoot3之如何發(fā)送Email郵件功能的相關(guān)資料,文中包括環(huán)境準(zhǔn)備、項(xiàng)目配置、代碼實(shí)現(xiàn)、最佳實(shí)踐和安全性建議,通過采用異步發(fā)送、重試機(jī)制、限流等最佳實(shí)踐,可以構(gòu)建一個(gè)健壯的郵件發(fā)送系統(tǒng),需要的朋友可以參考下
    2024-11-11
  • 利用Spring Boot如何開發(fā)REST服務(wù)詳解

    利用Spring Boot如何開發(fā)REST服務(wù)詳解

    這篇文章主要給大家介紹了關(guān)于利用Spring Boot如何開發(fā)REST服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析

    SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析

    這篇文章主要介紹了SpringBoot集成Druid連接池進(jìn)行SQL監(jiān)控的問題解析,在SpringBoot工程中引入Druid連接池非常簡(jiǎn)單,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • JDK環(huán)境變量配置的具體操作步驟

    JDK環(huán)境變量配置的具體操作步驟

    本篇文章介紹了,JDK環(huán)境變量配置的具體操作步驟。需要的朋友參考下
    2013-05-05
  • springboot結(jié)合mybatis操作事務(wù)配置的處理

    springboot結(jié)合mybatis操作事務(wù)配置的處理

    在操作數(shù)據(jù)庫(kù)的時(shí)候,經(jīng)常會(huì)使用事務(wù)的處理,本文主要介紹了springboot結(jié)合mybatis操作事務(wù)配置的處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • java?環(huán)境配置(2023年詳細(xì)教程)

    java?環(huán)境配置(2023年詳細(xì)教程)

    這篇文章首先為了完善我的知識(shí)體系,今后一些軟件的安裝教程也可能會(huì)用到想寫一個(gè)更加詳細(xì)的,因?yàn)檫@并不僅僅是寫給?IT?行業(yè)的,其它行業(yè)可能也需要配置java環(huán)境
    2023-06-06
  • Java對(duì)線程池做監(jiān)控的實(shí)現(xiàn)方法

    Java對(duì)線程池做監(jiān)控的實(shí)現(xiàn)方法

    本文主要介紹了Java對(duì)線程池做監(jiān)控的實(shí)現(xiàn)方法,監(jiān)控線程池可以幫助我們了解線程池的狀態(tài),如當(dāng)前活躍線程數(shù)、任務(wù)隊(duì)列長(zhǎng)度、已完成任務(wù)數(shù)等,下面就一起來(lái)了解一下
    2024-07-07
  • Java中默認(rèn)的訪問權(quán)限作用域解析

    Java中默認(rèn)的訪問權(quán)限作用域解析

    這篇文章主要介紹了Java中默認(rèn)的訪問權(quán)限作用域,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JDK1.8中的ConcurrentHashMap源碼分析

    JDK1.8中的ConcurrentHashMap源碼分析

    這篇文章主要介紹了JDK1.8中的ConcurrentHashMap源碼分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

泗水县| 潍坊市| 多伦县| 茌平县| 柳河县| 顺平县| 左贡县| 稷山县| 吴川市| 洛南县| 和田市| 永和县| 沙坪坝区| 区。| 赫章县| 陇西县| 太仆寺旗| 固原市| 阳泉市| 二连浩特市| 团风县| 芜湖市| 舞阳县| 林西县| 仪陇县| 涪陵区| 民县| 罗甸县| 神木县| 沁源县| 栾川县| 许昌市| 郯城县| 蓬莱市| 定结县| 方城县| 万荣县| 兴安盟| 扶风县| 庄浪县| 台州市|