项目结构图
首先需要在WEB-INF下创建lib包,导入SSH项目整合jar包
云盘链接:https://pan.baidu.com/s/1MEla6fzTLH3pSDMZvqqv5Q
提取码:5zka
接下来配置WEB-INF=>web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--交给spring托管-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
配置resources=>applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="userController" class="com.tang.controller.UserController">
<property name="userService" ref="userService"/>
</bean>
<bean id="names" class="com.tang.pojo.Names"/>
<bean id="userService" class="com.tang.service.Impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.tang.dao.Impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--配置sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
</beans>
配置resources=>applicationContext.xml文件,
这里需要注意,controller=>UserController.java被spring托管了,struts.xml的class=""写的是spring托管后的name
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true"/>
<package name="default" namespace="/" extends="struts-default">
<action name="save" class="userController" method="save">
<result name="none">/a.jsp</result>
</action>
<action name="delete" class="userController" method="delete">
<result name="index">/index.jsp</result>
</action>
</package>
</struts>
写到这里创建com.tang.controller=>UserController类
package com.tang.controller;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.tang.pojo.Names;
import com.tang.service.UserService;
public class UserController extends ActionSupport implements ModelDriven<Names> {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
private Names names = new Names();
@Override
public Names getModel() {
return names;
}
/**
* 增加一个姓名
* @return
*/
public String save() {
userService.addName(names);
return NONE;
}
public String delete(){
userService.deleteName(names);
return "index";
}
}
写到这里启动Tomcat看项目测试项目是否能够正常启动,和能否进入controller层
配置resources=>hibernate.cfg.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接配置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/m?serverTimezone=UTC&characterEncoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<!-- 每个数据库都有1个,针对特定的关系型数据库生成优化的SQL -->
<property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<!-- 设置默认的数据库连接池 -->
<property name="connection.pool_size">5</property>
<!-- 显示SQL -->
<property name="show_sql">true</property>
<!-- 格式化SQL -->
<property name="format_sql">true</property>
<!-- 根据schema更新数据表的工具 -->
<property name="hbm2ddl.auto">update</property>
<!-- 数据表映射配置文件 -->
<mapping resource="names.hbm.xml"/>
</session-factory>
</hibernate-configuration>
创建com.tang.pojo=>Names.java
package com.tang.pojo;
public class Names {
private Integer id;
private String name;
/*
省略get,set,toStrong()方法
*/
}
写完实体类后配置names.hbm.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.tang.pojo.Names" table="names">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="string"/>
</class>
</hibernate-mapping>
com.dao=>UserDao.java
package com.tang.dao;
import com.tang.pojo.Names;
import java.util.List;
public interface UserDao {
boolean addName(Names names);
boolean deleteName(int id);
boolean updateName(Names names);
List<Names> namesList();
}
com.tang.dao.Impl=>UserDaoImpl.java
package com.tang.dao.Impl;
import com.tang.dao.UserDao;
import com.tang.pojo.Names;
import org.hibernate.*;
import org.hibernate.classic.Session;
import java.util.List;
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public boolean addName(Names names) {
System.out.println("UserDaoImpl=>addName()");
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
try {
session.save(names);
ts.commit();
return true;
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
System.out.println(e);
}
return false;
}
@Override
public boolean deleteName(int id) {
System.out.println("UserDaoImpl=>delete()");
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
try {
Names names = (Names) session.get(Names.class, id);
session.delete(names);
ts.commit();
return true;
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
System.out.println(e);
}
return false;
}
@Override
public boolean updateName(Names names) {
return false;
}
@Override
public List<Names> namesList() {
List<Names> namesList=null;
Session session = sessionFactory.openSession();
try {
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Names");
namesList = query.list();
tx.commit();
} catch (HibernateException e) {
System.out.println(e);
}
return namesList;
}
}
com.tang.service=>UserService.java
package com.tang.service;
import com.tang.pojo.Names;
import java.util.List;
public interface UserService {
boolean addName(Names names);
boolean deleteName(Names names);
boolean updateName();
List<Names> namesList();
}
com.tang.service.Impl=>UserServiceImpl.java
package com.tang.service.Impl;
import com.tang.dao.UserDao;
import com.tang.pojo.Names;
import com.tang.service.UserService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Transactional //作用于类,那么整个类的所有方法度开启事务
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public boolean addName(Names names) {
userDao.addName(names);
return true;
}
@Override
public boolean deleteName(Names names) {
userDao.deleteName(names.getId());
return true;
}
@Override
public boolean updateName() {
return false;
}
@Override
public List<Names> namesList() {
return null;
}
}
简单的增加页面 web=>index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/save" method="post">
姓名:<input type="text" name="name"/>
<input type="submit">
</form>
</body>
</html>
简单的删除页面 web=>a.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/delete" method="post">
<input type="text" name="id">
<input type="submit">
</form>
</body>
</html>
结论:整合时,敲代码须步步为营,写一步测一步,这样最能节省时间,也能最大程度提高效率,减少出现bug的概率,就算出现了bug,也能轻松找到bug所在的位置。