[置顶] struts2+hibernate+spring整合(annotation版)

本博文使用struts2,hibernate,spring技术整合Web项目,同时分层封装代码,包含model层,DAO层,Service层,Action层。

在整合hibernate时使用annotation注释进行数据库的映射,整合spring时使用annotation进行IOC注入。

最后在DAO层中继承HibernateDaoSupport来编写代码。



首先看一下项目的目录:




需要的类库:









以person为例:


model层:

package com.hwadee.tradeUnion.model;


import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;


/**
 * Person entity. @author MyEclipse Persistence Tools
 */
@Entity
public class Person implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// Fields

	private int id;
	private String name;
	private String sex;
	private String nationality;
	private String area;
	private Date birthday;
	private String education;
	private String polity;
	private String company;
	private String idCard;
	private String phone;

	//------------------------------------------
	private Set<PersonApply> personApplys = new HashSet<PersonApply>();
	private Set<Honour> Honours = new HashSet<Honour>();
	private Death death;	
	
	
	// Property accessors
	@Id
	@GeneratedValue
	public int getId() {
		return this.id;
	}
	
	public void setId(int id) {
		this.id = id;
	}


	//-------------------------------------------------
	@OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.ALL})
	@JoinColumn(name="personId")
	public Set<PersonApply> getPersonApplys() {
		return personApplys;
	}

	public void setPersonApplys(Set<PersonApply> personApplys) {
		this.personApplys = personApplys;
	}

	
	
	
	@OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.ALL})
	@JoinColumn(name="personId")
	public Set<Honour> getHonours() {
		return Honours;
	}

	public void setHonours(Set<Honour> honours) {
		Honours = honours;
	}

	@OneToOne
	@JoinColumn(name="deathId")
	public Death getDeath() {
		return death;
	}

	public void setDeath(Death death) {
		this.death = death;
	}
	
	
	//------------------------------------------------------

	@Column(length = 30)
	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Column(length = 10)
	public String getSex() {
		return this.sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	@Column( length = 10)
	public String getNationality() {
		return this.nationality;
	}

	public void setNationality(String nationality) {
		this.nationality = nationality;
	}

	@Column( length = 50)
	public String getArea() {
		return this.area;
	}

	public void setArea(String area) {
		this.area = area;
	}

	public Date getBirthday() {
		return this.birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@Column( length = 10)
	public String getEducation() {
		return this.education;
	}

	public void setEducation(String education) {
		this.education = education;
	}

	@Column(length = 10)
	public String getPolity() {
		return this.polity;
	}

	public void setPolity(String polity) {
		this.polity = polity;
	}

	@Column( length = 30)
	public String getCompany() {
		return this.company;
	}

	public void setCompany(String company) {
		this.company = company;
	}

	@Column(length = 18)
	public String getIdCard() {
		return this.idCard;
	}

	public void setIdCard(String idCard) {
		this.idCard = idCard;
	}

	@Column(length = 11)
	public String getPhone() {
		return this.phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

}


DAO层:


package com.hwadee.tradeUnion.dao;

import java.util.List;
import org.hibernate.LockMode;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;

import com.hwadee.tradeUnion.model.Person;


@Component
public class PersonDAO extends HibernateDaoSupport {
	private static final Logger log = LoggerFactory.getLogger(PersonDAO.class);
	// property constants
	public static final String NAME = "name";
	public static final String SEX = "sex";
	public static final String NATIONALITY = "nationality";
	public static final String AREA = "area";
	public static final String EDUCATION = "education";
	public static final String POLITY = "polity";
	public static final String COMPANY = "company";
	public static final String ID_CARD = "idCard";
	public static final String PHONE = "phone";

	protected void initDao() {
		// do nothing
	}
	
	//--------注入spring配置的sessionFactory
	@Autowired  
	public void setMySessionFactory(SessionFactory sessionFactory){  
	    super.setSessionFactory(sessionFactory);  
	}  
	

	public void save(Person transientInstance) {
		log.debug("saving Person instance");
		try {
			getHibernateTemplate().save(transientInstance);
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
	}

	public void delete(Person persistentInstance) {
		log.debug("deleting Person instance");
		try {
			getHibernateTemplate().delete(persistentInstance);
			log.debug("delete successful");
		} catch (RuntimeException re) {
			log.error("delete failed", re);
			throw re;
		}
	}
	
	
	public void deleteById(int id){
		
		
		Person temp=this.findById(id);
		this.delete(temp);
		
		
	}
	
	
	public void update(Person temp){
		
		getHibernateTemplate().update(temp);
		
		
	}
	

	public Person findById(int id) {
		log.debug("getting Person instance with id: " + id);
		try {
			Person instance = (Person) getHibernateTemplate().get(
					Person.class, id);
			return instance;
		} catch (RuntimeException re) {
			log.error("get failed", re);
			throw re;
		}
	}

	public List findByExample(Person instance) {
		log.debug("finding Person instance by example");
		try {
			List results = getHibernateTemplate().findByExample(instance);
			log.debug("find by example successful, result size: "
					+ results.size());
			return results;
		} catch (RuntimeException re) {
			log.error("find by example failed", re);
			throw re;
		}
	}

	public List findByProperty(String propertyName, Object value) {
		log.debug("finding Person instance with property: " + propertyName
				+ ", value: " + value);
		try {
			String queryString = "from Person as model where model."
					+ propertyName + "= ?";
			return getHibernateTemplate().find(queryString, value);
		} catch (RuntimeException re) {
			log.error("find by property name failed", re);
			throw re;
		}
	}

	public List findByName(Object name) {
		return findByProperty(NAME, name);
	}

	public List findBySex(Object sex) {
		return findByProperty(SEX, sex);
	}

	public List findByNationality(Object nationality) {
		return findByProperty(NATIONALITY, nationality);
	}

	public List findByArea(Object area) {
		return findByProperty(AREA, area);
	}

	public List findByEducation(Object education) {
		return findByProperty(EDUCATION, education);
	}

	public List findByPolity(Object polity) {
		return findByProperty(POLITY, polity);
	}

	public List findByCompany(Object company) {
		return findByProperty(COMPANY, company);
	}

	public List findByIdCard(Object idCard) {
		return findByProperty(ID_CARD, idCard);
	}

	public List findByPhone(Object phone) {
		return findByProperty(PHONE, phone);
	}

	public List findAll() {
		log.debug("finding all Person instances");
		try {
			String queryString = "from Person";
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}

	public Person merge(Person detachedInstance) {
		log.debug("merging Person instance");
		try {
			Person result = (Person) getHibernateTemplate().merge(
					detachedInstance);
			log.debug("merge successful");
			return result;
		} catch (RuntimeException re) {
			log.error("merge failed", re);
			throw re;
		}
	}

	public void attachDirty(Person instance) {
		log.debug("attaching dirty Person instance");
		try {
			getHibernateTemplate().saveOrUpdate(instance);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public void attachClean(Person instance) {
		log.debug("attaching clean Person instance");
		try {
			getHibernateTemplate().lock(instance, LockMode.NONE);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public static PersonDAO getFromApplicationContext(ApplicationContext ctx) {
		return (PersonDAO) ctx.getBean("PersonDAO");
	}
	//输入Hql查询函数
	public List findByHql( String hql) {
		log.debug("finding  Admin By Hql");
		try {
			String queryString = hql;
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}
}


Service层:


package com.hwadee.tradeUnion.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.hwadee.tradeUnion.dao.PersonDAO;

import com.hwadee.tradeUnion.model.Person;

@Component
public class PersonService {

	private PersonDAO personDAO;


	public PersonDAO getPersonDAO() {
		return personDAO;
	}

	@Resource
	public void setPersonDAO(PersonDAO personDAO) {
		this.personDAO = personDAO;
	}

	
	public void add(Person kxw) {
	

		personDAO.save(kxw);
		
	}

	public void delete(Person kxw) {
	
		personDAO.delete(kxw);
	}

	public void deleteById(int id) {

		personDAO.deleteById(id);
	}

	public List<Person> list() {
	
	
		return personDAO.findAll();
		
		
	}

	public Person loadById(int id) {
		
		return personDAO.findById(id);
	}

	public void update(Person kxw) {
		
		personDAO.update(kxw);
	
	
}


Action层:

package com.hwadee.tradeUnion.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.hwadee.tradeUnion.model.Person;
import com.hwadee.tradeUnion.service.PersonService;
import com.opensymphony.xwork2.ActionSupport;


@Component("PersonAction")
public class PersonAction extends ActionSupport {
		
			/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

			private List<Person> personList;
		
			private PersonService personService; 
			private Person person;
			private int id;

			public PersonService getPersonService() {
				return personService;
			}


			@Resource
			public void setPersonService(PersonService personService) {
				this.personService = personService;
			}



			public String list() {
				personList = personService.list();

				return SUCCESS;
			}
			
			
			public String add() {
				personService.add(person);
		
				return SUCCESS;
			}
			public String update() {
				personService.update(person);
				return SUCCESS;
			}
			public String delete() {
					
				personService.deleteById(id);
				return SUCCESS;
			}
			public String addInput() {
				
				return INPUT;
			}
			public String updateInput() {
				this.person = this.personService.loadById(id);
				return INPUT;
			}
			
			public String load(){
				
				this.person=this.personService.loadById(id);
				
				return SUCCESS;
			}

			public List<Person> getPersonList() {
				return personList;
			}


			public void setPersonList(List<Person> personList) {
				this.personList = personList;
			}


			public Person getPerson() {
				return person;
			}


			public void setPerson(Person person) {
				this.person = person;
			}


			public int getId() {
				return id;
			}


			public void setId(int id) {
				this.id = id;
			}
		
	}


	


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.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
           
	
<context:annotation-config />
<context:component-scan base-package="com.hwadee" />
	<!-- 
		<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		
		
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/spring" />
		<property name="username" value="root" />
		<property name="password" value="bjsxt" />
		</bean>
	-->

	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>classpath:jdbc.properties</value>
		</property>
	</bean>

	<bean id="dataSource" destroy-method="close"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
	

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 
		<property name="annotatedClasses">
			<list>
				<value>com.bjsxt.model.User</value>
				<value>com.bjsxt.model.Log</value>
			</list>
		</property>
		 -->
		 <property name="packagesToScan">
			<list>
				<value>com.hwadee.tradeUnion.model</value>
				
			</list>
		</property>
		<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>
				<prop key="hibernate.format_sql">true</prop>
			</props>
		</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="bussinessService"
			expression="execution(public * com.hwadee.tradeUnion.service.*.*(..))" />
		<aop:advisor pointcut-ref="bussinessService"
			advice-ref="txAdvice" />
	</aop:config>

	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<!--<tx:method name="exists" read-only="true" />  -->
			<tx:method name="list" read-only="true" /> 
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="loadById*" read-only="true"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
			<tx:method name="deleteById*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>

</beans>


web.xml文件:


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" 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>Struts Blank</display-name>


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
     <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"-->   

   <!--   <context-param>

        <param-name>webAppRootKey</param-name>

        <param-value>ssh.root</param-value>

    </context-param>-->

    <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>classpath:log4j.properties</param-value>

    </context-param>

    <context-param>

        <param-name>log4jRefreshInterval</param-name>

        <param-value>60000</param-value>

    </context-param>
<!--配置log4j -->



    <listener>

        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

    </listener>
    
    
    <listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		<!-- default: /WEB-INF/applicationContext.xml -->
	</listener>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!-- <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>  -->
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>

		
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>GBK</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter>
		<filter-name>openSessionInView</filter-name>
		<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
		<init-param>
			<param-name>sessionFactoryBeanName</param-name>
			<param-value>sessionFactory</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>openSessionInView</filter-name>
		<url-pattern>/*</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>


jdbc.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3300/TradeUnion
jdbc.username=root
jdbc.password=123456


struts.xml:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">


<struts>
 
    <constant name="struts.devMode" value="true" />


      <package name="default" namespace="/" extends="struts-default">

        <action name="hello">
            <result>
                /hello.jsp
            </result>
        </action>
        
            <action name="*Login" class="{1}LoginAction">
          <result name="success">/{1}/{1}-Manage.jsp</result>
     <result name="fail">fail.jsp</result>
        </action>
           
        
 <action name="*-*-*" class="{2}Action" method="{3}">
          <result name="success">/{1}/{2}-{3}.jsp</result>
            <result name="input">/{1}/{2}-{3}.jsp</result>
          <result name="fail">/{1}/{2}-{3}-fail.jsp</result>
     
        </action>
        
    </package>
    
    <!-- Add packages here -->


</struts>






































































原文地址:https://www.cnblogs.com/keanuyaoo/p/3260434.html