宠物管理系统:Dao层

模仿三层架构中的Dao层,是数据访问层,不同的是并非从数据库中获取数据,而是从文件中获取数据。

BaseDao:最基本的数据访问,包括数据的获取和保存。

java 复制代码
package com.wzb.dao;

import java.io.*;
import java.util.ArrayList;

public class BaseDao {

    // 保存数据到文件
    public <T> void saveToFile(String filename, ArrayList<T> list) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
            oos.writeObject(list);
            oos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 从文件加载数据
    public <T> ArrayList<T> loadFromFile(String filename) {
        ArrayList<T> list = new ArrayList<>();
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
            list = (ArrayList<T>) ois.readObject();
        } catch (FileNotFoundException e) {
            // 文件不存在,返回空列表
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return list;
    }
}

UserDao:专门用于处理用户的数据。

java 复制代码
package com.wzb.dao;

import com.wzb.bean.User;

import java.util.ArrayList;

public interface UserDao {
    public Integer getNextId();

    void insert(User user);

    ArrayList<User> getAllUser();

    public void saveUpdatedUserById(User updatedUser);

    public void deleteUserById(int id);
}
java 复制代码
package com.wzb.dao.impl;

import com.wzb.bean.User;
import com.wzb.dao.BaseDao;
import com.wzb.dao.UserDao;
import com.wzb.utils.md5.MD5Util;

import java.util.ArrayList;

public class UserDaoImpl extends BaseDao implements UserDao {

    private static final String USER_FILE = "users.dat";
    private ArrayList<User> users;

    public Integer getNextId() {
        users = loadFromFile(USER_FILE);
        if (users.isEmpty()) {
            return 0;  // 如果没有宠物,ID 从 1 开始
        } else {
            return users.get(users.size() - 1).getId() + 1;
        }
    }

    // 构造函数:初始化用户数据
    public UserDaoImpl() {
        users = loadFromFile(USER_FILE); // 每次加载最新数据
        // 如果文件为空,添加管理员账户
        if (users.isEmpty()) {
            User admin = new User(getNextId(), "wzb", MD5Util.md5("123456"), "123456", Integer.MAX_VALUE);
            users.add(admin);
            saveToFile(USER_FILE, users);  // 保存管理员账户到文件
        }
    }

    @Override
    public void insert(User user) {
        users.add(user);
        saveToFile(USER_FILE, users);  // 每次插入后保存
    }

    @Override
    public ArrayList<User> getAllUser() {
        users = loadFromFile(USER_FILE);  // 每次获取都从文件重新加载
        return users;
    }

    @Override
    public void saveUpdatedUserById(User updatedUser) {
        // 查找并更新用户
        for (int i = 0; i < users.size(); i++) {
            if (users.get(i).getId().equals(updatedUser.getId())) {
                users.set(i, updatedUser);  // 替换旧用户信息
                saveToFile(USER_FILE, users);  // 保存更新后的数据
                return;
            }
        }
    }

    @Override
    public void deleteUserById(int id) {
        // 删除指定 ID 的用户
        users.removeIf(user -> user.getId() == id);
        saveToFile(USER_FILE, users);  // 删除后立刻保存
    }
}

PetDao:专门用于宠物数据的处理。

java 复制代码
package com.wzb.dao;

import com.wzb.bean.Pet;

import java.util.ArrayList;

public interface PetDao {
    int getNextId();

    void insert(Pet pet);

    ArrayList<Pet> getAllPet();

    public void saveUpdatedPetById(Pet updatedPet);

    public boolean deletePetById(int id);
}
java 复制代码
package com.wzb.dao.impl;

import com.wzb.bean.Pet;
import com.wzb.dao.BaseDao;
import com.wzb.dao.PetDao;

import java.util.ArrayList;
import java.util.Collections;

public class PetDaoImpl extends BaseDao implements PetDao {
    private static final String PET_FILE = "pets.dat";
    private ArrayList<Pet> pets;

    public int getNextId() {
        pets = loadFromFile(PET_FILE);
        if (pets.isEmpty()) {
            return 0;
        } else {
            return pets.get(pets.size() - 1).getId() + 1;
        }
    }

    public PetDaoImpl() {
        pets = loadFromFile(PET_FILE); // 每次加载最新数据
        // 如果文件为空,添加一猫一狗
        if (pets.isEmpty()) {
            Pet king = new Pet(0, "wzb-pet", 10, 70.0, "food", Integer.MAX_VALUE, 1);
            Pet dog = new Pet(1, "旺财", 2, 20.0, "bone", 500, 1);
            Pet cat = new Pet(2, "哈基米", 1, 15.0, "fish", 500, 2);
            Collections.addAll(pets, king, dog, cat);
            saveToFile(PET_FILE, pets);
        }
    }

    @Override
    public void insert(Pet pet) {
        pets.add(pet);
        saveToFile(PET_FILE, pets);  // 每次插入后保存
    }

    @Override
    public ArrayList<Pet> getAllPet() {
        pets = loadFromFile(PET_FILE);  // 每次获取都从文件重新加载
        return pets;
    }

    @Override
    public void saveUpdatedPetById(Pet updatedPet) {
        // 查找并更新用户
        for (int i = 0; i < pets.size(); i++) {
            if (pets.get(i).getId().equals(updatedPet.getId())) {
                pets.set(i, updatedPet);  // 替换旧用户信息
                saveToFile(PET_FILE, pets);  // 保存更新后的数据
                return;
            }
        }
    }

    @Override
    public boolean deletePetById(int id) {
        // 删除指定 ID 的用户
        pets.removeIf(pet -> pet.getId() == id);
        saveToFile(PET_FILE, pets);  // 删除后立刻保存
        return true;
    }
}
相关推荐
二月夜30 分钟前
剖析Java正则表达式回溯问题
java·正则表达式
xuhaoyu_cpp_java1 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
想吃火锅10051 小时前
【leetcode】405.数字转换为十六进制数js
开发语言·javascript·ecmascript
程序员二叉1 小时前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
专注VB编程开发20年2 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
cfm_29142 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始2 小时前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
~小先生~2 小时前
Python从入门到放弃(一)
开发语言·python
许彰午2 小时前
17_synchronized关键字深度解析
java·开发语言
z落落2 小时前
C# 泛型接口和泛型类+泛型约束
开发语言·c#