我是靠谱客的博主 可耐画笔,最近开发中收集的这篇文章主要介绍学生管理系统分层设计结构--20190922班级表设计学生表设计结构设计,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

班级表设计

学生表设计

结构设计

bean实体层

dao数据库操作层

FuncServeInte接口

StudentServiceInte接口

ClassesDaoInte接口

service业务操作层

FuncServeInte接口

StudentServiceInte接口

ClassesServiceInte接口

servlet控制中转层


班级表设计

因为学生与班级的关系是n:1,也就是说,学生表中需要有班级外键,所以需要先设计班级表。

在表中,id是自动递增的主键;name设置成unique唯一索引。

学生表设计

学生表中需要有外键class_id。

在表中,id是自动递增的主键;class_id是外键。

结构设计

采取的是分层设计,将dao层(数据库操作层)、service层(业务操作层)、servlet层(控制中转层)作为三层结构,除此之外,还有bean层(实体对象层)、util层(工具类层)、test层(测试功能层)。

下面来思考一下如何设计结构:

bean实体层

两个实体,Student(学生实体)和Classes(班级实体)

每个实体需要实现Serializable接口(序列化接口)。

那么目前就可以写出:

public class Student implements Serializable{ ... }

public class Classes implements Serializable{ ... }

但是之后的设计中还会在此层中添加一个Bean接口,这是多态的一种小的运用。

dao数据库操作层

学生管理系统,需要连接数据库,连接之后进行SQL操作来实现想要实现的功能,关于数据库的连接可以放在一个专门的工具类中实现,可以稍微提升代码的灵活度(如果要换数据库,只需要改变工具类即可,而不用更改dao层中的代码。

所以我在utils层中第一个添加的工具类是JDBCUtils类。

下面要根据功能来设计dao层中的接口以及规范的方法。

管理学生的基础功能包含有:添加学生、学生列表、删除学生、修改学生、按条件查询学生;

管理班级的基础功能也类似:添加班级、班级列表、删除班级、修改班级。

可以很容易发现,其实这些的功能都是很相似的,那么就意味着可以使用接口来规定某些共同的方法。

所以我定义了一个通用功能接口:

FuncServeInte接口

/**
 * 通用业务功能接口
 * @author newre
 */
public interface FuncServeInte {
    /**
     * 查找表中所有实体对象
     * @return 实体对象列表
     */
    List<? extends Bean> queryAll();

    /**
     * 添加实体对象
     * @param bean 实体对象
     * @return 是否添加成功
     */
    Boolean add(Bean bean);

    /**
     * 删除表中所有数据
     * @return 是否删除成功
     */
    Integer deleteAll();

    /**
     * 按筛选条件查找实体列表
     * @param filter 筛选条件
     * @return 实体列表
     */
    List<? extends Bean> queryFilter(String... filter);

    /**
     * 分页,返回此页的实体列表
     *
     * @param offset   分页偏移量,从第几条数据开始
     * @param pageSize 一页数据的最大数量
     * @return 实体列表
     */
    List<? extends Bean> querySplit(int offset, int pageSize);

    /**
     * 数据的个数
     *
     * @return 数据个数
     */
    Integer count();
}

可以看到,这里面悄然出现了Bean这个接口,这也正是我需要在bean层中添加Bean接口的原因——统一管理实体对象。

至于涉及到具体属性的方法,并没有写在这里,尽可能保护通用接口的通用性。

然后又写了两个具体的dao接口:

StudentServiceInte接口

/**
 * 学生表操作的相关SQL语句
 * @author newre
 */
public interface StudentDaoInte extends FuncDaoInte {
    /**
     * 查询指定id的学生信息
     * @param id 学生id
     * @return 学生实体
     */
    Student queryById(Integer id);

    /**
     * 查询某班所有学生
     * @param class_id 班级id
     * @return 学生实体列表
     */
    List<Student> queryByClassId(Integer class_id);

    /**
     * 通过名字查询学生(可能不止一个)
     * @param name 学生姓名
     * @return 学生实体列表
     */
    List<Student> queryByName(String name);

    /**
     * 删除指定id的学生
     * @param id 学生id
     * @return 发生变更的行数
     */
    Integer deleteById(Integer id);

    /**
     * 删除某班所有学生
     * @param class_id 班级id
     * @return 发生变更的行数
     */
    Integer deleteByClass(Integer class_id);

    /**
     * 修改指定id的学生信息
     * @param id 学生id
     * @param student 更改后的学生实体
     * @return 发生变更的行数
     */
    Integer updateById(Integer id, Student student);

    /**
     * 分页,返回此页的实体列表
     *
     * @param currentPage   当前页码
     * @param pageSize 一页数据的最大数量
     * @return 实体列表
     */
    List<? extends Bean> querySplit(int currentPage, int pageSize);

    /**
     * 数据的个数
     *
     * @return 数据个数
     */
    Integer count();
}

ClassesDaoInte接口

/**
 * 班级表操作的相关SQL语句
 * @author newre
 */
public interface ClassesDaoInte extends FuncDaoInte {
    /**
     * 查询指定id的班级信息
     * @param id 班级id
     * @return 班级实体
     */
    Classes queryById(Integer id);

    /**
     * 查询指定班级名的班级信息
     * @param name 班级名字
     * @return 班级实体
     */
    Classes queryByName(String name);

    /**
     * 查询指定专业的班级信息
     * @param major 专业名
     * @return 班级实体列表
     */
    List<Classes> queryByMajor(String major);

    /**
     * 查询指定id的班级人数
     * @param id 班级id
     * @return 班级人数
     */
    Integer getNum(Integer id);

    /**
     * 删除指定id的班级
     * @param id 班级id
     * @return 发生变更的行数
     */
    Integer deleteById(Integer id);

    /**
     * 删除指定名字的班级
     * @param name 班级名字
     * @return 发生变更的行数
     */
    Integer deleteByName(String name);

    /**
     * 修改指定id的班级信息
     * @param id 班级id
     * @param clz 更改后的班级实体
     * @return 发生变更的行数
     */
    Integer updateById(Integer id, Classes clz);
}

service业务操作层

业务操作层负责的是调用dao层的东西(可以一次调用多个),也和dao层一样的思路。

FuncServeInte接口

/**
 * 通用业务功能接口
 * @author newre
 */
public interface FuncServeInte {
    /**
     * 查找表中所有实体对象
     * @return 实体对象列表
     */
    List<? extends Bean> queryAll();

    /**
     * 添加实体对象
     * @param bean 实体对象
     * @return 是否添加成功
     */
    Boolean add(Bean bean);

    /**
     * 删除表中所有数据
     * @return 是否删除成功
     */
    Integer deleteAll();

    /**
     * 按筛选条件查找实体列表
     * @param filter 筛选条件
     * @return 实体列表
     */
    List<? extends Bean> queryFilter(String... filter);
}

StudentServiceInte接口

/**
 * 学生操作业务接口
 * @author newre
 */
public interface StudentServiceInte extends FuncServeInte {
    /**
     * 查询指定id的学生信息
     * @param id 学生id
     * @return 学生实体
     */
    Student queryById(Integer id);

    /**
     * 查询某班所有学生
     * @param class_id 班级id
     * @return 学生实体列表
     */
    List<Student> queryByClassId(Integer class_id);

    /**
     * 删除指定id的学生
     * @param id 学生id
     * @return 是否删除成功
     */
    Boolean deleteById(Integer id);

    /**
     * 修改指定id的学生信息
     * @param id 学生id
     * @param student 更改后的学生实体
     * @return 是否修改成功
     */
    Boolean updateById(Integer id, Student student);
}

ClassesServiceInte接口

/**
 * 学生操作业务接口
 *
 * @author newre
 */
public interface ClassesServiceInte extends FuncServeInte {
    /**
     * 查询指定id的班级信息
     * @param id 班级id
     * @return 班级实体
     */
    Classes queryById(Integer id);

    /**
     * 查询指定班级名的班级信息
     * @param name 班级名
     * @return 班级实体
     */
    Classes queryByName(String name);

    /**
     * 修改指定id的班级信息
     * @param id 班级id
     * @param clz 更改后的班级实体
     * @return 是否修改成功
     */
    Boolean updateById(Integer id, Classes clz);

    Boolean deleteById(Integer id);
}

servlet控制中转层

我的servlet层部分的代码很混乱,基本上是都堆在了一起,相同类型的代码写了很多,需要进一步封装类和封装方法。

最后

以上就是可耐画笔为你收集整理的学生管理系统分层设计结构--20190922班级表设计学生表设计结构设计的全部内容,希望文章能够帮你解决学生管理系统分层设计结构--20190922班级表设计学生表设计结构设计所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部