在土地资源管理领域,传统的手工记录和分散的数据存储方式已经无法满足现代国土管理部门对数据准确性、实时性和可追溯性的要求。土地资源信息管理平台采用经典的SSH(Struts2 + Spring + Hibernate)集成框架,构建了一个集土地档案管理、权属信息追踪、分类统计于一体的综合性管理系统。
系统采用典型的三层架构设计,表现层使用Struts2框架处理用户请求和页面跳转,通过拦截器机制实现统一的权限验证。业务逻辑层由Spring框架的IoC容器管理Service组件,利用声明式事务保证数据操作的原子性。数据持久层基于Hibernate ORM框架,通过对象关系映射将业务实体自动映射为数据库记录。
数据库架构设计深度解析
系统数据库设计体现了高度规范化的设计理念,四个核心表之间通过外键约束建立了完整的数据关联关系。
用户表(t_user)设计分析
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`u_username` varchar(255) DEFAULT NULL COMMENT '用户名',
`u_password` varchar(255) DEFAULT NULL COMMENT '密码',
`u_name` varchar(255) DEFAULT NULL COMMENT '姓名',
`u_birthday` varchar(255) DEFAULT NULL COMMENT '生日',
`u_sex` varchar(255) DEFAULT NULL COMMENT '性别',
`u_tel` varchar(255) DEFAULT NULL COMMENT '联系方式',
`u_lxr` varchar(255) DEFAULT NULL COMMENT '紧急联系人',
`u_phone` varchar(255) DEFAULT NULL COMMENT '电话',
`u_jg` varchar(255) DEFAULT NULL COMMENT '籍贯',
`u_address` varchar(255) DEFAULT NULL COMMENT '住址',
`u_bm` varchar(255) DEFAULT NULL COMMENT '部门',
`u_type` varchar(255) DEFAULT NULL COMMENT '用户类型',
`u_by_1` varchar(255) DEFAULT NULL COMMENT '备用1',
`u_by_2` varchar(255) DEFAULT NULL COMMENT '备用2',
`u_by_3` varchar(255) DEFAULT NULL COMMENT '备用3',
`u_bz` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='用户表'
用户表设计采用了详细的人员信息字段结构,包含基本身份信息、联系方式、部门归属等。特别值得注意的是u_type字段用于区分用户角色(如管理员、普通用户),这种设计为后续的权限控制奠定了基础。三个备用字段(u_by_1, u_by_2, u_by_3)体现了良好的扩展性设计思路。
档案表(t_dangan)关联设计
CREATE TABLE `t_dangan` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user` int(11) DEFAULT NULL COMMENT '用户ID',
`fenLei` int(11) DEFAULT NULL COMMENT '分类ID',
`d_number` varchar(255) DEFAULT NULL COMMENT '档案编号',
`d_time` varchar(255) DEFAULT NULL COMMENT '档案时间',
`d_age` varchar(255) DEFAULT NULL COMMENT '年龄',
`d_sex` varchar(255) DEFAULT NULL COMMENT '性别',
`d_hj` varchar(255) DEFAULT NULL COMMENT '户籍',
`d_xjd` varchar(255) DEFAULT NULL COMMENT '现居地',
`d_sfz` varchar(255) DEFAULT NULL COMMENT '身份证号',
`d_xuel` varchar(255) DEFAULT NULL COMMENT '学历',
`d_xuej` varchar(255) DEFAULT NULL COMMENT '学籍',
`d_zhuan` varchar(255) DEFAULT NULL COMMENT '专业',
`d_status` varchar(255) DEFAULT NULL COMMENT '状态',
`d_bz` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `FK2D0C500E6FADE458` (`fenLei`),
KEY `FK2D0C500E4BD3594C` (`user`),
CONSTRAINT `FK2D0C500E4BD3594C` FOREIGN KEY (`user`) REFERENCES `t_user` (`id`),
CONSTRAINT `FK2D0C500E6FADE458` FOREIGN KEY (`fenLei`) REFERENCES `t_fenlei` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='档案表'
档案表的设计展现了复杂业务关系的处理能力。通过user和fenLei两个外键字段,分别关联用户表和分类表,建立了完整的数据关系链。索引的创建优化了查询性能,外键约束确保了数据的完整性和一致性。
核心实体模型与数据持久化
系统采用Hibernate实现对象关系映射,以下为关键实体类的设计:
用户实体类设计
@Entity
@Table(name = "t_user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "u_username")
private String username;
@Column(name = "u_password")
private String password;
@Column(name = "u_name")
private String name;
@Column(name = "u_type")
private String userType;
// 其他字段及getter/setter方法
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Set<Dangan> danganSet = new HashSet<>();
// 构造方法、getter、setter省略
}
档案实体类与关联映射
@Entity
@Table(name = "t_dangan")
public class Dangan implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
@JoinColumn(name = "user", referencedColumnName = "id")
private User user;
@ManyToOne
@JoinColumn(name = "fenLei", referencedColumnName = "id")
private Fenlei fenlei;
@Column(name = "d_number")
private String archiveNumber;
@Column(name = "d_status")
private String status;
// 其他字段及关联方法
}
业务逻辑层设计与实现
Spring框架的业务逻辑层采用服务组件模式,以下是核心服务类的实现:
用户服务接口设计
public interface UserService {
User login(String username, String password);
void register(User user);
void updateUser(User user);
User getUserById(Integer id);
List<User> getAllUsers();
void deleteUser(Integer id);
}
用户服务实现类
@Service("userService")
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User login(String username, String password) {
try {
User user = userDao.findByUsername(username);
if (user != null && password.equals(user.getPassword())) {
return user;
}
return null;
} catch (Exception e) {
throw new RuntimeException("登录失败", e);
}
}
@Override
@Transactional(readOnly = true)
public User getUserById(Integer id) {
return userDao.findById(id);
}
@Override
public void register(User user) {
userDao.save(user);
}
// 其他方法实现
}
控制层请求处理
Struts2框架负责处理前端请求,以下是典型的Action类设计:
用户管理Action类
@Controller
@Scope("prototype")
public class UserAction extends BaseAction {
private User user;
private List<User> userList;
@Autowired
private UserService userService;
// 用户登录处理
public String login() {
User loginUser = userService.login(user.getUsername(), user.getPassword());
if (loginUser != null) {
session.put("currentUser", loginUser);
return "success";
} else {
addActionError("用户名或密码错误");
return "error";
}
}
// 用户列表查询
public String list() {
userList = userService.getAllUsers();
return "list";
}
// 用户信息更新
public String update() {
userService.updateUser(user);
return "success";
}
// getter和setter方法
}
数据访问层优化实现
Hibernate数据访问层采用模板方法模式,提供统一的数据操作接口:
基础DAO接口
public interface BaseDao<T> {
T findById(Integer id);
List<T> findAll();
void save(T entity);
void update(T entity);
void delete(T entity);
List<T> findByHQL(String hql, Object... params);
}
用户数据访问实现
@Repository("userDao")
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
@Override
public User findByUsername(String username) {
String hql = "FROM User WHERE u_username = ?";
List<User> users = findByHQL(hql, username);
return users.isEmpty() ? null : users.get(0);
}
@Override
public List<User> findByUserType(String userType) {
String hql = "FROM User WHERE u_type = ? ORDER BY u_name";
return findByHQL(hql, userType);
}
}
系统核心功能深度解析
1. 多角色权限管理系统
系统支持管理员和普通用户两种角色,不同角色拥有不同的操作权限。管理员具备完整的用户管理、分类管理和档案管理权限,而普通用户主要进行档案查询和基本信息维护。

用户管理模块实现了完整的CRUD操作,支持用户信息的增删改查。通过u_type字段进行角色区分,系统在登录时根据用户类型动态加载对应的功能菜单。
2. 智能档案分类与检索
档案管理系统支持按多种条件进行组合查询,包括按分类、按时间范围、按状态等。系统采用HQL进行复杂查询构建:
public class DanganService {
public List<Dangan> advancedSearch(String number, String status,
Date startTime, Date endTime) {
StringBuilder hql = new StringBuilder("FROM Dangan WHERE 1=1");
List<Object> params = new ArrayList<>();
if (StringUtils.isNotBlank(number)) {
hql.append(" AND d_number LIKE ?");
params.add("%" + number + "%");
}
if (StringUtils.isNotBlank(status)) {
hql.append(" AND d_status = ?");
params.add(status);
}
if (startTime != null) {
hql.append(" AND d_time >= ?");
params.add(startTime);
}
if (endTime != null) {
hql.append(" AND d_time <= ?");
params.add(endTime);
}
hql.append(" ORDER BY d_time DESC");
return danganDao.findByHQL(hql.toString(), params.toArray());
}
}

3. 完整的操作日志追踪
系统通过记录表(t_jilu)实现操作日志的完整追踪,每个重要操作都会生成相应的日志记录:
@Aspect
@Component
public class LogAspect {
@Autowired
private JiluService jiluService;
@Pointcut("execution(* com.landplatform.service.*.*(..))")
public void serviceLayer() {}
@AfterReturning(pointcut = "serviceLayer()", returning = "result")
public void logOperation(JoinPoint joinPoint, Object result) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getSimpleName();
Jilu log = new Jilu();
log.setJ_name(className + "." + methodName);
log.setJ_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
log.setJ_bz("操作执行成功");
jiluService.save(log);
}
}

4. 分类管理体系
分类管理模块支持动态的土地类型分类,管理员可以根据实际业务需求调整分类结构:
@Service
@Transactional
public class FenleiService {
public void addFenlei(Fenlei fenlei) {
// 验证分类名称是否重复
if (isNameExists(fenlei.getFName())) {
throw new BusinessException("分类名称已存在");
}
fenlei.setFTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
fenleiDao.save(fenlei);
}
public List<Fenlei> getFenleiTree() {
// 构建分类树形结构
return buildTree(fenleiDao.findAll());
}
}

系统安全机制设计
系统采用多层次的安全防护策略,确保数据的安全性和完整性:
密码加密存储
@Component
public class PasswordEncoder {
public String encode(String rawPassword) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(rawPassword.getBytes());
return Base64.getEncoder().encodeToString(digest);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("密码加密失败", e);
}
}
public boolean matches(String rawPassword, String encodedPassword) {
return encode(rawPassword).equals(encodedPassword);
}
}
会话安全管理
public class SessionInterceptor implements Interceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map<String, Object> session = invocation.getInvocationContext().getSession();
User currentUser = (User) session.get("currentUser");
if (currentUser == null) {
return "login"; // 跳转到登录页面
}
// 权限验证
if (!hasPermission(currentUser, invocation.getAction())) {
return "noPermission";
}
return invocation.invoke();
}
}
性能优化策略
数据库连接池配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/land_db?useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="initialSize" value="5"/>
<property name="minIdle" value="5"/>
<property name="maxActive" value="20"/>
<property name="maxWait" value="60000"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
</bean>
Hibernate二级缓存配置
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.region.factory_class">
org.hibernate.cache.ehcache.EhCacheRegionFactory
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
系统扩展性与维护性
配置集中管理
@Component
@PropertySource("classpath:application.properties")
public class SystemConfig {
@Value("${system.page.size}")
private Integer pageSize;
@Value("${system.upload.path}")
private String uploadPath;
@Value("${system.backup.enabled}")
private Boolean backupEnabled;
// 配置项获取方法
}
异常统一处理
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<ErrorResult> handleException(Exception e) {
ErrorResult error = new ErrorResult();
error.setCode("500");
error.setMessage("系统内部错误");
error.setDetail(e.getMessage());
// 记录错误日志
logger.error("系统异常", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
技术架构优势分析
SSH框架组合在土地资源管理平台中展现了显著的技术优势。Struts2的MVC模式清晰分离了表现层与业务逻辑,通过拦截器机制实现了统一的权限控制和日志记录。Spring的IoC容器管理对象生命周期,AOP编程简化了横切关注点的实现。Hibernate的ORM映射减少了SQL编写工作量,提高了开发效率。
系统的数据库设计充分考虑了土地资源管理的业务特点,通过外键约束确保了数据的完整性,索引优化提升了查询性能。实体关系映射准确反映了业务对象之间的关联,为复杂的土地资源管理提供了坚实的数据基础。
在安全性方面,系统实现了多层次的安全防护,包括用户身份认证、操作权限控制、数据加密存储等机制。性能优化方面,通过连接池管理、缓存策略、懒加载等技术手段,确保了系统在高并发场景下的稳定运行。
系统的扩展性设计为后续功能升级预留了空间,模块化的架构使得新功能的添加不会影响现有系统的稳定性。维护性方面,清晰的代码结构、完整的注释文档、统一的异常处理机制,都大大降低了系统的维护成本。