SSH---整合Struts2&Spring&Hibernate(实例)
一.SSH回顾
Struts2:核心为过滤器+拦截器。过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy-->ActionInvocation-->各种拦截器。
Struts2初用无需过于执著细节,我们只需要知道,它就是用来负责处理请求!在原生Servlet、Serviec、Dao中,它负责Servlet的工作!
Spring:核心为IOC+DI+AOP。原理细节复杂,但道理和目的很明确简单!它的功能就是2个:1)方便地创建对象;2)方便加功能!
Hibernate:核心为通过配置各种映射关系,将Dao层操作,从操作数据库表格转换为操作java对象!它就是封装了JDBC操作数据库那一套操作!
作为初学,必须掌握它们的核心。操作问题必须通过多敲代码熟练并体会。
二、整合Struts2&Spring&Hibernate(实例)
本例目的:用SSH完成往数据库插入数据。
过程说明:在本例当中,用Sturts2的Action类处理请求,调用service处理;在dao层,利用Spring做的 Hibernate模板完成数据库操作;而各个类之间的对象创建,利用Spring的IOC和DI完成,简单来说,就是只在类中声名该对象,创建什么的工作,我们只负责配置即可!
结构说明:本例将源码列出,直接从源码体会,部分代码给出注释。
1 环境准备
jar包:过多,略。后期指望Maven完成
数据库:
CREATE TABLE `bbb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
)
2 源码
1)持久类对象:bean对象
package gaga.bean; import javax.persistence.*; /**
* @author Vincent
* @Description:
* @create 2018-02-05 20:15
*/
@Entity
@Table(name = "bbb", schema = "spring")
public class BbbEntity {
@Id
@Column(name = "id")
private int id; @Column(name = "category")
private String category; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getCategory() {
return category;
} public void setCategory(String category) {
this.category = category;
} @Override
public String toString() {
return "BbbEntity{" +
"id=" + id +
", category='" + category + '\'' +
'}';
}
}
2)Action类
package gaga.test; import com.opensymphony.xwork2.ActionSupport;
import gaga.bean.BbbEntity;
import gaga.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import javax.annotation.Resource; /**
* @author Vincent
* @Description:
* @create 2018-02-05 15:18
*/
@Scope("prototype")
@Controller
public class ActionDemo extends ActionSupport { @Resource(name = "us")
private UserService userService; /**
* 在Dao层保存数据,保存对象遗留到dao层直接创建处理
*
* @return
*/
public String save() {
System.out.println("ActionDemo#save......");
userService.save();
return NONE;
} /**
* 懒加载查询数据,条件遗留在dao层处理
*
* @return
*/
public String loadSave() {
System.out.println("Action#loadSave......");
BbbEntity bbbEntity = userService.loadSave();
System.out.println("loadSave result--->" + bbbEntity);
return NONE;
}
}
3)Service接口
package gaga.service; import gaga.bean.BbbEntity; /**
* @author Vincent
* @Description:
* @create 2018-02-05 16:02
*/
public interface UserService {
void save(); BbbEntity loadSave();
}
4)Service接口实现类
package gaga.service.serviceImpl; import gaga.bean.BbbEntity;
import gaga.dao.UserDao;
import gaga.service.UserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; /**
* @author Vincent
* @Description:
* @create 2018-02-05 16:03
*/
@Transactional
@Service("us")
public class UserServiceImpl implements UserService { @Resource(name = "userDao")
private UserDao userDao; @Override
public void save() {
System.out.println("UserServiceImpl#save....");
userDao.save(); } @Override
public BbbEntity loadSave() {
return userDao.loadSave();
}
}
5)Dao接口
package gaga.dao; import gaga.bean.BbbEntity; /**
* @author Vincent
* @Description:
* @create 2018-02-05 16:06
*/
public interface UserDao {
void save(); BbbEntity loadSave();
}
6)Dao接口实现类
package gaga.dao.UserDaoImpl; import gaga.bean.BbbEntity;
import gaga.dao.UserDao;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport; /**
* @author Vincent
* @Description:
* @create 2018-02-05 16:09
*/ public class UserDaoImpl extends HibernateDaoSupport implements UserDao { @Override
public void save() {
System.out.println("UserDaoImpl#save....."); BbbEntity user = new BbbEntity();
user.setCategory("eeeeee"); getHibernateTemplate().save(user); } @Override
public BbbEntity loadSave() {
System.out.println("UserDaoImpl#loadSave");
BbbEntity load = getHibernateTemplate().load(BbbEntity.class, 60); return load;
}
}
7)jdbc.properties(抽取出来,方便维护)
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql:///spring
user=root
password=123
8)log4j.properties(日志处理配置)
##\u8BBE\u7F6E\u65E5\u5FD7\u8BB0\u5F55\u5230\u63A7\u5236\u53F0\u7684\u65B9\u5F0F
log4j.appender.s=org.apache.log4j.ConsoleAppender
log4j.appender.s.Target=System.err
log4j.appender.s.layout=org.apache.log4j.PatternLayout
log4j.appender.s.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n ##\u8BBE\u7F6E\u65E5\u5FD7\u8BB0\u5F55\u5230\u6587\u4EF6\u7684\u65B9\u5F0F
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n ##\u65E5\u5FD7\u8F93\u51FA\u7684\u7EA7\u522B\uFF0C\u4EE5\u53CA\u914D\u7F6E\u8BB0\u5F55\u65B9\u6848
log4j.rootLogger=info, s, file
9)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: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/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <context:component-scan base-package="gaga"/> <bean id="userDao" class="gaga.dao.UserDaoImpl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property> <!--注解中找映射关系-->
<property name="packagesToScan" value="gaga.bean"/>
</bean> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClass}"/>
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
</bean> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
10)struts.xml
<?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>
<package name="struts2" namespace="/" extends="struts-default">
<action name="user_*" class="actionDemo" method="{1}"></action>
</package>
</struts>
11)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_3_1.xsd"
version="3.1">
<listener>
<!--监听项目启动,即初始化applicationContext配置文件-->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <!-- 这个过滤器,必须放在struts的过滤器的前面配置:配置处理懒加载问题 -->
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter> <filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping> <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>
3. 运行结果
访问:http://localhost:8080/user_save
访问成功,数据库插入一条数据
访问:http://localhost:8080/user_loadSave.action.loadSave
访问成功,成功过查出id为64的结果:result--->BbbEntity{id=64, category='eeeeee'}
SSH---整合Struts2&Spring&Hibernate(实例)的更多相关文章
- 整合struts2+spring+hibernate
一.准备struts2+spring+hibernate所须要的jar包: 新建web项目并将jar包引入到project项目中. 二.搭建struts2环境 a.在 ...
- Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SS ...
- SSH之IDEA2017整合Struts2+Spring+Hibernate
转自:https://blog.csdn.net/sysushui/article/details/68937005
- Eclipse搭建SSH框架(Struts2+Spring+Hibernate)
见识少的我经过一天多的研究才知道,在MyEclipse中搭好的框架的配置文件和jar包是通用的.接下来——亮剑! 工具:Eclipse+Tomcat+Mysql 一.先在Eclipse中配置好Tomc ...
- 用MyEclipse搭建SSH框架(Struts2 Spring Hibernate)
1.new一个web project. 2.右键项目,为项目添加Struts支持. 点击Finish.src目录下多了struts.xml配置文件. 3.使用MyEclipse DataBase Ex ...
- Spring、Struts2+Spring+Hibernate整合步骤
所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...
- Maven搭建struts2+spring+hibernate环境
Maven搭建struts2+spring+hibernate环境(一) 本文简单的使用STS的自带的maven插件工具搭建ssh(struts2+spring+hibernate)开发环境,图文并茂 ...
- SSH三大框架的搭建整合(struts2+spring+hibernate)(转)
原文地址:http://blog.csdn.net/kyle0349/article/details/51751913 尊重原创,请访问原文地址 SSH说的上是javaweb经典框架,不能说100% ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
随机推荐
- Xsolla和Hi-Rez工作室联手推行SMITE
视频游戏店面管理和计费解决方式的领导者,Xsolla.将重拳出击将与Hi-Rez游戏工作室合作.该工作室是一家美国的独立游戏开发商,主要开发MOBA游戏-SMITE. 支持全球600多种支付方式 Xs ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
- 2016/3/24 ①数据库与php连接 三种输出fetch_row()、fetch_all()、fetch_assoc() ②增删改时判断(布尔型) ③表与表之间的联动 ④下拉菜单 ⑤登陆 三个页面
①数据库与php连接 图表 header("content-type:text/html;charset=utf-8"); //第一种方式: //1,生成连接,连接到数据库上的 ...
- AnimatorCompatHelper clearInterpolator
supportLib 26.0.0+以上AnimatorCompatHelper类被移除 所以clearInterpolator(view)找不到 替换方案: TimeInterpolator mDe ...
- 使用cloudflare加速你的网站隐藏你的网站IP
前言 cloudflare 是一家国外的 CDN 加速服务商,还是很有名气的.提供免费和付费的加速和网站保护服务.以前推荐过的百度云加速的国外节点就是和 cloudflare 合作使用的 cloudf ...
- 吃CPU的openmp 程序
g++ -o eat -fopenmp eat.cpp #include "stdio.h" int main(int argc, char *argv[]) { #pragma ...
- mac系统下如何删除银行安全插件
要分类解决了,一般safair插件都是pkg包安装的 如果:1.制作者够良心,PKG安装包中植入了删除卸载功能,那就好办了,打开当时安装的pkg包,执行删除选项 2.没良心的,装了不好删的,我目前个人 ...
- 认识虚拟化(virtualization)
0. 基本定义 虚拟化的本质是将现有的计算机资源通过虚拟化的技术分割成若干个计算机资源,这些计算机资源互相独立:其最终目标是提高计算机的利用效率以最大化计算机的灵活性: 虚拟化为数据.计算能力.存储资 ...
- bzoj2743 [HEOI2012]采花——树状数组+离线
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2743 和 HH的项链 那道题很像,也是类似的做法: 但不同的是这里的点只有有前驱时才起作用: ...
- 2. Ext中关于Ext.QuickTips.init()的使用
转自:http://www.cnblogs.com/jianglan/archive/2011/08/26/2154120.html 在extJS的例子中,大部分都在程序第一行使用了如下语句:Ext. ...