现在的位置: 首页 > 综合 > 正文

springmvc整合hibernate简单实例

2013年03月24日 ⁄ 综合 ⁄ 共 11376字 ⁄ 字号 评论关闭

项目的源代码如下

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>





抱歉!评论已关闭.