SpringBoot学习笔记--数据库操作

文章目录

      • 7.1 JDBC+HikariDataSource
      • 7.2 整合 Druid 到 Spring-Boot

7.1 JDBC+HikariDataSource

  • 需求:演示 Spring Boot 如何通过 jdbc+HikariDataSource 完成对 Mysql 操作

说明: HikariDataSource : 目前市面上非常优秀的数据源, 是 springboot2

第一步、创建测试数据库和表

-- 创建 furns_ssm
DROP DATABASE IF EXISTS spring_boot;
CREATE DATABASE spring_boot;
USE spring_boot; -- 创建家居表
CREATE TABLE furn(
`id` INT(11) PRIMARY KEY AUTO_INCREMENT, ## id
`name` VARCHAR(64) NOT NULL, ## 家居名
`maker` VARCHAR(64) NOT NULL, ## 厂商
`price` DECIMAL(11,2) NOT NULL, ## 价格
`sales` INT(11) NOT NULL, ## 销量
`stock` INT(11) NOT NULL, ## 库存
`img_path` VARCHAR(256) NOT NULL ## 照片路径
);-- 初始化家居数据
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 北 欧 风 格 小 桌 子 ' , ' 熊 猫 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/1.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 简 约 风 格 小 椅 子 ' , ' 熊 猫 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/2.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 典 雅 风 格 小 台 灯 ' , ' 蚂 蚁 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/3.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 温 馨 风 格 盆 景 架 ' , ' 蚂 蚁 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/4.jpg');
SELECT * FROM furn

image-20230407160033543

第二步、在pom文件中导入依赖需要的依赖

 <!--进行数据库开发,引入 data-jdbc starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

        <!--
            1. 引入操作 mysql 的驱动
            2. 这个驱动版本要和你实际操作的 mysql 版本对应
            3. 我们 spring-boot mysql 区别仲裁版本是<mysql.version>8.0.26</mysql.version>
            ,我们安装的是 mysql5 ,因此重新指定 mysql 驱动版本
            4. 这个 mysql 驱动版本也可以在 pom.xml properties 指定
            <properties>
            <mysql.version>5.1.49</mysql.version>
            </properties>
         -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>

        <!--引入springboot test依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

第三步、在 application.yml 配置操作数据源的信息

  # 数据库配置
  datasource:
    # 说明 : 如果没有使用 useSSL=true, 会报红警告
    url: jdbc:mysql://localhost:3308/spring_boot?useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

第四步、创建实体类 Furn.java

public class Furn {
    
    private Integer id;
    
    private String name;
    
    private String maker;
    
    private BigDecimal price;
    
    private Integer sales;
    
    private Integer stock;
    
    private String imgPath = "assets/images/product-image/1.jpg";
 	//此处省略无参、有参构造、getter、setter、toString方法   
}

第五步、去test目录下创建测试类

@SpringBootTest
public class ApplicationTests {

    //Resource和Autowired 注解的区别在上一篇文章有解释~
    @Resource
    private JdbcTemplate jdbcTemplate;

    @Test
    public void contextLoads(){
        BeanPropertyRowMapper<Furn> rowMapper =
                new BeanPropertyRowMapper<>(Furn.class);
        List<Furn> furns = jdbcTemplate.query("select * from furn", rowMapper);
        for (Furn furn : furns) {
            System.out.println(furn);
        }
        System.out.println(jdbcTemplate.getDataSource().getClass());
    }
}

@Resource和@Autowired有啥区别?_xjz_2002的博客-CSDN博客

第六步、运行结果

image-20230407160726664

7.2 整合 Druid 到 Spring-Boot

  1. 官方文档

使用手册: https://github.com/alibaba/druid

中文手册:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

  1. 基本介绍
  • HiKariCP: 目前市面上非常优秀的数据源, 是 springboot2 默认数据源
  • Druid: 性能优秀,Druid 提供性能卓越的连接池功能外【Java 基础】,还集成了 SQL 监控,黑名单拦截等功能,强大的监控特性,通过 Druid 提供的监控功能,可以清楚知道连接池和 SQL 的工作情况,所以根据项目需要,我们也要掌握 Druid 和 SpringBoot 整合
  1. 整合 Druid 到 Spring-Boot 方式
  • 自定义方式
  • 引入 starter 方式
  1. 代码实现

第一步、修改pom.xml,引入 druid 依赖

<!--引入 druid 依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.17</version>
</dependency>

第二步、创建配置类 DruidDataSourceConfig.java

@Configuration
public class DruidDataSourceConfig {
    //默认的自动装配:是判断容器中没有才会配@ConditionalOnMissingBean(DataSource.class)
    /**
     * 1. 默认的数据源配置是 @ConditionalOnMissingBean(DataSource.class)
     * 2. 也就是当容器中没有 DataSource 组件时,才会注入,如果我们这里配置了
          DataSource, 就会使用我们配置的数据源
     * 3. "spring.datasource" 会将 druid 数据源的配置绑定到 application.yml,
          就不需要 setXxx
     */

    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        //"spring.datasource" 会将 druid 数据源的配置绑定到 application.yml, 就不需要setXxx
        //druidDataSource.setUrl();
        //druidDataSource.setUsername();
        //druidDataSource.setPassword();
        //druidDataSource.setDriverClassName();
        return druidDataSource;
    }
}

第三步、完成测试,运行ApplicationTests.java,观察数据源的运行类型

image-20230407165352870

第四步、debug看一下我们的ioc容器

image-20230407165225843

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/7088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录Day44

今天继续学习通过动态规划解决问题 96.不同的二叉搜索树 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5 思路…

数据存储的细致介绍

本文介绍内容&#xff1a; 1&#xff1a;数据类型的详细介绍 2&#xff1a;整形的存储&#xff1a;原码&#xff0c;反码&#xff0c;补码 3&#xff1a;大小端字节序 4&#xff1a;浮点型的存储 一&#xff1a;数据类型的归类 1&#xff1a;整形家族(包括无符号&#xff09; …

Web 攻防之业务安全:本地加密传输测试.

Web 攻防之业务安全&#xff1a;本地加密传输测试. 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务所提…

蓝桥杯·3月份刷题集训Day07

本篇博客旨在记录自已打卡蓝桥杯3月份刷题集训&#xff0c;同时会有自己的思路及代码解答希望可以给小伙伴一些帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误之处&#xff0c;希望小伙伴们可以在评论区指出来&#xff0c;共勉&#x1f4aa;。 文…

【C++修行之路】面向对象三大特性之多态

文章目录前言认识多态构成多态的必要条件虚函数的重写虚函数重写的两个例外final和override重载、覆盖、隐藏抽象类多态的原理单继承多继承重写了基类的虚函数没有重写基类的虚函数菱形继承和菱形虚拟继承的虚表补充补充继承与多态相关问题inline函数可以是虚函数吗&#xff1f…

ChatGPT这么火,我们能怎么办?

今天打开百度&#xff0c;看到这样一条热搜高居榜二&#xff1a;B站UP主发起停更潮&#xff0c;然后点进去了解一看&#xff0c;大体是因为最近AI创作太火&#xff0c;对高质量原创形成了巨大冲击&#xff01;记得之前看过一位UP主的分享&#xff0c;说B站UP主的年收入大体约等…

iptables防火墙详解

文章目录一、iptables概念1、防火墙基础1.1 防火墙概念1.2 Netfilter和iptables的区别2、Iptables的表、链结构2.1 规则链2.2 规则表2.3 规则表之间的顺序3、规则3.1 匹配条件3.2 处理动作二、iptables规则管理1、iptables规则操作1.1 iptables信息查询1.2 规则添加1.3 规则删除…

Ant Design Vue的汉化

Ant Design Vue的汉化 1. 引入依赖 import zhCN from "ant-design-vue/lib/locale-provider/zh_CN"; // 汉化 export default {data () {zhCN,} }2. 标签包裹需要汉化的组件 <a-config-provider :locale"zhCN"><a-table :row-selection"ro…

C++IO流

文章目录一、CIO流体系二、C标准IO流三、C文件IO流1.ifstream2.ofstream一、CIO流体系 C流是指信息从外部输入设备向计算机内部输入&#xff0c;从内存向外部输出设备输出的过程&#xff0c;这种输入输出的过程非常形象地被称为流的概念。IO流指的就是输入输出流。 我们平时对…

PerfEnforce Demonstration: Data Analytics with Performance Guarantees

PerfEnforce Demonstration: Data Analytics with Performance Guarantees Created by: ctur Date: April 2, 2023 2:54 PM Status: ready to start 实时响应式的扩展算法 实时响应式的扩展算法分为 1. 比例积分控制 2. 强化学习 比例积分控制方法 “We use a proportiona…

现在的年轻人真会玩,开发界面都这么时尚,不服老都不行了

文章目录一、你还在用传统的开发界面吗二、年轻人的界面1.动漫型2.偶像型3.提神型三、更换背景的操作第一步第二步第三步一、你还在用传统的开发界面吗 不比不知道&#xff0c;一比吓一跳&#xff0c;都2023年了&#xff0c;你还在用Pycharm的默认背景写代码吗&#xff1f;已经…

不同版本的JDK新特性

1.JDK9&#xff1a;模块化开发 模块化功能用的不是很多 2.JDK10&#xff1a;var局部变量推导 使用var的两个基本要求&#xff1a; 也用得不是很多 3.JDK11 (1)单文件程序 就是能够直接用java命令编译.java文件了&#xff0c;跳过了使用javac命令的步骤&#xff0c;对新人…

4年功能测试月薪9.5K,3个月时间成功进阶自动化,跳槽涨薪6k后我的路还很长...

前言 其实最开始我并不是互联网从业者&#xff0c;是经历了一场六个月的培训才入的行&#xff0c;这个经历仿佛就是一个遮羞布&#xff0c;不能让任何人知道&#xff0c;就算有面试的时候被问到你是不是被培训的&#xff0c;我还是不能承认这段历史。我是为了生存&#xff0c;…

AD14安装步骤

首先 得需要科学安软件&#xff0c;我相信你可以找到的。 第一步&#xff1a;解压完成之后哦&#xff0c;双击打开AltiumDesignerSetup14_3_15.exe 第二步&#xff1a;点击next 第三步&#xff1a;先点击我同意&#xff0c;在点击next 第四步&#xff1a;点击next 第五步&…

路径 Dijkstra 蓝桥杯 JAVA

目录题目描述&#xff1a;Dijkstra 算法 (朴素版)&#xff1a;用Dijkstra解决本题&#xff1a;题目描述&#xff1a; 小蓝学习了最短路径之后特别高兴&#xff0c;他定义了一个特别的图&#xff0c;希望找到图中的最短路径。 小蓝的图由2021 个结点组成&#xff0c;依次编号1 至…

TypeScript由浅到深(上篇)

目录 一、什么是TypeScript有什么特点&#xff1a; 二、TypeScript的编译环境&#xff1a; 三、TypeScript数据类型&#xff1a; 01_标识符的类型推导&#xff1a; 02_JS中的类型Array&#xff1a; 03_JS 中的类型Object&#xff1a; 04_函数的类型&#xff1a; 05_匿名…

C++游戏分析与破解方法介绍

1、C游戏简介 目前手机游戏直接用C开发的已经不多&#xff0c;使用C开发的多是早期的基于cocos2dx的游戏&#xff0c;因此我们这里就以cocos2d-x为例讲解C游戏的分析与破解方法。 Cocos2d-x是一个移动端游戏开发框架&#xff0c;可以使用C或者lua进行开发&#xff0c;也可以混…

SpringBoot事件的选取原理

有四个事件启动监听器&#xff1a; 事件1会被监听吗&#xff1f;答案不会 容器发布一个正在启动的事件 org.springframework.context.event.AbstractApplicationEventMulticaster#retrieveApplicationListeners 遍历我们注册的监听器&#xff0c;但这里有个判断条件&#xff…

众人围剿,GPT-5招惹了谁

目录千人呼吁暂停AI训练代表人物分析反对原因分析信息安全人身安全失业利益总结GPT-4 火爆全球&#xff0c;引发了人工智能大浪潮。过去的一个月&#xff0c;OpenAI、微软、谷歌加上百度不断释放王炸&#xff0c;所有人都相信&#xff0c;AI 的就是未来的生产力。俗话说&#x…

Android动画进阶

在Android中&#xff0c;实现动画的方式通常有两种&#xff1a;视图动画和属性动画。然而这两种方式只能实现一些较为简单动画&#xff0c;仅仅通过改变这些控件属性的方式实现一些复杂的动画效果是比较有难度的&#xff0c;那么我们该如何实现复杂的动画。这里介绍两种实现方式…