通过连接数据库演示解耦过程

news2024/11/22 5:25:18

一、什么是解耦?

        解耦就是为了降低程序之间的耦合性,在软件工程中,对象之间的耦合度就是对象之间的关联度。程序之间耦合度越高,程序维护起来也就越困难,即程序维护成本高。所以我们需要通过现有方法降低耦合性,也就是解耦。

        更官方的解耦概念是:解耦是计算机科学与软件工程中的一个概念,指的是降低系统中不同部分之间的依赖性。使得系统的各个组件能够相对独立的进行开发、维护和演化。

二、解耦的目的?

        解耦的目的:减少组件之间的紧密耦合,以提高系统的灵活性、可维护性和可扩展性

三、演示解耦过程

        创建项目,测试 pom.xml 自动导 jar包效果——是否可以连接到mySql数据库

1、新建一个 Maven 项目

2、选择 maven ,单击右下角 next

3、给项目起名,选择保存路径,填写组织名称,然后 finish

Name <======> 给项目起名,随便起名(我的项目名叫 Spring_ioc_01)

选择保存路径 <======> 自己选一个磁盘固定位置专门保存 Project 文件

填写组织名称 <======> 可以用默认的,也可以自己起名

4、项目创建成功后,在pom.xml 文件添加想要的 jar包的坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!-- 注释内容 -->
  <!-- 以下是maven项目信息 -->
  <!-- groupId 组织名称 -->
  <groupId>com.apesource</groupId>
  <!-- artifactId 项目名称 -->
  <artifactId>Demo001</artifactId>
  <!-- version 版本 -->
  <version>1.0-SNAPSHOT</version>

  <!-- 添加坐标 -->
  <dependencies>
    <!-- 我们想要测试连接到 mySQL 数据库,我们就需要添加 mysql 的坐标 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>
  </dependencies>

</project>

5、在 src 下的 main 下的 java 包中建立一个包,包里新建个测试类

        我就建立了一个 com.apesource.test 包,com.apesource.test 包下有一个 Test01 测试类

        目前就是这个样子:我们在新建的项目 Spring_ioc_01 中建立了一个 Test01 测试类并在 pom.xml 文件中添加了 mysql 的坐标

接下来我们就在测试类写连接数据库的代码来测试

(一)高耦合演示

package com.apesource.test;

import java.sql.Connection;
import java.sql.DriverManager;

public class Test01 {
    public static void main(String[] args) throws Exception{
        /*********************高耦合--通过 new对象**************************/
       DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
       Connection root = DriverManager.getConnection(
           "jdbc:mysql://localhost:3306/myschoolxxx?serverTimezone=GMT",
           "root", "123456");
       System.out.println(root);
    }
}

(二)中耦合演示

package com.apesource.test;

import java.sql.Connection;
import java.sql.DriverManager;

public class Test01 {
    public static void main(String[] args) throws Exception{
        /*********************中耦合,不new对象**************************/
       Class.forName("com.mysql.cj.jdbc.Driver");//通过反射加载名称即字符串
        Connection root = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/myschoolxxx?serverTimezone=GMT", 
            "root", "123456");
        System.out.println(root);
    }
}

(三)低耦合演示

        在中耦合基础上再次优化,将加载驱动、地址、用户名和密码写在 jdbc.properties 文件中,这样主代码就算地址、用户名和密码有所改变也不需要改变主代码,只需要修改 jdbc.properties 文件内容即可,最大程度降低了耦合

1、创建文件 src-main-resource右击-New-File回车

2、在 jdbc.properties 文件中写我们的加载驱动、地址、用户名和密码并赋值给自定义参数,我给它们起名 msd1、msd2、msd3、msd4

#key=value形式(#是注释)
msd1=com.mysql.cj.jdbc.Driver
msd2=jdbc:mysql://localhost:3306/myschoolxxx?serverTimezone=GMT
msd3=root
msd4=123456

3、测试

package com.apesource.test;

import java.sql.Connection;
import java.sql.DriverManager;

public class Test01 {
    public static void main(String[] args) throws Exception{
        /*************************低耦合******************************/
       //1.创建工具类--我们的工具类文件后缀为properties,所以我们要先new一个它
       Properties properties = new Properties();
       //2.加载文件--通过字节码文件加载我们的 jdbc.properties 文件,得到一个流,加载流
       InputStream inputStream = 
        Test01.class.getClassLoader().getResourceAsStream("jdbc.properties");
       properties.load(inputStream);
       //3.通过key获取values
       String driver =properties.getProperty("msd1");
       String url = properties.getProperty("msd2");
       String user = properties.getProperty("msd3");
       String pwd = properties.getProperty("msd4");
       //4.获取链接
       Class.forName(driver);
       Connection root = DriverManager.getConnection(url,user,pwd);
       System.out.println(root);
    }
}

以上三个代码结果都为下面所示结果,仅仅是改变了各组件间的耦合性而已,代码运行成功

代码结果(运行成功):

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oss学习问题记录

1.在使用oss上传文档时&#xff0c;根据返回的地址访问上传的图片&#xff0c;会报错误如下&#xff1a;This XML file does not appear to have any style information associated with it. The document tree is shown below. 在设置了上传的文档类型和代码设置读写权限之后 …

Redis的基本概念和使用

目录 一、Redis简介 1、NOSQL 2、NOSQL和关系型数据库比较 3、主流的NOSQL产品 4、什么是Redis 5、启动Redis 二、Redis基本操作 1、大概操作 三、 Redis 数据类型&#xff08;5种常用&#xff09; 1、redis 数据存储格式 2、String 3、hash 4、list 5、Set 6、…

面试题-Spring Bean的生命周期

文章目录 Spring Bean 生命周期分为哪几个阶段浅析Bean生命周期源码实现1.1 DefaultListableBeanFactory1.2 createBean2.1 populateBean3.1 initializeBean3.2 invokeInitMethod3.3 applyBeanPostProcessorsBeforeInitialization5.1 destroyBean5.2 invokeDestroyMethod Sprin…

Python爬虫——爬取某网站的视频

爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入bilibili官网中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频播放页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要…

一次评审会议上的纠偏

这段时间&#xff0c;整个项目组都投入在某个专项项目中&#xff0c;评审和版本迭代的频率也很高。而在近期的评审会上&#xff0c;发生了一起激烈的争辩&#xff0c;也让我意识到大多数产品人身上的通病&#xff0c;觉得挺有意义的&#xff0c;借此分享给大家。 同事A最近在做…

Qt窗口交互场景、子窗口数据获取

一、前言 在现代软件开发中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的设计不仅仅关乎美观&#xff0c;更在于用户体验和功能的无缝衔接。Qt框架以其强大的跨平台能力和丰富的组件库&#xff0c;成为众多开发者构建GUI应用的首选工具。在Qt应用中&#xff0c;窗口…

​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​

目录 微机原理判断指令是否正确【见的多了&#xff0c;你就懂了~】 1. 立即数不能作为目标操作数 2. 操作数位数必须匹配 3. 需要指定存储器操作数的字节或字 4. 两个操作数不能同时为存储器操作数 5. 循环次数超过1必须使用CL寄存器 6. 段寄存器限制&#xff08;特别是…

比OpenAI的Whisper快50%,最新开源语音模型

生成式AI初创公司aiOla在官网开源了最新语音模型Whisper-Medusa&#xff0c;推理效率比OpenAI开源的Whisper快50%。 aiOla在Whisper的架构之上进行了修改采用了“多头注意力”机制的并行计算方法&#xff0c;允许模型在每个推理步骤中预测多个token&#xff0c;同时不会损失性…

[000-01-010].第02节:Spring基础开发环境搭建

1.1.新建空项目&#xff1a; 1.新建Empty项目&#xff0c;主要是为了方便之后把各个模块的代码统一的放在一起&#xff1a; 2.设置JDK&#xff1a; 3.设置maven版本&#xff1a; 1.2.建立第一个Spring项目模块&#xff1a; 1.新建模块&#xff1a; 2.配置依赖&#xff…

gitlab自动部署是什么 gitlab自动部署如何进行操作

在现代软件开发流程中&#xff0c;自动化部署是提高效率和确保软件质量的关键环节。GitLab作为一个强大的DevOps平台&#xff0c;提供了完整的自动部署工具&#xff0c;帮助开发团队实现代码从编写到生产的无缝转换。本文将详细解析GitLab的自动部署功能是什么&#xff0c;如何…

走向绿色:能源新选择,未来更美好

当前&#xff0c;全球范围内可再生能源正经历着从辅助能源向核心能源的深刻转型&#xff0c;绿色能源日益渗透至居住、出行、日常应用等多个领域&#xff0c;深刻影响着我们的生活方式&#xff0c;使我们能够更加充分地体验清洁能源所带来的优质生活。 一、绿色能源与“住” …

Fluent学习笔记——催化转化器内流场仿真(含多孔介质)

参考课程&#xff1a; 标题&#xff1a;【ANSYS Fluent教程|流体仿真基础入门105讲&#xff08;官方最新案例讲解&#xff09;】 作者&#xff1a;仿真秀APP 选集&#xff1a;P35-P40https://www.bilibili.com/video/BV1vT4y1z7on?p35&vd_source7e977d0187273d77005659cdd…

数据结构(03):线性表的逻辑结构

线性表的逻辑结构 在谈论逻辑结构的时候&#xff0c;我们不讨论具体数据在物理内存中的存储细节&#xff0c;而只关注线性表的逻辑结构。数据结构系列文章02介绍过常见的逻辑结构有&#xff1a;集合、线性表结构、树结构和图结构等。 A.What&#xff08;什么是线性表&#xff0…

什么是凤凰雪球期权?和雪球期权有什么区别?

凤凰结构&#xff0c;和经典雪球结构类似&#xff0c;属于障碍期权的一种。凤凰结构中包括敲入事件&#xff0c;也包括敲出事件&#xff0c;最后的收益取决于挂钩标的走势和敲入、敲出事件发生的时间&#xff0c;不过在收益计算规则上与雪球有所不同&#xff0c;下文为大家科普…

deepin V23 Release 安装与功能介绍!!!

原文链接&#xff1a;deepin V23 Release 安装与功能介绍&#xff01;&#xff01;&#xff01; Hello&#xff0c;大家好啊&#xff01;2024年8月15日&#xff0c;deepin正式发布了最新版操作系统——deepin V23。今天&#xff0c;我将为大家带来一篇关于deepin V23的安装及功…

python完整爬取工商数据代码实例+数据展示

在数据爬虫这个领域&#xff0c;我早已不再是新手&#xff0c;而是一位经验丰富的老手。长期以来&#xff0c;我通过不断实践和探索&#xff0c;掌握了一系列高效的爬虫技术&#xff0c;特别是在应对复杂网页和动态数据时&#xff0c;更是积累了独特的经验。 初识爬虫&#xf…

SAP BRIM用于应收账款AR收入中台

SAP BRIM&#xff08;Billing and Revenue Innovation Management&#xff09;是SAP提供的一个综合性解决方案&#xff0c;旨在帮助企业高效管理计费和收入流程。它与SAP ERP系统集成&#xff0c;提供端到端的功能&#xff0c;简化计费流程&#xff0c;自动化收入确认&#xff…

【云原生】Ingress控制器超级详解

Ingress资源对象 文章目录 Ingress资源对象一、Ingress1.1、Ingress是什么&#xff1f;1.2、Ingress术语1.3、Ingress类型 二、Ingress详细2.1、部署Nginx-Ingress控制器2.2、最小Ingress资源2.3、Ingress规则 三、一个域名多个访问路径多SVC四、多域名Ingress五、转发到默认Se…

基于Java+SpringBoot+Vue的网上购物商城系统研发

基于JavaSpringBootVue的网上购物商城系统研发 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f3…

排序算法【希尔排序】

一、原理 &#xff08;1&#xff09;步长为4时候的插入排序 &#xff08;2&#xff09;步长为2的时候的插入排序 &#xff08;3&#xff09;步长为1的时候的插入排序 二、代码如下所示&#xff1a; #ifndef __TEST_H__ #define __TEST_H__ #include <string.h> #include…