数据访问对象模式

基本介绍

1.DAO(Data Access Object)模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来

2.角色

(1)Data Access Object Interface:数据访问对象接口,该接口定义了在一个模型对象上要执行的标准操作

(2)Data Access Object concrete class:数据访问对象实体类,该类实现了上述的接口,负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制

(3)Model Object/Value Object:模型对象 / 数值对象,该对象是普通 JavaBeans,包含了 get / set 方法来存储通过使用 DAO 类检索到的数据

 

代码示例

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

public class DataAccessObject {//客户端

    public static void main(String[] args) {
        ModelObjectDAO modelObjectDAO = new ModelObjectDAO();
        print(modelObjectDAO);
        modelObjectDAO.updateModelObject(0, "King");
        print(modelObjectDAO);
        System.out.println(modelObjectDAO.getModelObject(0));
        modelObjectDAO.deleteModelObject(0);
        print(modelObjectDAO);
    }

    public static void print(ModelObjectDAO modelObjectDAO) {
        System.out.println("遍历输出所有数据对象");
        for (ModelObject modelObject : modelObjectDAO.getAllModelObjects()) {
            System.out.println(modelObject.getNo() + " " + modelObject.getName());
        }
    }
}

class ModelObject {//模型对象
    private String name;
    private int no;

    public ModelObject(String name, int no) {
        this.name = name;
        this.no = no;
    }

    public String getName() {
        return name;
    }

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

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    @Override
    public String toString() {
        return "ModelObject{" +
                "name='" + name + '\'' +
                ", no=" + no +
                '}';
    }
}

interface DAO {//数据访问对象接口

    List<ModelObject> getAllModelObjects();//获取所有模型对象

    ModelObject getModelObject(int no);//获取指定数据对象

    void updateModelObject(int no, String name);//更新数据对象

    void deleteModelObject(int no);//删除数据对象
}

class ModelObjectDAO implements DAO {//数据访问对象实体类
    List<ModelObject> ModelObjects;//List模拟数据库

    public ModelObjectDAO() {//初始化数据库
        ModelObjects = new ArrayList<>();
        ModelObject ModelObject1 = new ModelObject("Robert", 0);
        ModelObject ModelObject2 = new ModelObject("John", 1);
        ModelObjects.add(ModelObject1);
        ModelObjects.add(ModelObject2);
    }

    @Override
    public void deleteModelObject(int no) {
        ModelObjects.remove(no);
        System.out.println("ModelObject:No " + no + " deleted from database");
    }

    @Override
    public List<ModelObject> getAllModelObjects() {
        return ModelObjects;
    }

    @Override
    public ModelObject getModelObject(int no) {
        return ModelObjects.get(no);
    }

    @Override
    public void updateModelObject(int no, String name) {
        for (ModelObject target : ModelObjects) {
            if (target.getNo() == no) {
                target.setName(name);
                break;
            }
        }
        System.out.println("ModelObject:No " + no + " updated in the database");
    }
}

 

posted @   半条咸鱼  阅读(141)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示