1. UserService类设计与实现解析
UserService是一个典型的Java服务类,负责处理用户相关的业务逻辑和数据操作。这个版本的核心改进是将原本基于内存的数据查询改为通过JDBC连接数据库进行操作,实现了数据的持久化存储。下面我们来详细拆解这个类的设计思路和实现细节。
1.1 类结构与依赖关系
从代码中可以看到,UserService主要依赖以下几个关键组件:
DBUtil:数据库连接工具类,负责获取和释放数据库连接User及其子类(Citizen、Repairman、Admin):用户实体类,代表系统中的不同角色- JDBC相关类(
Connection、PreparedStatement、ResultSet):用于执行SQL语句和处理结果
这种设计遵循了经典的三层架构模式,将数据访问逻辑集中在Service层,与业务逻辑解耦。
提示:在实际项目中,建议进一步将数据访问层(DAO)单独抽离,使Service层专注于业务逻辑,这样更符合单一职责原则。
1.2 数据库表设计分析
从SQL语句可以推断出数据库表ks_user的基本结构:
user_id:用户唯一标识,整型user_name:用户名,字符串类型phone:联系电话,字符串类型password:密码(存储的应该是加密后的值)user_role:用户角色,整型(1-普通用户,2-维修工,3-管理员)todo_count:待办事项计数(仅维修工使用)
这种设计采用了单表继承的模式,将不同角色的用户存储在同一个表中,通过user_role字段区分。优点是查询简单,缺点是如果不同角色属性差异很大时,会有很多空字段。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心方法实现详解
2.1 用户查询方法:getUserByUserNameAndRole
java复制public User getUserByUserNameAndRole(String userName, int role) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM ks_user WHERE user_name = ? AND user_role = ?";
User user = null;
try {
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userName);
pstmt.setInt(2, role);
rs = pstmt.executeQuery();
if (rs.next()) {
int userId = rs.getInt("user_id");
String phone
