30-Java数据访问对象模式 ( Data Access Object )

news2024/11/15 22:42:48

Java数据访问对象模式

    • 实现
    • 范例

  • 数据访问对象模式(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来演示数据访问对象模式的用法;

范例

1. 创建数值对象

Student.java

package com.demo.gof;
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

package com.demo.gof;
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

package com.demo.gof;
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

package com.demo.gof;
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()+" ]");      
   }
}

编译运行以上 Java 范例,输出结果如下

$ javac -d . src/main/com.demo/gof/DaoPatternDemo.java
$ java  com.demo.gof.DaoPatternDemo
Student: [RollNo : 0, Name : Robert ]
Student: [RollNo : 1, Name : John ]
Student: Roll No 0, updated in the database
Student: [RollNo : 0, Name : Michael ]

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

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

相关文章

计算机视觉——目标检测(R-CNN、Fast R-CNN、Faster R-CNN )

前言、相关知识 1.闭集和开集 开集&#xff1a;识别训练集不存在的样本类别。闭集&#xff1a;识别训练集已知的样本类别。 2.多模态信息融合 文本和图像&#xff0c;文本的语义信息映射成词向量&#xff0c;形成词典&#xff0c;嵌入到n维空间。 图片内容信息提取特征&…

五星门店小程序性能优化实践

一、背景介绍 1.1 业务介绍 五星门店小程序主要服务于五星线下门店交易场景&#xff0c;目前已有79个城市267家门店&#xff08;包括超级体验店、城旗店、京东Mall等&#xff09;在使用&#xff0c;用户可以通过小程序便捷地查看和购买门店的商品。五星门店小程序已实现基于T…

用Stable Diffusion生成同角色不同pose的人脸

随着技术的不断发展&#xff0c;我们现在可以使用稳定扩散技术&#xff08;Stable Diffusion&#xff09;来生成同一角色但不同姿势的人脸图片。本文将介绍这一方法的具体步骤&#xff0c;以及如何通过合理的提示语和模型选择来生成出更加真实和多样化的人脸图像。 博客首发地…

什么是VPS?如何使用VPS?

什么是VPS&#xff1f;VPS有什么用&#xff1f; VPS是Virtual Private Server的缩写&#xff0c;中文则为虚拟专用服务器&#xff0c;VPS是利用虚拟服务器软件在一台物理服务器上创建多个相互隔离的小服务器&#xff0c;是托管在机房物理服务器上的虚拟机。每个VPS服务器都可分…

基于Java+SpringBoot+vue的图书购物商城系统详细设计和实现

基于JavaSpringBootvue的图书购物商城系统详细设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

解决驱动开发中<stdlib.h> no such file 的问题

前言 在进行驱动开发时&#xff0c;需要使用malloc等函数&#xff0c;导入C库<stdlib.h>出现bug。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论…

稳定可靠:PW2163降压芯片,实现5V至3.3V/3V高效转换,3A电流稳定输出

在现代电子设备中&#xff0c;电源管理芯片发挥着至关重要的作用。PW2163作为一款高效稳定的500kHz同步降压DC-DC转换器&#xff0c;凭借其出色的性能和广泛的应用领域&#xff0c;已成为众多电子设备中的电源管理新选择。 一、PW2163的显著特点与优势 PW2163具有内部集成低RD…

MPQ电源方案-MPQ79700与MPQ79500电源管理(续写中...)

MPQ电源方案 1.MPQ79500简介 MPQ79500是一款专为汽车安全应用设计的 6 通道电压监测器&#xff0c;每个通道都可以配置OV/UV检测&#xff0c;集成内置自检 (BIST) 等安全机制&#xff0c;诊断以及写保护来实现ASILD的应用要求。 2.MPQ79700简介 MPQ79700是一款 12 通道功能安全…

VB窗体单元格验证事件

缘由https://bbs.csdn.net/topics/396522344 Public Class VB解答专用窗体Private Sub VB解答专用窗体_Load(sender As Object, e As EventArgs) Handles MyBase.LoadDim 数据列表 New DataGridView数据列表.Parent Me数据列表.Columns.Add("序列", "序列&qu…

Linux 部署 Samba 服务

一、Ubuntu 部署 Samba 1、安装 Samba # 更新本地软件包列表 sudo apt update# 安装Samba sudo apt install samba# 查看版本 smbd --version2、创建共享文件夹&#xff0c;并配置 Samba 创建需要共享的文件夹&#xff0c;并赋予权限&#xff1a; sudo mkdir /home/test sud…

普林斯顿算法讲义(三)

原文&#xff1a;普林斯顿大学算法课程 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 4.2 有向图 原文&#xff1a;algs4.cs.princeton.edu/42digraph 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 有向图。 一个有向图&#xff08;或有向图&#xff09;是…

1.1 课程架构介绍:STM32H5信息安全特性概览

1.1 课程架构介绍&#xff1a;STM32H5信息安全特性概览 1. 概述 开发者在打造嵌入式系统时&#xff0c;安全和性能是产品开发设计的考量重点。为实现这一目标&#xff0c;ST推出了STM32H5系列&#xff0c;该系列作为微控制器新标杆面向工业应用市场&#xff0c;将为用户带来更…

服务器数据恢复—raid5热备盘上线同步数据失败的如何恢复数据

服务器数据恢复环境&故障&分析&#xff1a; 一台存储上有一组由多块硬盘组建的raid5阵列&#xff0c;该raid5阵列中的一块硬盘掉线&#xff0c;热备盘自动上线同步数据的过程中&#xff0c;raid阵列中又有一块硬盘掉线&#xff0c;热备盘的数据同步被中断&#xff0c;r…

云仓酒庄2024年新动态客户满意化战略

云仓酒庄2024年客户满意化战略&#xff1a;深化性价比与服务&#xff0c;提升复购率 在竞争激烈的酒业市场中&#xff0c;客户满意度已成为企业持续发展的关键因素。云仓酒庄深知&#xff0c;客户的满意不仅源于产品本身的质量&#xff0c;更在于其所能提供的性价比与优质服务…

2023年代理业绩同比增长12%,国民技术为世强先进颁发优秀代理商奖

近日&#xff0c;在国民技术&#xff08;300077&#xff09;主办的“2024年国民技术营销策略大会”上&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”&#xff09;凭借过硬的创新研发以及产品推新实力&#xff0c;荣膺“2023年…

使用maven打生产环境可执行包

一、程序为什么要打包 程序打包的主要目的是将项目的源代码、依赖库和其他资源打包成一个可执行的文件或者部署包&#xff0c;方便程序的发布和部署。以下是一些打包程序的重要理由&#xff1a; 方便部署和分发&#xff1a;打包后的程序可以作为一个独立的实体&#xff0c;方便…

如何布局马斯克推特上喊的meme币赛道

2024年的牛市正如火如荼的开展&#xff0c;截止当下&#xff0c;比特币已经站上了7.3万美元&#xff0c;远超2021年高点的6.9万美元&#xff0c;比特币的未来是一片大海。 除了比特币的一枝独秀之外&#xff0c;meme板块可以说是市场资金最青睐的。尤其是马斯克在X分享PEPE相关…

windows 免密码ssh登录linux;linux免密码ssh登录其他linux

1、windows 免密码ssh登录linux 参考&#xff1a;https://blog.csdn.net/qq285744011/article/details/118293937 1&#xff09;windows先生成公钥私钥 ssh-keygen -t rsa -C "你的邮箱地址"生成后放在用户命令.ssh文件下 2&#xff09;把公钥复制到linux /root/…

Sibelius打谱软件2024基础版适合新手小白使用

Sibelius 2024是一款在音乐领域广受欢迎的乐谱制作软件&#xff0c;它为专业作曲家、编曲家、音乐教育家以及学生提供了一个全面、高效的创作平台。从乐谱安全的审查模式和激发灵感的循环回放&#xff0c;到更出色的性能和省时的工作流程&#xff0c;Sibelius | Ultimate&#…

U盘打不开怎么办?教你轻松解决数据恢复难题

一、遭遇困境&#xff1a;U盘打不开的焦虑 在日常工作和生活中&#xff0c;U盘扮演着不可或缺的角色&#xff0c;然而&#xff0c;有时我们会遇到U盘打不开的尴尬情况。当你满怀期待地插入U盘&#xff0c;却发现电脑无法识别&#xff0c;或者双击后弹出错误提示&#xff0c;那…