用户管理系统的后端实现方案
在Web应用中,用户管理功能与密码修改等简单页面跳转不同,它需要通过后端API获取数据并动态渲染界面。当用户点击用户管理菜单时,系统会发送请求到服务器,而非直接跳转到新页面。
用户管理功能通常需要关联多个数据表进行查询操作,以确保获取完整的用户信息及其角色权限。
实现用户管理功能主要涉及三个核心部分:获取用户总数、分页获取用户列表以及获取所有角色信息。
第一步:实现用户总数统计功能
- 数据访问层接口设计
// 用户数据访问接口
public interface UserDataAccess {
// 根据用户名和角色类型获取符合条件的用户总数
int fetchUserCount(Connection dbConnection, String userName, int roleType) throws SQLException;
}
- 数据访问层实现
// 用户数据访问实现类
public class UserDataAccessImpl implements UserDataAccess {
@Override
public int fetchUserCount(Connection dbConnection, String userName, int roleType) throws SQLException {
PreparedStatement queryStatement = null;
ResultSet result = null;
int totalRecords = 0;
if (dbConnection != null) {
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("select count(1) as total from system_users u, user_roles r where u.role_id = r.id");
List<Object> paramList = new ArrayList<>();
if (!StringUtil.isEmpty(userName)) {
sqlBuilder.append(" and u.username like ?");
paramList.add("%" + userName + "%");
}
if (roleType > 0) {
sqlBuilder.append(" and u.role_id = ?");
paramList.add(roleType);
}
Object[] parameters = paramList.toArray();
System.out.println("UserDataAccessImpl->fetchUserCount: " + sqlBuilder.toString());
result = DatabaseHelper.executeQuery(dbConnection, queryStatement, result, sqlBuilder.toString(), parameters);
if (result.next()) {
totalRecords = result.getInt("total");
}
DatabaseHelper.closeResources(null, queryStatement, result);
}
return totalRecords;
}
}
- 业务逻辑层接口
// 用户服务接口
public interface UserService {
// 获取用户总数
int getUserCount(String userName, int roleType);
}
- 业务逻辑层实现
// 用户服务实现类
public class UserServiceImpl implements UserService {
@Override
public int getUserCount(String userName, int roleType) {
int count = 0;
Connection connection = null;
try {
connection = DatabaseUtil.createConnection();
UserDataAccess userDataAccess = new UserDataAccessImpl();
count = userDataAccess.fetchUserCount(connection, userName, roleType);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DatabaseUtil.closeConnection(connection);
}
return count;
}
}
第二步:实现分页用户列表获取
- 数据访问层接口
// 用户数据访问接口扩展
public interface UserDataAccess {
// ... 前面的方法 ...
// 分页获取用户列表
List<UserAccount> getUserList(Connection dbConnection, String userName, int roleType,
int currentPage, int pageSize) throws Exception;
}
- 数据访问层实现
// 用户数据访问实现类扩展
public class UserDataAccessImpl implements UserDataAccess {
// ... 前面的方法 ...
@Override
public List<UserAccount> getUserList(Connection dbConnection, String userName, int roleType,
int currentPage, int pageSize) throws Exception {
PreparedStatement statement = null;
ResultSet resultSet = null;
List<UserAccount> userList = new ArrayList<>();
if (dbConnection != null) {
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("select u.*, r.role_name from system_users u, user_roles r where u.role_id = r.id");
List<Object> paramList = new ArrayList<>();
if (!StringUtil.isEmpty(userName)) {
sqlBuilder.append(" and u.username like ?");
paramList.add("%" + userName + "%");
}
if (roleType > 0) {
sqlBuilder.append(" and u.role_id = ?");
paramList.add(roleType);
}
sqlBuilder.append(" order by creation_date DESC limit ?,?");
int offset = (currentPage - 1) * pageSize;
paramList.add(offset);
paramList.add(pageSize);
Object[] parameters = paramList.toArray();
System.out.println("SQL query: " + sqlBuilder.toString());
resultSet = DatabaseHelper.executeQuery(dbConnection, statement, resultSet, sqlBuilder.toString(), parameters);
while (resultSet.next()) {
UserAccount user = new UserAccount();
user.setId(resultSet.getInt("id"));
user.setUserCode(resultSet.getString("user_code"));
user.setUserName(resultSet.getString("username"));
user.setGender(resultSet.getInt("gender"));
user.setBirthday(resultSet.getDate("birthday"));
user.setPhone(resultSet.getString("phone"));
user.setRoleType(resultSet.getInt("role_id"));
user.setRoleName(resultSet.getString("role_name"));
userList.add(user);
}
DatabaseHelper.closeResources(null, statement, resultSet);
}
return userList;
}
}
- 业务逻辑层接口扩展
// 用户服务接口扩展
public interface UserService {
// ... 前面的方法 ...
// 分页获取用户列表
List<UserAccount> getUserList(String searchName, int searchRole, int currentPage, int pageSize);
}
- 业务逻辑层实现扩展
// 用户服务实现类扩展
public class UserServiceImpl implements UserService {
// ... 前面的方法 ...
@Override
public List<UserAccount> getUserList(String searchName, int searchRole, int currentPage, int pageSize) {
Connection connection = null;
List<UserAccount> userList = null;
System.out.println("Search name: " + searchName);
System.out.println("Search role: " + searchRole);
System.out.println("Current page: " + currentPage);
System.out.println("Page size: " + pageSize);
try {
connection = DatabaseUtil.createConnection();
UserDataAccess userDataAccess = new UserDataAccessImpl();
userList = userDataAccess.getUserList(connection, searchName, searchRole, currentPage, pageSize);
} catch (Exception e) {
e.printStackTrace();
} finally {
DatabaseUtil.closeConnection(connection);
}
return userList;
}
}
第三步:实现角色列表获取
- 角色数据访问层接口
// 角色数据访问接口
public interface RoleDataAccess {
// 获取所有角色列表
List<Role> getAllRoles(Connection dbConnection) throws Exception;
}
- 角色数据访问层实现
// 角色数据访问实现
public class RoleDataAccessImpl implements RoleDataAccess {
@Override
public List<Role> getAllRoles(Connection dbConnection) throws Exception {
PreparedStatement statement = null;
ResultSet resultSet = null;
ArrayList<Role> roleList = new ArrayList<>();
if (dbConnection != null) {
String sql = "select * from system_roles";
Object[] params = {};
resultSet = DatabaseHelper.executeQuery(dbConnection, statement, resultSet, sql, params);
while (resultSet.next()) {
Role role = new Role();
role.setId(resultSet.getInt("id"));
role.setRoleName(resultSet.getString("role_name"));
role.setRoleCode(resultSet.getString("role_code"));
roleList.add(role);
}
DatabaseHelper.closeResources(null, statement, resultSet);
}
return roleList;
}
}
- 角色业务逻辑层接口
// 角色服务接口
public interface RoleService {
// 获取所有角色列表
List<Role> getAllRoles();
}
- 角色业务逻辑层实现
// 角色服务实现
public class RoleServiceImpl implements RoleService {
// 引入角色数据访问对象
private RoleDataAccess roleDataAccess;
public RoleServiceImpl() {
roleDataAccess = new RoleDataAccessImpl();
}
@Override
public List<Role> getAllRoles() {
Connection connection = null;
List<Role> roleList = null;
try {
connection = DatabaseUtil.createConnection();
roleList = roleDataAccess.getAllRoles(connection);
} catch (Exception e) {
e.printStackTrace();
} finally {
DatabaseUtil.closeConnection(connection);
}
return roleList;
}
}
通过以上三层架构的实现,我们完成了用户管理系统的后端核心功能,包括用户总数统计、分页获取用户列表以及角色列表获取。这种分层设计使得代码结构清晰,便于维护和扩展。