zoukankan      html  css  js  c++  java
  • java数据库编程之DAO模式

    第八章:DAO模式

    8.1:JDBC封装

    为了提高代码的维护性和扩展性,我们使用JDBC进行封装数据,

    先定义统一的API,将操作数据的代码抽象到接口中,业务逻辑代码只需要调用这些接口的实现类的对象,就可以实现对数据的访问了,从而隔离实现的细节,采用面向接口编程,可以降低代码间的耦合度,提高代码的扩展性和维护性。

    DAO(data  access  Objects) 数据存取对象,位于业务逻辑和持久化之间,实现对持久化数据的访问,通俗的讲,就是将数据操作封装起来,对外提供相应的接口

    在面向对象设计过程中,有一些套路用户解决问题,称为模式,DAO模式提供了访问关系型数据系统所需操作的接口,将数据访问和业务逻辑分开,对上层提供面向对象的数据访问接口,

    从DAO模式可以看出,它实现了两层分离。

    l  隔离了数据访问代码和业务逻辑代码,业务逻辑代码直接调用DAO方法即可,完全感觉不到数据表的存在,分工明确,数据访问层代码不影响业务逻辑层代码,这也符合单一职能原则,降低了耦合度,提高了代码的可复用性。。

    l  隔离了不同的数据库的实现,采用面向接口编程,如果底层数据变化了,如mysql变成了oracle。中需要增加DAO接口的实现类即可,原来的Mysql实现类不用修改,这符合开闭原则,降低耦合性,提高扩展性和移植性

    一个典型的DAO模式主要由以下几部分组成。

      DAO接口:把对数据库的所有操作定义为抽象方法,放在接口里面,可以提供多种实现

      DAO实现类:针对不同的数据库给出不同的DAO接口定义的方法的实现(不同的实现类)

      实体类:用于存放传送的对象数据,就直接传递对象就行了,不用传递很多参数

      数据库连接关闭工具类:还有一些比如增,删,改的复用代码可以提取到公共类中,还有关闭和连接数据库,避免代码冗余。。。

    8.2:Prpoerties类

    可以读取java配置文件的类,我们把常用的配置信息写在配置文件中,方便维护,读取。

    8.2.1:Properties配置文件

    Java配置文件一般是properties结尾的。格式是键=值对的,可以用#来注释,

      SRC右键-----NEW -----File-----输出properties结尾的配置文件。

      在文件中添加配置信息。例如

    Driver=com.mysql.jdbc.Driver                   //添加加载驱动的字符串

    Url=jdbc:mysql://localhost:3306/epet           //添加链接的字符串,localhost也可以为IP地址,3306为端口号,epet是数据库名称

    Username=epetAdmin                         //数据库用户名

    Password=root                             //数据库用户密码

    8.2.2:读取配置文件

    Properties类位于Java.util包中

    方法

    描述

    String getProperty(String key)

    用指定的键获得值,

    Object setProperties(String key,String value)

    调用hashTable的put方法,通过调用基类的put() 方法设置键值对。

    Void  load(InputStream instr)

    从输入流中读取属性列表,通过对指定的文件进行装载获取文件的键值对

    Void clear()

    清除所转载的键值对,改方法是hashtable提供的

    例子:

    private static String driver;

             private static String url;

             private static String user;

             private static  String password;

             public Connection conn=null;   //连接对象

             /**

              * 静态代码块

              */

             static {

                       init();

             }

             /**

              * 初始化连接参数,从配置文件读取

              */

             public static void init() {

                       //创建配置

                       Properties params=new Properties();

                       String configFile="database.properties";  //路径

                       //加载配置问件到输入流

                       InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);

                       try {

                                //重输入流中读取属性列表

                                params.load(is);

                       } catch (IOException e) {

                                System.out.println(e.getMessage());

                       }

                       //根据指定的获取对应的值

                       driver=params.getProperty("driver");

                       url=params.getProperty("url");

                       user=params.getProperty("username");

                       password=params.getProperty("password");

                      

             }

    8.3:使用实体类传递数据

    数据访问代码和业务逻辑代码之间通过实体类类传输数据,把相关的信息封装到实体;类中,程序把实体类作为方法的参数来传递。

    8.3.1:实体类的特征

      实体类一般属性使用private修饰

      根据业务需求和封装性要求对实体类进行getter/setter方法,负责属性的读取和赋值,一般使用public修饰

      对实体类提供无参的构造函数,根据业务需求提供有参数的构造方法。

      实体类最好实现java.io.Serializable接口,支持序列化机制,可以将改对象转化为字节序列化而保存到磁盘(硬盘)或者网络上传输。

      如果实体类实现了serializable接口。就应该定义属性serialVersionUID,解决不同版本的序列化问题。。。

  • 相关阅读:
    从零开始学JavaScript(一)- 理解函数
    Mootools--学习笔记(1)
    JS详解Date应用+定时器原理+计时器案例
    原生JS写伪验证码(加详细注释)~~~~~~~~~~~~~~~~
    详解JavaScript字符串!!!!!!!!和相关demo详解
    模拟children方法,实现获取指定元素下元素节点!
    关于数组去重的两种写法的思想!!!!!!
    冒泡排序的写法!!!!!
    开始写博客啦,不为出名,只为记录点滴的学习日常,留给未来的的自己
    跨平台渲染框架尝试
  • 原文地址:https://www.cnblogs.com/bdqnwangchao/p/7638849.html
Copyright © 2011-2022 走看看