数据访问对象模式
基本介绍
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");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战