# 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 ![](./project.png)