spring4+hibernate4+struts2整合
来源:互联网 发布:微信营销好还是淘宝好 编辑:程序博客网 时间:2024/05/06 14:13
- 在pom文件中添加相关依赖(这里采取的是spring4.1.7和hibernate4.3.11),使用mysql数据库
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--servlet web相关依赖--> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!--Spring依赖--> <!--spring核心--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!--spring的DAO层依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!--spring的WEB层依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24.1</version> <exclusions> <exclusion> <artifactId>javassist</artifactId> <groupId>javassist</groupId> </exclusion> </exclusions> </dependency> <!-- struts2 spring 整合 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.24.1</version> </dependency> <!-- test for struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-junit-plugin</artifactId> <version>2.3.24.1</version> <scope>test</scope> </dependency> <!-- Hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.11.Final</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> <scope>runtime</scope> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency>
- 整合spring和hibernate先,配置文件如下
<?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" 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"> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClass}" /> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" lazy-init="false"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="hibernateProperties"> <props> <!-- 数据库方言 --> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <!-- 设置自动创建|更新|验证数据库表结构 --> <prop key="hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <!--是否启用二级缓存 --> <prop key="hibernate.cache.use_second_level_cache">false</prop> <!-- 是否启用查询缓存 --> <prop key="hibernate.cache.use_query_cache">false</prop> <!-- 自动提交事务 --> <prop key="hibernate.connection.autocommit">true</prop> </props> </property> <!-- 自动扫描实体对象 --> <property name="packagesToScan" value="com.zwq.entity" /> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <!-- 扫描有注解的包 --> <context:component-scan base-package="com.zwq.dao" /></beans>
jdbc.property:
jdbc.driverClass=com.mysql.jdbc.Driverjdbc.jdbcUrl=jdbc:mysql://localhost:3306/seckill?useUnicode=true&characterEncoding=utf8jdbc.user=rootjdbc.password=123456
@Autowired private SessionFactory sessionFatory; public List<Seckill> queryAll() { String hql = "from Seckill"; Session session = null; Query query = null; try { session = sessionFatory.openSession(); query = session.createQuery(hql); return query.list(); }finally { if(session!=null){ session.close(); } } } public Seckill queryById(long id) { Session session = null; try { session = sessionFatory.openSession(); String hql = "from Seckill where seckillId="+id; Query query = session.createQuery(hql); List<Seckill> list = query.list(); if (list.size()>0){ return list.get(0); }else { return null; } }finally { if(session!=null){ session.close(); } } } public Seckill save(Seckill seckill) { Session session = null; try { session = sessionFatory.openSession(); session.save(seckill); }finally { if(session!=null){ session.close(); } } return seckill; }
这是两个查询语句和保存语句,这里有个坑,如果开启session的时候采用getCurrentSession() 方法会抛出一个 org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread异常,经查询发现是hibernate4不知此hibernate3的getCurrentSession() 方法,所以这里使用openSession()方法获取session。
更新删除代码如下
@Autowired private HibernateTemplate hibernateTemplate; public void updateById(Seckill seckill) { hibernateTemplate.update(seckill); } public void delete(Seckill seckill) { hibernateTemplate.delete(seckill); }
这里很奇怪,session方法也有update和delete方法,但是,如果和保存一样调用的话,没反应。好像是和事务的开启,提交有关。如果我手动在程序里面手动开启事务的话,是可以更新和删除操作的。 Transaction transaction = session.beginTransaction();
session.update(seckill);
transaction.commit();
单元测试dao层
在测试类上加上注解@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(“classpath:spring/spring-dao.xml”)
映入配置文件和开启Junit4
@Resource
private SeckillDao dao;
@Test
public void queryAll() throws Exception {
List seckills = dao.queryAll();
for (Seckill seckill:seckills){
System.out.println(seckill);
}
}
在seckill里面重写tostring方法就能打印出具体信息了。
其他几个方法类似
今天先到这里,下次再整合struts2整合struts2
web.xml配置
<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> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <!--spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </context-param>
之前使用struts2的dispatcher时采用org.apache.struts2.dispatcher.FilterDispatcher
时,提示已经过时,经查证发现struts2 版本大于2.1.3的话推荐使用StrutsPrepareAndExecuteFilter
- struts.xml配
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <!-- 指定国际化编码所使用的字符集 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <!-- 所有Action定义都可以在package下 --> <package name="com.zwq.weg" extends="struts-default"> <action name="seckill" class="com.zwq.web.SeckillAction"> <result name="error">/error.jsp</result> <result name="success">/list.jsp</result> </action> <action name="seckillA" class="com.zwq.web.SeckillAction" method="queryById"> <result name="success">/seckillList.jsp</result> </action> </package></struts>
编写action
public class SeckillAction extends ActionSupport{ //懒得去xml配置bean了,这里直接通过注解注入 @Autowired private SeckillService seckillService; @Override public String execute() throws Exception { List<Seckill> seckills = seckillService.queryAll(); ActionContext.getContext().getSession().put("seckills",seckills); return SUCCESS; } private Integer seckillId; public SeckillService getSeckillService() { return seckillService; } public void setSeckillService(SeckillService seckillService) { this.seckillService = seckillService; } public Integer getSeckillId() { return seckillId; } public void setSeckillId(Integer seckillId) { this.seckillId = seckillId; } public String queryById(){ List<Seckill> seckills = null; if(seckillId!=null){ seckills = new ArrayList<Seckill>(); Seckill seckill = seckillService.queryById(seckillId); seckills.add(seckill); }else{ seckills = seckillService.queryAll(); } ActionContext.getContext().getSession().put("seckills",seckills); return SUCCESS; }}
- 编写前台页面代码,这里采用bootstrap框架
ajaxList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><html><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>秒杀展示</title> <!-- Bootstrap --> <link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="http://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="http://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script> <![endif]--></head><body><div class="container"> <div class="panel panel-default"> <div class="panel-body"> <form class="form-horizontal" role="form" id="seckillForm" action="/seckill" method="get"> <div class="form-group"> <label for="seckillId" class="col-sm-2 control-label">秒杀ID</label> <div class="col-sm-10"> <input type="text" class="form-control" id="seckillId"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="button" class="btn btn-default" id="query-seckill">查询</button> </div> </div> </form> </div> </div> <div id="page-list"></div></div></body><!-- jQuery (necessary for Bootstrap's JavaScript plugins) --><script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script><script type="text/javascript"> $(document).ready(function () { $('#page-list').load("/seckillA"); $('#query-seckill').click(function () { var str ="/seckillA?1=1"; if($('#seckillId').val()!=null){ str = str+"&seckillId="+$('#seckillId').val(); } $('#page-list').load(str); }); });</script></html>
seckillList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!-- 显示查询结果 --><div class="panel panel-default"> <div class="panel-heading">结果列表</div> <div class="panel-body"> <table class="table table-bordered"> <thead> <tr> <th>秒杀编号</th> <th>秒杀项目</th> <th>数量</th> <th>开始时间</th> <th>结束时间</th> <th>创建时间</th> </tr> </thead> <tbody> <c:forEach var="seckill" items="${seckills}"> <tr> <td>${seckill.seckillId}</td> <td>${seckill.name}</td> <td>${seckill.number}</td> <td>${seckill.startTime}</td> <td>${seckill.endTime}</td> <td>${seckill.createTime}</td> </tr> </c:forEach> </tbody> </table> </div></div>
这样一个简单的spring4+hibernate4+struts2的查询功能就写完了,其他功能后续完善。
页面效果图
输入条件1000后
这里没有采用bootstrap自带的查询方法,采取的是显示列表这个panel刷新的方式,算是一种偷懒的方式了。
- Struts2+Hibernate4+Spring4整合
- spring4+hibernate4+struts2整合
- Spring4 整合Hibernate4,Struts2
- struts2+hibernate4+spring4整合步骤
- Struts2.3+Hibernate4.3+Spring4.0整合
- struts2.3.16+spring4.0.0+hibernate4.4.0整合
- spring4 hibernate4 struts2 maven的整合
- Struts2、Spring4、Hibernate4整合 超详细教程
- Eclipse+Struts2+Hibernate4+Spring4的整合
- struts2+hibernate4+spring4的整合demo
- struts2、spring4、hibernate4(ssh)整合案例
- 整合Struts2、Hibernate4.3和Spring4.2
- Struts2.5.12+hibernate4.3.11+spring4.3.9整合
- spring4如何整合hibernate4
- Spring4+Hibernate4整合
- spring4整合hibernate4
- spring4 hibernate4(5) 整合
- spring4, hibernate4 整合问题
- Web前端工程师要掌握的基础知识和技能
- camera首次开启,权限提示时home退出,两次点击camera才可以进camera
- 数据库性能优化三:程序操作优化
- (三十七)进程组
- 第四章 高级查询
- spring4+hibernate4+struts2整合
- WPF学习笔记(1)——初识WPF
- 持续集成工具Hudson安装方法(非常简单)
- ArcGIS Desktop 10.2 完全破解安装教程(含win7 32/64位+下载地址+亲测可用)
- AFNetworking 3.0迁移指南
- LeetCode学习之路-Longest Palindromic Substring
- 闯过这 54 关,点亮你的 Git 技能树
- 大华网络摄像机升级软件binwalk分析
- 设置线程池的大小