学生宿舍管理系统框架代码解读
- 1、pojo层(实体层)
- 2、filter层(过滤层)
- 3、dao层(数据访问)
-
- 3.1 IUserDao(用户数据访问对象(DAO)的基本操作)
- 3.2 IStuDorDao(定义与学生所住宿舍(StuDor)相关的数据访问操作)
- 3.3 IStudentDao(定义了对学生(Student)信息进行数据库操作的接口)
- 3.4 INoticeDao(公告(Notice)相关的数据访问对象(DAO))
- 3.5 IManagerDao(定义与管理人员|宿管(Manager)相关的数据库操作)
- 3.6 IDormitoryDao(定义了对宿舍(Dormitory)实体的数据库操作)
- 3.7 IBuildingManagerDao(宿舍楼管理员(BuildingManager)进行数据库操作的方法)
- 3.8 IBuildingDao(定义对建筑物(Building)对象进行数据库操作的方法)
- 4、Service层(业务逻辑或者服务层)
- 5、Utli(工具层)
- 6、Controller(控制层)
-
- 6.1 VerifyCodeServlet(生成验证码)
- 6.2 UserServlet(操作员)
-
- 6.2.1 service(据请求中的 `method` 参数的不同值来调用不同的处理方法)
- 6.2.2 changePassword(用户修改密码的请求)
- 6.2.3 register(处理用户注册请求)
- 6.2.4 logout(处理用户注销操作)
- 6.2.5 login(用于处理用户登录请求,从请求中获取用户名、密码和验证码,并进行相应的验证和处理)
- 6.2.6 selectByPage(处理用户分页查询请求)
- 6.2.7 deleteById(处理根据用户ID删除用户的请求)
- 6.2.8 deleteAll(处理用户的批量删除操作)
- 6.2.9 updateStatus(处理更新用户状态的请求)
- 6.3 UploadServlet(处理文件上传的请求)
- 6.4 StuDorServlet(学生所住宿舍)
- 6.5 StudentServlet(学生)
-
- 6.5.1 service(根据请求中的 "method" 参数的不同值执行不同的操作)
- 6.5.2 selectNotCheckIn(处理查询未入住学生的请求)
- 6.5.3 selectHasCheckIn(处理学生信息查询请求)
- 6.5.4 queryGender(处理查询学生性别的请求)
- 6.5.5 update(处理学生信息的更新操作)
- 6.5.6 getStudentUpdatePage(获取学生更新页面的请求)
- 6.5.7 add(处理添加学生信息的HTTP请求)
- 6.5.8 deleteById(处理删除学生的请求)
- 6.5.9 deleteAll(处理批量删除学生的请求)
- 6.5.10 selectByPage(处理分页查询学生信息的请求)
- 6.6 NoticeServlet(公告)
- 6.7 ManagerServlet (管理员|宿管)
-
- 6.7.1 service(根据不同的方法调用相应的处理方法)
- 6.7.2 selectAll(查询所有管理员信息的请求操作)
- 6.7.3 queryGender(处理查询性别信息的请求操作)
- 6.7.4 update(处理对管理员信息进行更新的请求操作)
- 6.7.5 getManagerUpdatePage(获取管理员更新页面的请求操作)
- 6.7.6 add(处理添加管理员的请求操作)
- 6.7.7 deleteById(根据管理员ID删除管理员的请求操作)
- 6.7.8 deleteAll(处理删除所有选定管理员的请求操作)
- 6.7.9 selectByPage(处理分页查询管理员的请求操作)
- 6.8 DormitoryServlet(宿舍)
- 6.9 BuildingServlet(公寓楼)
-
- 6.9.1 service(根据传入的 `method` 参数来决定调用不同的方法来处理不同的请求操作)
- 6.9.2 selectAll(处理获取所有楼栋信息的请求操作)
- 6.9.3 queryStudentNum(查询学生数量的请求操作)
- 6.9.4 queryAllocation(处理查询宿舍楼栋分配情况的请求操作)
- 6.9.5 update(处理更新楼栋信息的请求操作)
- 6.9.6 getBuildingUpdatePage(获取公寓楼更新页面的请求操作)
- 6.9.7 add(处理添加公寓楼的请求操作)
- 6.9.8 deleteById(处理根据建筑物ID删除建筑物的请求操作)
- 6.9.9 deleteAll(处理删除所有选定建筑物的请求操作)
- 6.9.10 selectByPage(处理分页查询楼栋的请求操作)
- 6.10 BuildingManagerServlet(宿舍管理员)
- 7、注解
- 8、JSON数据格式
1、pojo层(实体层)
POJO = plain ordinary Java object = 普通Java对象
POJO:简单无规则Java对象,只有属性+get+set方法
存放实体的类,类中定义了多个类属性,并与数据库表的字段保持一致,一张表对应一个实体类。
主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。
如果想要对数据库进行一些操作(比如说读取)的话,就要先写实体层
1.1 Dormitory、Student实体类
1.1.1 Dormitory
这段代码定义了一个 Dormitory
(宿舍)类,具有以下属性:
id
:表示宿舍的唯一标识符。tag
:表示宿舍的标签。contain
:表示宿舍可容纳的人数。note
:表示宿舍的备注信息。buildingId
:表示宿舍所属的楼栋的唯一标识符。buildingTag
:表示宿舍所属的楼栋的标签。buildingGender
:表示宿舍所属的楼栋的性别。buildingNote
:表示宿舍所属的楼栋的备注信息。
该类提供了多个构造函数,允许在创建对象时传入不同的参数。使用 @Data
注解可以自动生成所有属性的 getter
和 setter
方法,以及 toString
、equals
和 hashCode
方法。@NoArgsConstructor
注解生成一个无参的构造函数,@AllArgsConstructor
注解生成一个包含所有属性的构造函数。
1.1.2 Student
这段代码定义了一个 Student
(学生)类,具有以下属性:
id
:表示学生的唯一标识符。name
:表示学生的姓名。age
:表示学生的年龄。major
:表示学生的专业。class_
:表示学生的班级。phone
:表示学生的电话号码。gender
:表示学生的性别。
此外,还有以下与宿舍相关的属性:
dorId
:表示学生所居住的宿舍的唯一标识符。dorTag
:表示学生所居住的宿舍的标签。buildingId
:表示学生所居住的宿舍所属的楼栋的唯一标识符。buildingTag
:表示学生所居住的宿舍所属的楼栋的标签。
该类提供了多个构造函数,允许在创建对象时传入不同的参数。使用 @Data
注解可以自动生成所有属性的 getter
和 setter
方法,以及 toString
、equals
和 hashCode
方法。@NoArgsConstructor
注解生成一个无参的构造函数,@AllArgsConstructor
注解生成一个包含所有属性的构造函数。
1.2query包
存放查询各种信息的类
例如:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserQuery {
private Integer page;
private Integer limit;
private String username;
@Override
public String toString() {
return "UserQuery{" +
"page=" + page +
", limit=" + limit +
", name='" + username + '\'' +
'}';
}
}
说明:
@Data:注解在类上;提供类所有属性的 getting 和 setting 方法,省去了在pojo层实体类中需要实现的get、set,此外还提供了equals、canEqual、hashCode、toString 方法。
@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法。
@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法。
1.private Integer page;为页数。
2.private Integer limit;为每页最多显示结果的数量,如每页显示20个学生信息。
3.private String username;为管理员需要查询(搜索)的属性,如搜索学生姓名。
此层其他类与上述大同小异
2、filter层(过滤层)
用来做一些拦截的任务, 在Servlet接受请求之前,做一些事情,如果不满足限定,可以拒绝进入Servlet
2.1 EncodingFilter类
EncodingFilter过滤器
,它使用@WebFilter注解来指定过滤器的名称和URL模式。具体解释如下:
@WebFilter(filterName = "encoding", urlPatterns = "/*")
:这行代码表明这是一个过滤器,并且它的名字是"encoding"。它将应用于所有的URL模式,因为"/*"匹配所有的URL路径。
public void init(FilterConfig filterConfig) throws ServletException
:这是过滤器的初始化方法,它在过滤器被创建时被调用。在这个过滤器中,这个方法没有实际操作。
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
:这个方法定义了过滤器的主要逻辑。它首先将ServletRequest强制转换为HttpServletRequest类型,并将请求的字符编码设置为UTF-8,以确保请求的参数和数据以UTF-8编码进行处理。
HttpSession session = request.getSession();
:这行代码获取当前请求的HttpSession对象,以便在需要时对会话进行操作。但是,在当前代码中,这个会话对象并没有被使用。
filterChain.doFilter(servletRequest, servletResponse);
:这行代码表示将请求和响应传递给过滤器链中的下一个过滤器。这是确保过滤器链中的下一个过滤器或最终的Servlet能够接收请求并进行处理。
public void destroy()
:这个方法在过滤器被销毁时被调用。在这个过滤器中,这个方法也没有实际操作。
总体来说,这个过滤器的主要作用是确保所有的HTTP请求的字符编码都被设置为UTF-8,以防止乱码问题。此外,它还可以获取当前请求的会话对象,但是在代码中并没有对会话进行任何实际操作。
2.2 LoginFilter类
基于Java Servlet的过滤器(Filter),用于实现用户登录验证功能。下面是对代码的功能和作用的解释:
@WebFilter
注解用于声明该类是一个过滤器,并指定了过滤器的名称为 “login”,以及需要过滤的 URL 模式为 “/*”,即拦截所有的请求。
doFilter
方法是过滤器的核心方法,用于实现过滤逻辑。在这个方法中,首先通过强制类型转换将servletRequest
和servletResponse
转换为HttpServletRequest
和HttpServletResponse
,便于操作和获取请求信息。
- 首先,代码检查了请求的
servletPath
和method
,以确定请求的类型和路径。
- 如果请求路径是特定的静态资源文件(如图片、字体、JavaScript 文件、CSS 文件)或者是一些特定的页面(如登录页面、注册页面、失败页面),或者是请求验证验证码的路径,或者是用户请求的登录或注册操作,那么直接放行该请求。
- 否则,代码尝试从当前会话(session)中获取已经登录的用户对象。如果用户对象为空(即用户未登录),则重定向到登录页面。这样可以确保未经过身份验证的用户无法访问受限资源。
- 如果用户已登录或者是上述特殊情况,那么请求将继续传递到处理链中的下一个过滤器(如果有的话),或者传递给相应的 Servlet 处理。
总的来说,这段代码实现了一个简单的登录过滤器,用于限制未登录用户对特定页面或资源的访问,并确保用户在访问受限资源之前进行了登录操作。
3、dao层(数据访问)
把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间。
Dao是数据访问层,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。
Dao层Impl实现方法
3.1 IUserDao(用户数据访问对象(DAO)的基本操作)
这段代码是一个 Java 接口,定义了用户数据访问对象(DAO)的基本操作。下面是对代码的解释:
User login(String name, String password)
: 该方法用于根据用户名和密码进行用户登录验证。它接受用户名和密码作为参数,并返回一个用户对象,如果验证成功则返回用户对象,否则返回 null。
int register(String name,String password,String nickname)
: 这个方法用于注册新用户。它接受用户名、密码和昵称作为参数,并返回一个整数值来表示注册操作的结果,通常是表示注册是否成功的标志。
List<User> selectByPage(UserQuery userQuery)
: 这个方法用于根据特定的查询条件查询用户列表,并返回一个用户对象的列表。参数UserQuery
是一个查询对象,可能包含一些查询条件,如用户名、状态等。
Integer selectTotalCount(UserQuery userQuery)
: 这个方法用于根据特定的查询条件查询满足条件的用户总数。参数UserQuery
是一个查询对象,用于指定查询条件。
int deleteById(int id)
: 该方法用于根据用户ID删除特定的用户。它接受用户ID作为参数,并返回一个整数值来表示删除操作的结果,通常是表示删除是否成功的标志。
int updateStatus(int id, int status)
: 这个方法用于更新用户的状态。它接受用户ID和状态作为参数,并返回一个整数值来表示更新操作的结果,通常是表示更新是否成功的标志。
int changePassword(int userId,String oldPassword,String newPassword)
: 该方法用于修改用户的密码。它接受用户ID、旧密码和新密码作为参数,并返回一个整数值来表示修改密码操作的结果,通常是表示修改是否成功的标志。
总的来说,这个接口定义了用户数据访问对象的基本操作,包括登录验证、注册、查询、删除、更新用户状态以及修改密码等功能。具体的实现将在实现该接口的类中完成。
3.2 IStuDorDao(定义与学生所住宿舍(StuDor)相关的数据访问操作)
这段代码是一个接口(Interface),用于定义与学生宿舍(StuDor)相关的数据访问操作。下面是对代码的解释:
package com.xn.dormitory.dao;
:指定了代码所在的包名为 com.xn.dormitory.dao。
import com.xn.dormitory.pojo.StuDor;
:导入了 com.xn.dormitory.pojo 包中的 StuDor 类,用于在接口中定义与 StuDor 类相关的方法。
public interface IStuDorDao
:定义了一个公共接口 IStuDorDao。
int add(StuDor stuDor);
:声明了一个名为 add 的抽象方法,该方法接受一个 StuDor 对象作为参数,并返回一个整型值。
int delete(StuDor stuDor);
:声明了一个名为 delete 的抽象方法,该方法接受一个 StuDor 对象作为参数,并返回一个整型值。
int change(StuDor stuDor);
:声明了一个名为 change 的抽象方法,该方法接受一个 StuDor 对象作为参数,并返回一个整型值。
这个接口提供了对学生宿舍信息进行增加、删除和修改的操作,具体的实现需要在接口的实现类中完成。根据实际情况,可以创建一个实现了该接口的类,并提供具体的数据库操作来完成对学生宿舍信息的增删改操作。
3.3 IStudentDao(定义了对学生(Student)信息进行数据库操作的接口)
这段代码是一个接口文件,定义了对学生(Student)信息进行数据库操作的接口。下面是对代码的功能和作用的解释:
int[] queryGender();
- 该方法用于查询学生表中不同性别的人数,返回一个包含不同性别人数的整型数组。
List<Student> selectByPage(StudentQuery studentQuery);
- 该方法用于根据指定条件查询学生信息,并支持分页查询,返回一个学生信息列表。
Integer selectTotalCount(StudentQuery studentQuery);
- 该方法用于根据指定条件统计满足条件的学生总数,并返回一个整型值。
int deleteById(int id);
- 该方法用于根据学生的ID从数据库中删除对应的学生信息,并返回受影响的行数。
int add(Student student);
- 该方法用于向数据库中添加新的学生信息,并返回受影响的行数。
Student selectById(int id);
- 该方法用于根据学生的ID从数据库中查询对应的学生信息,并返回一个学生对象。
int update(Student student);
- 该方法用于更新数据库中指定学生的信息,并返回受影响的行数。
List<Student> selectHasCheckIn(StudentQuery studentQuery);
- 该方法用于查询已经办理入住手续的学生信息列表。
List<Student> selectNotCheckIn(StudentQuery studentQuery);
- 该方法用于查询尚未办理入住手续的学生信息列表。
int countHasCheckIn(StudentQuery studentQuery);
- 该方法用于统计已经办理入住手续的学生数量。
int countNotCheckIn(StudentQuery studentQuery);
- 该方法用于统计尚未办理入住手续的学生数量。
这些方法定义了对学生信息进行数据库操作的基本功能,实现了学生信息的增删改查以及相关统计功能。实际的实现可能在一个实现了该接口的类中进行。
3.4 INoticeDao(公告(Notice)相关的数据访问对象(DAO))
这段代码是一个接口定义,命名为 INoticeDao
,它描述了一个公告(Notice)相关的数据访问对象(DAO)。下面是对代码的功能和方法的解释:
int add(Notice notice)
: 这个方法用于向数据库中添加新的公告。它接受一个 Notice 对象作为参数,并返回一个整数值,表示插入操作影响的行数。
int deleteById(int n_id)
: 这个方法用于根据公告的 ID 从数据库中删除公告。它接受一个整型参数 n_id 作为公告的唯一标识符,并返回一个整数值,表示删除操作影响的行数。
List<Notice> loginNotice(String n_state)
: 这个方法用于获取特定状态的公告列表。它接受一个字符串参数 n_state 作为公告的状态,并返回一个 Notice 对象的列表,表示符合条件的公告列表。
Notice selectById(int n_id)
: 这个方法用于根据公告的 ID 从数据库中查询公告。它接受一个整型参数 n_id 作为公告的唯一标识符,并返回一个 Notice 对象,表示查询到的公告。
int updateStatus(int n_id, String n_state)
: 这个方法用于更新公告的状态。它接受一个整型参数 n_id 作为公告的唯一标识符,以及一个字符串参数 n_state 作为新的公告状态,并返回一个整数值,表示更新操作影响的行数。
int update(Notice notice)
: 这个方法用于更新已有的公告信息。它接受一个 Notice 对象作为参数,并返回一个整数值,表示更新操作影响的行数。
List<Notice> selectByPage(NoticeQuery noticeQuery)
: 这个方法用于根据公告查询条件查询符合条件的公告列表。它接受一个 NoticeQuery 对象作为参数,并返回一个 Notice 对象的列表,表示符合条件的公告列表。
Integer selectTotalCount(NoticeQuery noticeQuery)
: 这个方法用于根据公告查询条件查询符合条件的公告总数。它接受一个 NoticeQuery 对象作为参数,并返回一个 Integer 值,表示符合条件的公告总数。
该接口提供了一系列方法来实现公告的增删改查功能,并且提供了根据条件查询公告列表和总数的功能。接口中的方法命名和参数设计清晰,可以方便地进行公告相关数据的操作。
3.5 IManagerDao(定义与管理人员|宿管(Manager)相关的数据库操作)
这段代码是一个接口文件 IManagerDao
,用于定义与管理人员(Manager)相关的数据库操作。下面是对代码的解释:
int[] queryGender();
:这个方法可能用于从数据库中查询性别信息,返回一个包含不同性别数量的数组。具体实现可能会统计不同性别的管理人员数量等。
List<Manager> selectByPage(ManagerQuery managerQuery);
:这个方法用于根据给定的查询条件ManagerQuery
对数据库中的管理人员进行分页查询,并返回符合条件的管理人员列表。
Integer selectTotalCount(ManagerQuery managerQuery);
:这个方法用于根据给定的查询条件ManagerQuery
统计符合条件的管理人员总数并返回。
int deleteById(int id);
:这个方法用于根据给定的管理人员 ID 从数据库中删除相应的管理人员信息。
int add(Manager manager);
:这个方法用于向数据库中添加新的管理人员信息,manager
参数是待添加的管理人员对象。
Manager selectById(int id);
:这个方法用于根据给定的管理人员 ID 从数据库中查询相应的管理人员信息,并返回一个Manager
对象。
int update(Manager manager);
:这个方法用于更新数据库中的管理人员信息,根据给定的manager
对象进行更新操作。
List<Manager> selectAll();
:这个方法用于从数据库中查询所有的管理人员信息,并以列表的形式返回。
这个接口提供了一组与管理人员相关的数据库操作方法的抽象定义。具体的实现可能在相应的实现类中,针对具体的数据库类型和结构,实现这些接口方法,并进行相应的数据库操作。
3.6 IDormitoryDao(定义了对宿舍(Dormitory)实体的数据库操作)
这段代码是一个 Java 接口文件,定义了对宿舍(Dormitory)实体的数据库操作。下面是对代码的功能和作用的解释:
List<Dormitory> selectByPage(DormitoryQuery dormitoryQuery)
:根据给定的DormitoryQuery
对象中的条件,从数据库中分页查询宿舍信息,并返回一个宿舍对象列表。
Integer selectTotalCount(DormitoryQuery dormitoryQuery)
:根据给定的DormitoryQuery
对象中的条件,查询满足条件的宿舍总数,并返回总数值。
int deleteById(int id)
:根据给定的宿舍ID,在数据库中删除相应的宿舍信息。
int add(Dormitory dormitory)
:向数据库中添加一个新的宿舍信息,传入一个Dormitory
对象作为参数。
Dormitory selectById(int id)
:根据给定的宿舍ID,从数据库中查询对应的宿舍信息,并返回一个Dormitory
对象。
int update(Dormitory dormitory)
:根据给定的宿舍对象,更新数据库中对应的宿舍信息。
List<Dormitory> selectByBuilding(int id)
:根据给定的楼栋ID,从数据库中查询相应楼栋的所有宿舍信息,并返回一个宿舍对象列表。
总的来说,该接口定义了对宿舍信息进行增删改查的操作,包括根据不同的查询条件进行查询,并提供了分页查询功能。这些方法可以让其他类或组件对数据库中的宿舍信息进行灵活的操作。
3.7 IBuildingManagerDao(宿舍楼管理员(BuildingManager)进行数据库操作的方法)
这段代码是一个接口文件,定义了一个名为 IBuildingManagerDao
的接口,用于对宿舍楼管理员(BuildingManager)进行增加、删除和修改操作。以下是对代码的解释:
package com.xn.dormitory.dao;
- 这个语句指定了该文件所属的包名,该文件位于com.xn.dormitory.dao
包中。
import com.xn.dormitory.pojo.BuildingManager;
- 这个语句导入了一个名为BuildingManager
的类或者接口,该类或接口用于表示宿舍楼管理员的信息。这个BuildingManager
类可能会包含有关宿舍楼管理员的属性和方法。
public interface IBuildingManagerDao
- 这个语句定义了一个名为IBuildingManagerDao
的接口。接口是一种抽象类型,它仅包含方法的特征而没有方法的实现。
int add(BuildingManager buildingManager);
- 这个语句声明了一个名为add
的抽象方法,该方法接受一个BuildingManager
类型的参数,并且返回一个整数类型的值。
int delete(BuildingManager buildingManager);
- 这个语句声明了一个名为delete
的抽象方法,该方法接受一个BuildingManager
类型的参数,并且返回一个整数类型的值。
int change(BuildingManager buildingManager);
- 这个语句声明了一个名为change
的抽象方法,该方法接受一个BuildingManager
类型的参数,并且返回一个整数类型的值。
这个接口中的方法声明了对宿舍楼管理员信息进行添加、删除和修改操作的基本行为。具体的实现代码应该在这个接口的实现类中完成,即在其他类中提供相应的方法实现。
3.8 IBuildingDao(定义对建筑物(Building)对象进行数据库操作的方法)
这段代码是一个接口(Interface),名为 IBuildingDao
,用于定义对建筑物(Building)对象进行数据库操作的方法。下面是对代码中方法的功能和作用的解释:
List<BuildingAllocation> queryAllocation()
:用于从数据库中查询建筑物分配情况,并以列表的形式返回结果。
List<BuildingAllocation> queryStudentNum()
:用于从数据库中查询建筑物内学生数量的情况,并以列表的形式返回结果。
List<Building> selectByPage(BuildingQuery buildingQuery)
:根据提供的BuildingQuery
对象的参数,从数据库中分页查询建筑物信息,并以列表的形式返回结果。
Integer selectTotalCount(BuildingQuery buildingQuery)
:根据提供的BuildingQuery
对象的参数,查询满足条件的建筑物总数,并以整数形式返回结果。
int deleteById(int id)
:根据提供的建筑物id,从数据库中删除相应的建筑物数据。
int add(Building building)
:将提供的建筑物对象插入到数据库中。
Building selectById(int id)
:根据提供的建筑物id,从数据库中查询相应的建筑物对象。
int update(Building building)
:根据提供的建筑物对象,更新数据库中相应的建筑物数据。
List<Building> selectAll(String gender)
:根据提供的性别(gender)参数,从数据库中查询所有符合性别条件的建筑物,并以列表的形式返回结果。
这个接口提供了一系列对建筑物对象进行数据库操作的抽象方法,具体的实现可以在实现了该接口的类中完成。通常情况下,这样的接口用于定义数据访问对象(DAO),用于实现数据库操作与业务逻辑的解耦。
4、Service层(业务逻辑或者服务层)
Service层:被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。
Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求;
而Service,则是专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。
简单来说就是Dao层是底层,具体到某一张表的增删查改,可以理解为有多少张表就有多少个Dao层(实体类),而Service成可以理解为是Dao层的 “上司”,通过Service层来控制Dao层。
通过Service层去调用Dao层,不仅可以解耦合,而且可以增加代码的拓展性。
4.1 IUserService(操作员|超级管理员)
这段代码是一个 Java 接口 IUserService
,用于定义用户服务的功能接口。以下是对代码的详细解释:
-
User
类是一个用于表示用户的数据模型类,其中包含用户的基本信息。 -
UserQuery
类是一个用于查询用户的查询条件模型类,其中包含了查询用户所需的条件信息。 -
LayUITableResult
类是一个用于封装 LayUI 表格数据的工具类,用于返回符合 LayUI 表格数据格式的结果。 -
该接口定义了以下方法,用于提供不同的功能给控制器层使用:
login
方法用于验证用户登录,需要传入用户名和密码作为参数,返回用户对象。register
方法用于注册新用户,需要传入用户名、密码和昵称作为参数,返回注册结果的布尔值。selectByPage
方法用于根据用户查询条件查询用户信息,并按分页的方式返回查询结果。deleteById
方法用于根据用户ID删除特定用户,需要传入用户ID作为参数,返回删除结果的布尔值。deleteAll
方法用于根据一组用户ID删除多个用户,需要传入一组用户ID作为参数,返回删除结果的布尔值。updateStatus
方法用于更新用户状态,需要传入用户ID和新的状态作为参数,返回更新结果的布尔值。changePassword
方法用于修改用户密码,需要传入用户ID、旧密码和新密码作为参数,返回修改结果的布尔值。
总的来说,该接口定义了用户服务层需要实现的一系列功能,包括用户登录验证、用户注册、用户信息查询、用户删除、用户状态更新和用户密码修改等功能。具体的实现可以根据业务需求在对应的实现类中完成。
4.3.1 UserServiceImpl(操作员相关的业务逻辑操作)
这段代码是 UserServiceImpl
类的具体实现部分。该类实现了 IUserService
接口,提供了与用户相关的业务逻辑操作。以下是对代码的详细解释:
-
UserServiceImpl
类中声明了一个IUserDao
接口的实例userDao
,通过new UserDaoImpl()
进行实例化。通常,该实例用于与数据库交互,执行用户相关的增删改查操作。 -
login
方法用于实现用户登录功能,调用userDao.login(name, password)
方法从数据库中查询用户信息。 -
register
方法用于实现用户注册功能,调用userDao.register(name, password, nickname)
方法向数据库中插入用户信息。 -
selectByPage
方法用于实现分页查询用户信息的功能,调用userDao.selectByPage(userQuery)
方法从数据库中分页查询用户信息。 -
deleteById
方法用于实现根据用户ID删除用户信息的功能,调用userDao.deleteById(id)
方法从数据库中删除指定ID的用户信息。 -
deleteAll
方法用于实现批量删除用户信息的功能,根据传入的ID数组,循环调用userDao.deleteById(Integer.parseInt(id))
方法从数据库中批量删除用户信息。 -
updateStatus
方法用于实现更新用户状态的功能,调用userDao.updateStatus(id, status)
方法更新指定ID的用户状态信息。 -
changePassword
方法用于实现修改用户密码的功能,调用userDao.changePassword(userId, oldPassword, newPassword)
方法更新用户的登录密码信息。
总的来说,UserServiceImpl
类实现了与用户相关的业务逻辑操作,通过调用 userDao
的相应方法与数据库进行交互,并根据操作结果返回布尔值表示操作是否成功。
4.2 IStuDorService(学生所住宿舍)
这段代码是一个 Java 接口 IStuDorService
,它定义了三个抽象方法,分别是 add
、change
和 delete
,每个方法都接受一个 StuDor
类型的参数,并返回一个布尔值。下面是对代码的详细解释:
-
IStuDorService
接口声明了三个抽象方法,它们分别是:add(StuDor stuDor)
:用于向系统中添加一个新的StuDor
对象,可能会返回布尔值来表示添加操作是否成功。change(StuDor stuDor)
:用于修改现有的StuDor
对象,可能会返回布尔值来表示修改操作是否成功。delete(StuDor stuDor)
:用于从系统中删除指定的StuDor
对象,可能会返回布尔值来表示删除操作是否成功。
-
StuDor
是一个 POJO 类(Plain Old Java Object),代表学生宿舍。它可能包含学生宿舍的各种属性,例如宿舍号、楼栋信息、学生信息等。 -
这些方法的具体实现将由接口的实现类来完成。通常,根据具体的业务逻辑,实现类将根据传入的
StuDor
对象执行相应的数据库操作或其他操作,比如将数据存储到数据库中,更新数据库中的数据,或者从数据库中删除数据。
总的来说,这个接口提供了一组对学生宿舍信息进行操作的抽象方法,这些方法可以让其他类通过实现这些方法来实现具体的学生宿舍信息管理功能。
4.2.1 StuDorServiceImpl(学生宿舍相关的业务逻辑操作)
这段代码是 StuDorServiceImpl
类的具体实现部分。该类实现了 IStuDorService
接口,提供了与学生宿舍相关的业务逻辑操作。以下是对代码的详细解释:
-
StuDorServiceImpl
类中声明了一个IStuDorDao
接口的实例stuDorDao
,通过new StuDorDaoImpl()
进行实例化。通常,该实例用于与数据库交互,执行学生宿舍相关的增删改操作。 -
add
方法用于实现添加学生宿舍信息的功能,调用stuDorDao.add(stuDor)
方法向数据库中插入学生宿舍信息。 -
change
方法用于实现修改学生宿舍信息的功能,调用stuDorDao.change(stuDor)
方法更新数据库中对应的学生宿舍信息。 -
delete
方法用于实现删除学生宿舍信息的功能,调用stuDorDao.delete(stuDor)
方法从数据库中删除对应的学生宿舍信息。
总的来说,StuDorServiceImpl
类实现了与学生宿舍相关的业务逻辑操作,通过调用 stuDorDao
的相应方法与数据库进行交互,并根据操作结果返回布尔值表示操作是否成功。
4.3 IStudentService(学生)
这段代码是一个 Java 接口 IStudentService
,定义了一系列方法,用于提供与学生信息相关的服务功能。下面是对代码的详细解释:
-
int[] queryGender()
: 该方法用于查询性别信息,并返回一个包含不同性别的整数数组。 -
LayUITableResult selectByPage(StudentQuery studentQuery)
: 该方法用于根据传入的学生查询对象studentQuery
进行分页查询,并返回一个 LayUI 表格结果对象,用于在前端展示分页查询的结果。 -
boolean deleteById(int id)
: 该方法用于根据学生的 ID 删除指定的学生信息,并返回一个布尔值表示删除操作的结果。 -
boolean add(Student student)
: 该方法用于向系统中添加一个新的学生信息,并返回一个布尔值表示添加操作的结果。 -
Student selectById(int id)
: 该方法用于根据学生的 ID 查询并返回对应的学生信息。 -
boolean update(Student student)
: 该方法用于更新指定学生的信息,并返回一个布尔值表示更新操作的结果。 -
boolean deleteAll(String[] ids)
: 该方法用于批量删除一组指定 ID 的学生信息,并返回一个布尔值表示批量删除操作的结果。 -
LayUITableResult selectHasCheckIn(StudentQuery studentQuery)
: 该方法用于查询已经办理入住的学生信息,并返回一个 LayUI 表格结果对象,用于在前端展示查询结果。 -
LayUITableResult selectNotCheckIn(StudentQuery studentQuery)
: 该方法用于查询还未办理入住的学生信息,并返回一个 LayUI 表格结果对象,用于在前端展示查询结果。 -
int countHasCheckIn(StudentQuery studentQuery)
: 该方法用于统计已经办理入住的学生数量,并返回一个整数值表示统计结果。 -
int countNotCheckIn(StudentQuery studentQuery)
: 该方法用于统计还未办理入住的学生数量,并返回一个整数值表示统计结果。
总的来说,这个接口定义了学生信息相关的一系列操作,包括查询、删除、添加、更新以及统计等功能,旨在为上层的 Controller 层提供这些功能的接口定义。
4.3.1 StudentServiceImpl(学生相关的业务逻辑操作)
这段代码是 StudentServiceImpl
类的具体实现部分。该类实现了 IStudentService
接口,提供了与学生相关的业务逻辑操作。以下是对代码的详细解释:
-
StudentServiceImpl
类中声明了一个IStudentDao
接口的实例studentDao
,通过new StudentDaoImpl()
进行实例化。通常,该实例用于与数据库交互,执行学生相关的增删改查操作。 -
queryGender
方法用于查询数据库中学生的性别信息,调用studentDao.queryGender()
方法从数据库中查询学生的性别信息。 -
selectByPage
方法用于实现分页查询学生信息的功能,调用studentDao.selectByPage(studentQuery)
方法从数据库中分页查询学生信息。 -
deleteById
方法用于实现根据学生ID删除学生信息的功能,调用studentDao.deleteById(id)
方法从数据库中删除指定ID的学生信息。 -
add
方法用于实现添加学生信息的功能,调用studentDao.add(student)
方法向数据库中插入学生信息。 -
selectById
方法用于根据学生ID查询学生信息,调用studentDao.selectById(id)
方法从数据库中查询指定ID的学生信息。 -
update
方法用于实现修改学生信息的功能,调用studentDao.update(student)
方法更新数据库中对应的学生信息。 -
deleteAll
方法用于实现批量删除学生信息的功能,根据传入的ID数组,循环调用studentDao.deleteById(Integer.parseInt(id))
方法从数据库中批量删除学生信息。 -
selectHasCheckIn
方法用于查询已办理入住手续的学生信息。 -
selectNotCheckIn
方法用于查询未办理入住手续的学生信息。 -
countHasCheckIn
方法用于统计已办理入住手续的学生数量。 -
countNotCheckIn
方法用于统计未办理入住手续的学生数量。
总的来说,StudentServiceImpl
类实现了与学生相关的业务逻辑操作,通过调用 studentDao
的相应方法与数据库进行交互,并根据操作结果返回布尔值或包含查询结果的 LayUITableResult
对象。
4.4 INoticeService(公告)
这段代码是一个 Java 接口 INoticeService
,它定义了一些公共的方法。下面是对代码的详细解释:
-
LayUITableResult selectByPage(NoticeQuery noticeQuery)
:这个方法用于根据传入的NoticeQuery
对象进行分页查询,并返回一个包含查询结果的LayUITableResult
对象。LayUITableResult
可能是一个自定义的用于返回分页结果的类。 -
boolean deleteById(int n_id)
:这个方法用于根据传入的公告IDn_id
执行删除操作,并返回一个布尔值表示操作是否成功。 -
boolean add(Notice notice)
:这个方法用于添加新的公告,接受一个Notice
对象作为参数,并返回一个布尔值表示操作是否成功。 -
List<Notice> loginNotice(String n_state)
:这个方法用于根据公告的状态n_state
查询符合条件的公告,并返回一个公告列表。 -
Notice selectById(int n_id)
:这个方法用于根据传入的公告IDn_id
查询特定的公告,并返回一个Notice
对象。 -
boolean updateStatus(int n_id, String n_state)
:这个方法用于根据公告IDn_id
更新公告的状态为传入的n_state
值,并返回一个布尔值表示操作是否成功。 -
boolean update(Notice notice)
:这个方法用于更新公告,接受一个Notice
对象作为参数,并返回一个布尔值表示操作是否成功。 -
boolean deleteAll(String[] ids)
:这个方法用于批量删除公告,接受一个字符串数组ids
作为参数,包含需要删除的公告ID,并返