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

一、什么是解耦?

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

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

二、解耦的目的?

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

三、演示解耦过程

        创建项目,测试 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);
    }
}

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

代码结果(运行成功):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值