宠物管理系统: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;
    }
}
相关推荐
青云交6 分钟前
Java 大视界 -- 基于 Java 的大数据分布式存储在工业互联网海量设备数据长期存储中的应用优化(248)
java·大数据·工业互联网·分布式存储·冷热数据管理·hbase 优化·kudu 应用
纸包鱼最好吃16 分钟前
java基础-package关键字、MVC、import关键字
java·开发语言·mvc
njsgcs16 分钟前
opencascade.js stp vite webpack 调试笔记
开发语言·前端·javascript
唐山柳林19 分钟前
城市生命线综合管控系统解决方案-守护城市生命线安全
java·安全·servlet
PgSheep22 分钟前
Spring Cloud Gateway 聚合 Swagger 文档:一站式API管理解决方案
java·开发语言
林鸿群25 分钟前
go语言实现IP归属地查询
开发语言·golang·ip归属地
学地理的小胖砸32 分钟前
【Python 异常处理】
开发语言·python
蒂法就是我1 小时前
详细说说Spring的IOC机制
java·后端·spring
程序员拂雨1 小时前
Java知识框架
java·开发语言
秋野酱2 小时前
基于javaweb的SpringBoot高校图书馆座位预约系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端