• Spring(一)


    一、编写jdbc的工程代码用于分享程序的耦合

    工程结构

    pom.xml

    <?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>
    
        <groupId>com.itheima</groupId>
        <artifactId>day01_eesy_01jdbc</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.7</version>
            </dependency>
        </dependencies>
    
    </project>

     JdbcDemo1

    package com.itheima.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    public class JdbcDemo1 {
        public static void main(String[] args) throws Exception{
            //1.注册驱动
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //2.获取连接
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eesy","root","root");
            //3.获取操作数据库的预处理对象
            PreparedStatement pstm = conn.prepareStatement("select * from account");
            //4.执行SQL语句,得到结果集
            ResultSet rs = pstm.executeQuery();
            //5.遍历输出结果
            while (rs.next()){
                System.out.println(rs.getString("name"));
            }
            //6.释放资源
            rs.close();
            pstm.close();
            conn.close();
        }
    }

    遇到的问题

    (1)以上代码mysql标红

    分析:查看Maven结构,提示5.1.7不存在

    解决:将pom.xml中的版本换成5.1.6

     <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
        </dependencies>

    (2)运行代码提示

    EXCEPTION IN THREAD "MAIN" JAVA.SQL.SQLEXCEPTION: UNKNOWN INITIAL CHARACTER SET INDEX '255' RECEIVED FROM SERVER. INITIAL CLIENT CHARACTER SET CAN BE FORCED VIA THE 'CHARACTERENCODING' PROPERTY.

    解决方法:

    在url路径上加上这句话

    ?useUnicode=true&characterEncoding=utf-8

     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eesy?useUnicode=true&characterEncoding=utf-8","root","root");

     二、编译期依赖

     DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    现象:删除pom.xml中的依赖,运行代码

    三、程序的耦合和解耦的思路分享

    耦合的表现:

      1)使用了new关键字创建对象

      2)注释掉mysql依赖

      3)运行程序,报编译期错误

     解决耦合:

      1)使用反射创建对象

      2)运行程序

      3)不再报编译期错误,但是会报运行错误,此时放开注释,再次运行成功

      此方式存在的问题,"com.mysql.jdbc.Driver"在程序中是写死的,如果换成其他数据库如Oracle,还是有问题,那么如何解决呢?

    什么是耦合?

    耦合:程序间的依赖关系

      包括:

        类之间的依赖

        方法之间的依赖

    解耦:

      降低程序的依赖关系

    实际开发中

      应该做到:编译期不依赖,运行时才依赖

    解耦的思路:

      第一步:使用反射来创建对象,而避免使用new关键字

      第二步:通过读取配置文件来获取要创建的对象全限定类名

    四、曾经代码中的问题分享

    新建一个工程

    目录结构

    pom.xml文件

    <?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>
    
        <groupId>com.itheima</groupId>
        <artifactId>day01_eesy_02factory</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
    </project>

    业务层接口

    package com.itheima.service;
    
    /*
    * 帐号业务层接口
    * */
    
    public interface IAccountService {
    
        /*
        * 模拟保存账户
        * */
        void saveAccount();
    }

     业务层实现

    package com.itheima.service.ipml;
    
    import com.itheima.service.IAccountService;
    import com.itheima.dao.IAccountDao;
    import com.itheima.dao.impl.AccountDaoImpl;
    
    /*
    * 账号的业务层实现
    * */
    
    public class AccountServiceImpl implements IAccountService {
    
        private IAccountDao accountDao = new AccountDaoImpl();
    
        public void saveAccount() {
            accountDao.saveAccount();
        }
    }

    持久层接口

    package com.itheima.dao;
    
    /*
    * 帐号的持久层接口
    * */
    public interface IAccountDao {
        /*
        *模拟保存账户
         */
        public void saveAccount();
    }

    持久层实现

    package com.itheima.dao.impl;
    
    import com.itheima.dao.IAccountDao;
    
    /*
    * 账户的持久层实现
    * */
    public class AccountDaoImpl implements IAccountDao {
    
    
        public void saveAccount() {
            System.out.println("保存了账户!");
    
        }
    }

    表现层(模拟)

    package com.itheima.ui;
    
    import com.itheima.service.IAccountService;
    import com.itheima.service.ipml.AccountServiceImpl;
    
    /*
    * 模拟一个表现层,用于调用业务层
    * */
    public class Client {
        public static void main(String[] args) {
            IAccountService as = new AccountServiceImpl();
            as.saveAccount();
        }
    }

    以上代码存在的问题

    1.强依赖(耦合),如果将持久层代码拷走,所有文件代码报编译错误

    2.解决,使用工厂

  • 相关阅读:
    .net微信公众号开发——群发消息
    .net微信公众号开发——消息与事件
    .net微信公众号开发——基础接口
    .net微信公众号开发——快速入门
    如何实现ASP.NET中网站访问量的统计
    Asp.Net MVC3.0网站统计登录认证的在线人数
    SQL server 2008数据库的备份与还原(转)
    python创建多层目录的方式
    30款基本UX工具
    B树、B-树、B+树、B*树都是什么(转)
  • 原文地址:https://www.cnblogs.com/huiguniang/p/13163675.html
Copyright © 2020-2023  润新知