Spring MVC3 Hibernate3 Annotation

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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>helpu</display-name>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/app-config.xml</param-value>
	</context-param>
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
				/WEB-INF/spring/mvc-config.xml
			</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>



	<filter>
		<filter-name>CharacterEncodingFilter</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>
		<init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>		
	</filter>
	<filter>
	
    <filter-name>openSessionInViewFilter</filter-name>
	    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	    <init-param>
	         <param-name>singleSession</param-name>
	         <param-value>false</param-value>
        </init-param>
        <init-param>      
		  <param-name>sessionFactoryBeanName</param-name>
		  <param-value>sessionFactory</param-value>   
		</init-param>
	</filter>
	<filter-mapping>
	    <filter-name>openSessionInViewFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
</web-app>



app-config.xml[Spring的数据访问配置文件]
<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost/helpu?useUnicode=true&amp;characterEncoding=utf-8</value></property>
        <property name="username"><value>root</value></property>
        <property name="password"><value></value></property>
    </bean>
    
     <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="packagesToScan" value="com.helpu" />
        <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
			<prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
        </property>
    </bean>
	
	<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
	<tx:annotation-driven/>
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>
    
    <context:component-scan base-package="com">    
       <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   
    </context:component-scan> 

</beans>


mvc-config.xml [spring mvc 配置文件]
<?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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

	<!-- Scans the classpath of this application for @Components to deploy as beans -->
	<context:component-scan base-package="com.helpu" >
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  
   		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>  
	</context:component-scan>
	
	<!-- Configures the @Controller programming model -->
	<mvc:annotation-driven />


	<!-- misc -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	    <property name="suffix" value=".jsp"/>
	</bean>
	
	<!-- Configures Hibernate - Database Config 
	<import resource="db-config.xml" />-->
      
</beans>


DAO接口[]
package com.helpu.dao;

import java.util.List;

/**
 * 
 * @author apple
 * @description 
 * @param <T>
 */
public interface IDAO<T> {
	T get(int id);
	T add(T obj);
	boolean delete(T obj);
	T update(T obj) throws Exception;
	List<T> query(String hql,Object... params);
	int count();
	int count(String hql,Object...params);
	List<T> query(String hql,int page,int pagesize,Object... params);
}

dao实现
package com.helpu.dao.impl;


import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.annotations.FlushModeType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateAccessor;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.helpu.dao.IDAO;


public abstract class DAOImpl<T> implements IDAO<T> {

	protected HibernateTemplate hibernateTemplate;
	
	@Autowired
	public void setSessionFactory(SessionFactory sessionFactory) {
		hibernateTemplate = new HibernateTemplate(sessionFactory);
		//hibernateTemplate.setFlushMode(HibernateAccessor.FLUSH_AUTO);
	}
	
	public T add(T obj) {
		hibernateTemplate.save(obj);
		return obj;
	}

	public boolean delete(T obj) {
		try{
			hibernateTemplate.delete(obj);
			return true;
		}catch (Exception e) {
			return false;
		}
	}

	@SuppressWarnings("unchecked")
	public T get(int id) {
		Class<T> clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
		return hibernateTemplate.get(clazz, id);
	}

	public T update(T obj) throws Exception {
		hibernateTemplate.update(obj);
		return obj;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<T> query(String hql, Object... params) {
		return (List<T>) hibernateTemplate.find(hql, params);
	}
	@SuppressWarnings("unchecked")
	@Override
	public int count() {		
		Class<T> clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
		String hql = "select count(*) from " + clazz.getName();
		return count(hql);
	}
	@Override
	@SuppressWarnings("rawtypes")
	public int count(String hql,Object...params) {		
		List result = hibernateTemplate.find(hql,params);		
		return ((Long) result.get(0)).intValue();
	}

	@Override
	public List<T> query(final String hql, final int page, final int pagesize, final Object... params) {
		@SuppressWarnings("unchecked")
		List<T> result = hibernateTemplate.executeFind(new HibernateCallback<List<T>>() {
			@Override
			public List<T> doInHibernate(Session session) throws HibernateException,	SQLException {
				Query q = session.createQuery(hql);
				q.setFirstResult(page*pagesize-pagesize);
				q.setMaxResults(pagesize);
				int i=0;
				for (Object o : params) {				
					q.setParameter(i, o);
					i++;
				}
				return q.list();
			}
		});
		return result;
	}
	
	
	

}


实际的DAO以及其接口

package com.helpu.dao;

import com.helpu.model.Category;

public interface ICategoryDAO extends IDAO<Category> {

}



package com.helpu.dao.impl;

import org.springframework.stereotype.Repository;

import com.helpu.dao.ICategoryDAO;
import com.helpu.model.Category;
@Repository
public class CategoryDAO extends DAOImpl<Category> implements ICategoryDAO {


}

Service层
package com.helpu.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.helpu.dao.ICategoryDAO;
import com.helpu.helper.JsonDataWrapper;
import com.helpu.model.Category;

@Service
public class CategoryService {
	@Autowired()
	@Qualifier("categoryDAO")
	private ICategoryDAO categoryDAO;

	public void setCategoryDAO(ICategoryDAO categoryDAO) {
		this.categoryDAO = categoryDAO;
	}
	@Transactional(readOnly=true)
	public JsonDataWrapper<Category> pages(int page,int pagesize){		
		int total = categoryDAO.count();
		List<Category> rows = categoryDAO.query("from Category", page, pagesize);
		JsonDataWrapper<Category> categories = new JsonDataWrapper<Category>(page, total, rows);
		return categories;
		
	}
	@Transactional
	public void update(Category c) throws Exception {
		this.categoryDAO.update(c);		
	}
	@Transactional
	public void save(Category c){
		this.categoryDAO.add(c);
	}
	@Transactional
	public void delete(int id) {
		this.categoryDAO.delete(this.categoryDAO.get(id));
		
	}
	@Transactional(readOnly=true)
	public Category getCategory(int id) {
		return this.categoryDAO.get(id);
	}
	@Transactional(readOnly=true)
	public List<Category> all() {
		return this.categoryDAO.query("from Category");
	}
		
}


spring的controller写法
package com.helpu.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.helpu.model.Category;
import com.helpu.service.CategoryService;

@Controller
@RequestMapping("/category")
public class SoftwareCategoryController {
	@RequestMapping("/show.do")
	public @ResponseBody Category show(@RequestParam int id){
		return this.categoryService.getCategory(id);
	}
	
	public void setCategoryService(CategoryService categoryService) {
		this.categoryService = categoryService;
	}


	@Autowired
	private CategoryService categoryService;
}

猜你喜欢

转载自zjnbshifox.iteye.com/blog/1064306