JEE 设计模式

news2025/1/10 12:11:07

Java 数据访问对象模式

Java设计模式 - 数据访问对象模式

数据访问对象模式或DAO模式将数据访问API与高级业务服务分离。

DAO模式通常具有以下接口和类。

  • 数据访问对象接口定义模型对象的标准操作。

  • 数据访问对象类实现以上接口。可能有多个实现,例如,一个用于数据库,一个用于文件。

  • 模型对象简单的POJO包含get/set方法来存储数据。

例子

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

class Employee {
  private String name;
  private int id;

  Employee(String name, int id) {
    this.name = name;
    this.id = id;
  }

  public String getName() {
    return name;
  }

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

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }
}

interface EmployeeDao {
  public List<Employee> getAll();

  public Employee get(int id);

  public void updateStudent(Employee student);

  public void delete(Employee student);
}

class EmployeeDaoImpl implements EmployeeDao {
  List<Employee> employeeList;

  public EmployeeDaoImpl() {
    employeeList = new ArrayList<Employee>();
    Employee emp1 = new Employee("Jack", 0);
    Employee emp2 = new Employee("Tom", 1);
    employeeList.add(emp1);
    employeeList.add(emp2);
  }

  @Override
  public void delete(Employee student) {
    employeeList.remove(student.getId());
    System.out.println("Employee: No " + student.getId()
        + ", deleted from database");
  }

  @Override
  public List<Employee> getAll() {
    return employeeList;
  }

  @Override
  public Employee get(int rollNo) {
    return employeeList.get(rollNo);
  }

  @Override
  public void updateStudent(Employee emp) {
    employeeList.get(emp.getId()).setName(emp.getName());
    System.out.println("Emp:No " + emp.getId()
        + ", updated in the database");
  }
}

public class Main {
  public static void main(String[] args) {
    EmployeeDao empDao = new EmployeeDaoImpl();
    for (Employee emp : empDao.getAll()) {
      System.out.println("Emp: [No : " + emp.getId() + ", Name : "
          + emp.getName() + " ]");
    }
    Employee emp = empDao.getAll().get(0);
    emp.setName("Jane");
    empDao.updateStudent(emp);

    empDao.get(0);
    System.out.println("Emp: [No : " + emp.getId() + ", Name : "
        + emp.getName() + " ]");
  }
}

上面的代码生成以下结果。

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

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

相关文章

java重点学习-线程池

十 线程池 10.1 说一下线程池的核心参数&#xff0c;线程池的执行原理 为什么使用线程池 创建线程占用内存空间&#xff0c;每次创建的话会浪费内存cpu有限&#xff0c;大量线程会导致cpu切换 10.2 线程池中有哪些常见的阻塞队列 workQueue-当没有空闲核心线程时&#xff0c;新…

[产品管理-14]:NPDP新产品开发 - 12 - 产品创新流程 - 创新章程与通用流程

目录 前言&#xff1a; 一、什 么 是 产 品 创 新 流 程 &#xff1f; 1.1 概述 1.2 管 理 创 新 产 品 失 败 的 2个风 险 &#xff1a; 不 确 定 性 和 成 本 1、不确定性风险 2、成本风险 1.3 重点关注创新产品的起点的正确性&#xff1a;正确的事 二、产品创造章程…

Day10-作业讲解,Ingress规则编写及Jenkins集成K8S项目实战案例

Day10-作业讲解&#xff0c;Ingress规则编写及Jenkins集成K8S项目实战案例 1、作业:1.1 作业分析:1.2 复刻镜像1.3 将游戏镜像上K8S集群1.4 helm部署服务1.5 ingress规则编写 2、项目1-jenkins和k8s集成2.1 Jenkins实现k8s持续集成项目流程图解2.2 Jenkins集成K8S-将代码推送到…

Cmake之3.27版本重要特性及用法实例(二十二)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

解锁NXP i.MX93 DDR精准校正,极限压力测试

在前一篇关于NXP i.MX93开板流程的文章中&#xff0c;我们已经详细说明了目标板&#xff08;Target Board&#xff09;在打件完成后需要注意的事项。接下来的步骤是进行DRAM的时序校正及压力测试。 在i.MX8及之前的系列中&#xff0c; DDR压力测试是使用DDR Stress Test Tool&…

Python绘制论文图

Python Graph Gallery Python Boxplot Gallery | Dozens of examples with code

记录一下,Vcenter清理/storage/archive空间

一、根因 vpostgres&#xff1a;这个目录可能包含与 vCenter Server 使用的 PostgreSQL 数据库相关的归档文件过多&#xff0c;导致空间被占用。 二、处理过程 1、SSH登陆到Vcenter. 2、df -Th **图中可以看到 /storage/archive 使用占比很高。 /storage/archive 目录通常用…

光耦选型 | 光伏逆变器使用光耦型号推荐——KL101X系列

光伏逆变器是太阳能光伏发电系统中的关键设备之一&#xff0c;主要用于将光伏电池板产生的直流电转换为交流电&#xff0c;以供电网使用或者直接驱动交流电负载。在光伏逆变器中&#xff0c;光耦扮演着重要的角色&#xff0c;主要应用在以下几个方面&#xff1a; 隔离保护&…

前端基本功——面试必问系列(1):都2024了,还没吃透Promise?一文搞懂

写在前面&#xff1a; 大家好&#xff0c;我是山里看瓜&#xff0c;该系列文章是为了帮助大家不管面试还是开发对前端的一些基本但是很重要的知识点认识更加深入和全面。 想写这个系列文章的初衷是&#xff1a;我发现前端的很多基本知识&#xff0c;使用起来很简单&#xff0…

等保测评后:企业如何持续优化信息安全

通过信息安全等级保护&#xff08;等保&#xff09;测评&#xff0c;标志着企业达到了国家规定的安全标准&#xff0c;但这并非终点。在等保测评后&#xff0c;企业需要持续优化信息安全&#xff0c;保持和提升信息安全的防护水平&#xff0c;确保业务的稳定运行和数据的安全。…

一文搞定裸纤、以太网、SDH、MSTP、PTN、波分、OTN的区别!!!

目录 一、前奏 二、SDH 三、MSTP 四、波分 五、OTN 六、以太网 七、PTN 八、裸纤 一、前奏 SDH、WDM、OTN、Ethernet等到底有啥区别&#xff0c;接下来会按照自己的思路梳理一遍。 在介绍之前我觉得有几个点是需要记在脑海里带着这些词条去阅读的&#xff0c;列举如下…

【图像识别】摄像头捕捉运动到静止视频帧(免费源码分享)

【图像识别】摄像头捕捉运动到静止视频帧(免费源码分享) 1. 本文摘要 本文实现了一个OpenCV和PyQT5 结合的摄像头视频捕捉和运动检测线程&#xff0c;实现了一款界面软件用于功能演示。主要使用帧差法实现&#xff0c;摄像头捕捉运动到静止的图片&#xff0c;捕捉到的图片可用…

JavaScript高级——变量提升和函数提升

1、变量声明提升 —— 通过 var 定义&#xff08;声明&#xff09;的变量&#xff0c;在定义语句之前就可以访问到 —— 值&#xff1a;undefined 2、函数声明提升 —— 通过 function 声明的函数&#xff0c;在之前就可以直接调用 —— 值&#xff1a;函数定义&#xff0…

在 Mac 上安装虚拟机怎么样,安装虚拟机与直接安装 Windows 系统有区别吗?

随着跨系统操作的不断发展&#xff0c;虚拟机技术在生产力领域扮演着越来越重要的角色。Mac作为一款主流的操作系统&#xff0c;也有着运行虚拟机的能力。接下来给大家介绍Mac装虚拟机好不好&#xff0c;Mac装虚拟机和装Windows系统一样吗的具体内容。 Mac装虚拟机好不好 Mac…

java程序员入行科目一之CRUD轻松入门教程(四)

三层架构 所谓的三层&#xff1a; DAO层 也可以叫做Mapper或者是Repository层&#xff0c;名字无所谓&#xff0c;但是要清楚这层就是专门和数据库做交互的&#xff0c;一般指的是关系型数据库 Service层 数据的加工处理&#xff0c;调动DAO层去完成一些具体的业务实现&#xf…

【浅谈】单片机基本概念

这里写目录标题 一 引言二 存储器1 ROM&#xff08;read only memory&#xff09;2 RAM (random access memory)3 累加器&#xff08;ACC : accumulator&#xff09; 三 I/O口四 堆栈五 定时/计数器六 中断1、一些中断词汇&#xff1a;2 中断的响应过程&#xff1a;3 作用&…

提示词工程与 AI 使用的紧密关系

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;特别是生成式模型&#xff08;如 GPT 系列模型&#xff09;的广泛应用&#xff0c;提示词工程&#xff08;Prompt Engineering&#xff09;成为了 AI 使用中至关重要的环节。提示词工程是指通过精心设计和优化…

踩最深的坑,教会自己出海的前端选型

目录 引言 1. 前端 1.1 Next.js 1.2 Remix 1.3 Nuxt 2. 样式与UI库 2.1 Tailwind CSS 2.2 NextUI 2.3 Framer Motion 2.4 Shadcn/UI 引言 在经历了刻骨铭心的合伙创业经历后&#xff0c;我意识到是时候该独立出海了。 捡起早已深埋在心里的创业想法&#xff0c;开始…

Unity2D游戏入门

1.导入资源 在Assets下新建文件夹 Res&#xff0c;将相关素材拖入其中&#xff08;本文中的素材仅为学习使用&#xff09;。 2.菜单 设置页面大小 选择素材&#xff0c;查看素材大小。 设置游戏视图大小。 调整工作布局方便查看 记得给场景改名为MenuScene&#xff0c;与其他…