>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 26468 个阅读者 刷新本主题
 * 贴子主题:  Java设计模式:数据访问对象模式 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2019-08-10 16:06:29     消息  查看  搜索  好友  邮件  复制  引用

  

数据访问对象模式

   数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。    
  • 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作。
  • 数据访问对象实体类(Data Access Object concrete class) - 该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。
  • 模型对象/数值对象(Model Object/Value Object) - 该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。

实现

     我们将创建一个作为模型对象或数值对象的 Student 对象。StudentDao 是数据访问对象接口。StudentDaoImpl 是实现了数据访问对象接口的实体类。DaoPatternDemo,我们的演示类使用 StudentDao 来演示数据访问对象模式的用法。

    点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

步骤 1

     创建数值对象。                      

Student.java

public   class   Student   {
    private   String   name ;
    private   int   rollNo ;

    Student ( String   name ,  int   rollNo ) {
       this . name  =  name ;
       this . rollNo  =  rollNo ;
    }

    public   String   getName ( )   {
       return   name ;
    }

    public   void   setName ( String   name )   {
       this . name  =  name ;
    }

    public   int   getRollNo ( )   {
       return   rollNo ;
    }

    public   void   setRollNo ( int   rollNo )   {
       this . rollNo  =  rollNo ;
    }
}

步骤 2

     创建数据访问对象接口。                      

StudentDao.java

import   java . util . List ;

public   interface   StudentDao   {
    public   List < Student >  getAllStudents ( ) ;
    public   Student   getStudent ( int   rollNo ) ;
    public   void   updateStudent ( Student   student ) ;
    public   void   deleteStudent ( Student   student ) ;
}

步骤 3

     创建实现了上述接口的实体类。                      

StudentDaoImpl.java

import   java . util . ArrayList ;
import   java . util . List ;

public   class   StudentDaoImpl   implements   StudentDao   {
  
    // 列表是当作一个数据库  
    List < Student >  students ;

    public   StudentDaoImpl ( ) {
       students  =  new   ArrayList < Student > ( ) ;
       Student   student1  =  new   Student ( " Robert " , 0 ) ;
       Student   student2  =  new   Student ( " John " , 1 ) ;
       students . add ( student1 ) ;
       students . add ( student2 ) ;    
    }
   @ Override
    public   void   deleteStudent ( Student   student )   {
       students . remove ( student . getRollNo ( ) ) ;
       System . out . println ( " Student: Roll No  "  +  student . getRollNo ( )  
         + " , deleted from database " ) ;
    }

    // 从数据库中检索学生名单  
   @ Override
    public   List < Student >  getAllStudents ( )   {
       return   students ;
    }

   @ Override
    public   Student   getStudent ( int   rollNo )   {
       return   students . get ( rollNo ) ;
    }

   @ Override
    public   void   updateStudent ( Student   student )   {
       students . get ( student . getRollNo ( ) ) . setName ( student . getName ( ) ) ;
       System . out . println ( " Student: Roll No  "  +  student . getRollNo ( )  
         + " , updated in the database " ) ;
    }
}

步骤 4

     使用 StudentDao 来演示数据访问对象模式的用法。                      

DaoPatternDemo.java

public   class   DaoPatternDemo   {
    public   static   void   main ( String [ ]   args )   {
       StudentDao   studentDao  =  new   StudentDaoImpl ( ) ;

       // 输出所有的学生  
       for   ( Student   student  :  studentDao . getAllStudents ( ) )   {
          System . out . println ( " Student: [RollNo :  "
            + student . getRollNo ( ) + " , Name :  " + student . getName ( ) + "  ] " ) ;
       }

            // 更新学生  
       Student   student  = studentDao . getAllStudents ( ) . get ( 0 ) ;
       student . setName ( " Michael " ) ;
       studentDao . updateStudent ( student ) ;

       // 获取学生  
       studentDao . getStudent ( 0 ) ;
       System . out . println ( " Student: [RollNo :  "
         + student . getRollNo ( ) + " , Name :  " + student . getName ( ) + "  ] " ) ;      
    }
}

步骤 5

     执行程序,输出结果:

Student: [RollNo : 0, Name : Robert ]

Student: [RollNo : 1, Name : John ]

Student: Roll No 0, updated in the database

Student: [RollNo : 0, Name : Michael ]





程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-20 21:59:47 重新编辑]
  Java面向对象编程-->按面向对象开发的基础范例
  JavaWeb开发-->JavaWeb应用入门(Ⅰ)
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->XML数据处理
  精通Spring-->虚拟DOM和render()函数
  Vue3开发-->CSS过渡和动画
  [求助] 如何观看孙老师的课程视频
  好消息:《精通JPA与Hibernate:Java对象持久化技术详解》出...
  用注解去代替if-else的技巧
  好消息:孙卫琴老师等直播分享Java分布式架构专题
  Java并发之volatile关键字内存可见性问题
  Eclipse的安装配置
  JAVA常用数据结构
  正则表达式性能调优
  Java入门实用代码: List 列表中元素的替换
  Java入门实用代码:向文件写入字符串
  Java入门实用代码:打印平行四边形
  Java 入门实用代码:取最大和最小值
  Java入门实用代码:字符串优化测试
  通过java.net.URL类连接HTTP服务器时获取响应结果的头部信息
  java使用gzip实现文件解压缩示例
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。