# ssh-admin-template
**Repository Path**: devape/ssh-admin-template
## Basic Information
- **Project Name**: ssh-admin-template
- **Description**: 整合 Spring+Struts+Hibernate
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-09-04
- **Last Updated**: 2025-10-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 整合步骤
### 1.添加依赖
```xml
8
8
UTF-8
5.3.39
2.5.33
5.6.15.Final
8.0.33
1.2.23
org.springframework
spring-web
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.aspectj
aspectjweaver
1.9.6
org.aspectj
aspectjrt
1.9.6
javax.servlet
javax.servlet-api
4.0.0
provided
org.apache.struts
struts2-core
${struts.version}
org.apache.struts
struts2-spring-plugin
${struts.version}
org.hibernate
hibernate-core
${hibernate.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
org.projectlombok
lombok
1.18.38
junit
junit
4.13.2
test
src/main/java
**/*.xml
```
### 2.配置web.xml
```xml
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
struts2
/*
```
### 3.配置applicationContext.xml
```xml
```
### 4.配置hibernate.cfg.xml
```xml
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/test
root
root
org.hibernate.dialect.MySQL8Dialect
innodb
true
true
update
```
### 5.配置struts.xml
```xml
```
### 6.创建数据库
```sql
CREATE TABLE IF NOT EXISTS role
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE IF NOT EXISTS user
(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
role_id INT
);
```
### 7.实体类及其映射
```java
package ssh.entity;
import lombok.Data;
@Data
public class Role {
private Integer id;
private String name;
}
```
```xml
```
```java
package ssh.entity;
import lombok.Data;
@Data
public class User {
private Integer id;
private String username;
private String password;
private Role role;
}
```
```xml
```
### 8.Dao
```java
package ssh.dao;
import lombok.Setter;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import ssh.entity.User;
import java.util.List;
public class UserDao {
@Setter
private SessionFactory sessionFactory;
public Session getSession() {
return sessionFactory.getCurrentSession();
}
public void deleteById(Integer id) {
String hql = "delete from User where id = :id";
getSession().createQuery(hql).setParameter("id",id).executeUpdate();
}
public List selectList() {
String hql = "from User u left join fetch u.role";
return getSession().createQuery(hql).list();
}
public void insert(User user) {
if (user == null) {
throw new IllegalArgumentException("User cannot be null");
}
getSession().save(user);
}
public User selectById(Integer id) {
if (id == null || id <= 0) {
return null;
}
String hql = "FROM User u LEFT JOIN FETCH u.role WHERE u.id = :id";
Query query = getSession().createQuery(hql, User.class);
query.setParameter("id", id);
return query.uniqueResult();
}
public void update(User user) {
if (user == null) {
throw new IllegalArgumentException("User cannot be null");
}
if (user.getId() == null) {
throw new IllegalArgumentException("User ID cannot be null for update");
}
getSession().update(user);
}
}
```
### 9.Service
```java
package ssh.service;
import lombok.Setter;
import ssh.dao.UserDao;
import ssh.entity.User;
import java.util.List;
public class UserService {
@Setter
private UserDao userDao;
public void deleteById(Integer id){
userDao.deleteById(id);
}
public List list(){
return userDao.selectList();
}
public void save(User user) {
userDao.insert(user);
}
public User getById(Integer id) {
return userDao.selectById(id);
}
public void update(User user) {
userDao.update(user);
}
}
```
### 10.Action
```java
package ssh.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import lombok.Getter;
import lombok.Setter;
import ssh.entity.User;
import ssh.service.UserService;
import java.util.List;
public class UserAction extends ActionSupport implements ModelDriven, Preparable {
@Setter
private UserService userService;
@Setter
private Integer id;
@Getter
private User model;
@Getter
private List userList;
public String viewCreate() {
return SUCCESS;
}
public String viewList() {
userList = userService.list();
return SUCCESS;
}
public String viewUpdate() {
model = userService.getById(id);
System.out.println(model);
return SUCCESS;
}
public void prepareCreate() {
model = new User();
}
public String create() {
userService.save(model);
return SUCCESS;
}
public String delete() {
userService.deleteById(id);
return SUCCESS;
}
public void prepareUpdate() {
model = new User();
}
public String update() {
userService.update(model);
return SUCCESS;
}
@Override
public void prepare() throws Exception {
}
}
```
### 11.applicationContext.xml配置 spring bean
```xml
```
### 12.struts.xml中配置action
```xml
/WEB-INF/views/user-create.jsp
/error.jsp
/WEB-INF/views/user-list.jsp
/error.jsp
/WEB-INF/views/user-update.jsp
/error.jsp
/user/viewList
/error.jsp
/user/viewList
/error.jsp
/user/viewList
/error.jsp
```
### 13.创建jsp
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
Title
新增
没有数据
| ID |
用户名 |
密码 |
角色 |
操作 |
| ${id} |
${username} |
${password} |
${role.name} |
编辑
删除
|
```
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
Title
```
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
Title
```
### 14.启动访问
http://localhost:8080/user/viewList
