项目的源代码如下
http://www.kuaipan.cn/file/id_140422426734362914.htm
1 web.xml的配置
有以下几个部分
1) 常量(根据前面的文章,如果applicationCoantext.xml放在了web-info平级的目录下,就可以不写,此处其实可以省略的,已经过了测试)
2)监听器
3)servlet---配置主类
4) 字符过滤器
代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>/SpringMVC_Hibernate_001</display-name>
<!-- <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param> -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>iby</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>iby</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<!-- 字符编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2 配置文件主要有两个,spring mvc自己的如下
需要配置的只有一个 就是前面的过滤和后面的后缀的过滤
<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
3 配置spring的主配置文件,里面整合了hibernate的内容
1) 配置 扫描包
<!-- 使用注解的包,包括子集 -->
<context:component-scan base-package="com.geloin.spring" />
2) 配置注解
<!-- 通过注解,把URL映射到Controller上,该标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
<mvc:annotation-driven />
3) 配置属性文件加载
<context:property-placeholder location="classpath*:jdbc.properties" />
4) 配置datasource
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="100"></property>
<property name="minIdle" value="20"></property>
<property name="maxWait" value="3000"></property>
<property name="initialSize" value="30"></property>
</bean>
5)配置sessionfactory
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>com.ibaiyun.pojo</value>
</list>
</property>
<!--
<property name="annotatedClasses">
<list>
<value>com.ibaiyun.pojo.Member</value>
</list>
</property>
-->
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.jdbc.batch_size=50
<!--
hibernate.cache.use_second_level_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
hibernate.cache.use_query_cache=true
-->
<!-- -->hibernate.hbm2ddl.auto=update
</value>
</property>
</bean>
[如果读者细心会发现前面的所有配置基本上和整合mybatis的一模一样,只是内容变了,其实框架都一模一样的]
下面的是整合的实际用到的 ,可以用到的时候再配置
6) 配置 hibernatetemplate,这个是代替了jdbctemplate
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
7) 下面三个是事务与切面的配置,还没弄懂呢,先写上,反正都是固定不变的【此处删除了也不影响项目运行,已经过验证】
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<aop:config>
<aop:pointcut id="businessService"
expression="execution(* com.ibaiyun.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!-- all methods starting with '*' are read-only -->
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
3 执行结果效果图
点击后的结果图
5 主类补充一下吧【比较简单】
package com.ibaiyun.controller;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ibaiyun.pojo.Member;
import com.ibaiyun.service.MemberService;
import com.ibaiyun.util.RequestUtil;
import com.ibaiyun.vo.RoleEnum;
/**
* 成员信息controller
* @author yang
*
*/
@Controller
@RequestMapping("/member")
public class MemberController {
private static Logger log = Logger.getLogger(MemberController.class);
private MemberService memberService;
/**
* 添加一个成员
* @param model
* @return
*/
@RequestMapping("/test")
public String saveMember(Model model) {
//Member member = new Member(1L,"hui","hui","hui",RoleEnum.A);
Member member = new Member("yang","yang","yang",RoleEnum.A);
memberService.save(member);
return "test";
}
/**
* 获取所有成员
* @param model
* @return
*/
@RequestMapping("/show")
public String getMember(Model model) {
//Member member = new Member(1L,"hui","hui","hui",RoleEnum.A);
List<Member> memberList = memberService.getAllMember();
System.out.println("show");
model.addAttribute("memberList", memberList);
return "show";
}
/**
* 获取所有成员
* @param model
* @return
*/
@RequestMapping("/showAll")
public void getAllMember(HttpServletResponse response,Model model) {
//Member member = new Member(1L,"hui","hui","hui",RoleEnum.A);
List<Member> memberList = memberService.getAllMember();
output(response,JSONArray.fromObject(memberList).toString());
}
/**
* 根据ID,获取一个成员,以json格式输出到页面
* @param request
* @param response
* @param model
*/
@RequestMapping("/showById")
public void getMemberById(HttpServletRequest request,HttpServletResponse response,Model model) {
String sid = RequestUtil.getString(request, "id", "1");
Long id = Long.parseLong(sid);
Member member = memberService.getMemberById(id);
model.addAttribute("member", member);
output(response,JSONObject.fromObject(member).toString());
}
@RequestMapping("/delById")
public void deleteMemberById(HttpServletRequest request,HttpServletResponse response,Model model) {
String sid = RequestUtil.getString(request, "id", null);
Boolean isDel = true;
if(sid==null){
isDel = false;
}
try {
memberService.deleteMemberById(Long.parseLong(sid));
} catch (Exception e) {
isDel = false;
log.info("根据ID删除成员失败。");
log.error(e.getMessage(), e);
}
output(response,isDel.toString());
}
/**
* 输出结果到response中
* @param response
* @param str
*/
private void output(HttpServletResponse response, String str) {
try {
response.getOutputStream().write(str.getBytes("UTF-8") );
response.getOutputStream().flush();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
public MemberService getMemberService() {
return memberService;
}
@Resource
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
}
6 补充一下 完整的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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.ibaiyun" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="100"></property> <property name="minIdle" value="20"></property> <property name="maxWait" value="3000"></property> <property name="initialSize" value="30"></property> </bean> <context:property-placeholder location="classpath*:jdbc.properties" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan"> <list> <value>com.ibaiyun.pojo</value> </list> </property> <!-- <property name="annotatedClasses"> <list> <value>com.ibaiyun.pojo.Member</value> </list> </property> --> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true hibernate.jdbc.batch_size=50 <!-- hibernate.cache.use_second_level_cache=true hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory hibernate.cache.use_query_cache=true --> <!-- -->hibernate.hbm2ddl.auto=update </value> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <aop:config> <aop:pointcut id="businessService" expression="execution(* com.ibaiyun.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="txManager"> <!-- the transactional semantics... --> <tx:attributes> <!-- all methods starting with '*' are read-only --> <tx:method name="*" propagation="SUPPORTS" read-only="true" /> <!-- other methods use the default transaction settings (see below) --> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="create*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> </beans>