`
Mr_Tank_
  • 浏览: 21224 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

注解方式实现SSH整合

 
阅读更多


之前有写过基于xml配置文件的SSH整合,但是经过一段时间的项目实践,发现配置文件的方式太过繁琐了,所以就尝试了使用注解的方式,果然没了庞大的配置文件,看起来就是舒服

下面是我使用注解重构之前项目的一个模块:

1、代码结构:

2、model:

package org.ytz.model;


import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;


@Entity
@Table(name = "t_fefreshthing", catalog = "course")
public class TRefreshThing implements java.io.Serializable {

	
	private static final long serialVersionUID = 1L;
	private Integer id;
	private String title;
	private String type;
	private String writter;

	private String content;
	private Date addTime;

	public TRefreshThing() {
	}

	public TRefreshThing(Integer id,String title, String type,String writter,String content, Date addTime) {
		super();
		this.id = id;
		this.title = title;
		this.type=type;
		this.writter=writter;
		this.content = content;
		this.addTime = addTime;
	}

	public TRefreshThing(Integer noteId) {
		this.id=noteId;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

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

	@Column(name = "content", length = 65535)
	public String getContent() {
		return this.content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	@Column(name = "title", length = 40)
	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
	@Column(name = "type", length = 10)
	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	
	
	
	@Column(name = "writter")
	public String getWritter() {
		return writter;
	}

	public void setWritter(String writter) {
		this.writter = writter;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "add_time", length = 10)
	public Date getAddTime() {
		return this.addTime;
	}

	public void setAddTime(Date addTime) {
		this.addTime = addTime;
	}
}

3、dao

package org.ytz.dao;

import java.util.List;

import org.ytz.model.TRefreshThing;

public interface RefreshThingDao {
	public boolean isExist(int id);

	public void save(TRefreshThing refreshThing);
	
	public void update(TRefreshThing refreshThing);
	
	public void delete(TRefreshThing refreshThing);

	public TRefreshThing getrefreshThing(int id);
	
	public List<TRefreshThing> getrefreshThings(int pageSize, int startRow);
	
	
	public List<TRefreshThing> findbywritter(String writter);
}


4、daoimpl:

package org.ytz.dao.impl;

import java.sql.SQLException;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Component;
import org.ytz.dao.RefreshThingDao;
import org.ytz.model.TRefreshThing;

@Component
public class RefreshThingDaoImpl implements RefreshThingDao {
	private HibernateTemplate hibernateTemplate;

	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}

	@Resource(name = "hibernateTemplate")
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}

	@Override
	public boolean isExist(int id) {
		@SuppressWarnings("unchecked")
		List<TRefreshThing> refreshThings = hibernateTemplate
				.find("from TRefreshThing as refreshThing");
		if (refreshThings != null && refreshThings.size() > 0) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public void save(TRefreshThing refreshThing) {
		hibernateTemplate.save(refreshThing);
	}

	@Override
	public void update(TRefreshThing refreshThing) {
		hibernateTemplate.update(refreshThing);
	}

	@Override
	public void delete(TRefreshThing refreshThing) {
		hibernateTemplate.delete(refreshThing);
	}

	@Override
	public TRefreshThing getrefreshThing(int id) {
		return (TRefreshThing) hibernateTemplate.load(TRefreshThing.class, id);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<TRefreshThing> getrefreshThings(int pageSize, int startRow) {
		final int _pageSize = pageSize;
		final int _startRow = startRow;
		return hibernateTemplate.executeFind(new HibernateCallback() {
			public List<TRefreshThing> doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session
						.createQuery("from TRefreshThing as refreshThing  order by refreshThing.id desc");
				query.setFirstResult(_startRow);
				query.setMaxResults(_pageSize);
				query.setCacheable(true);
				return query.list();
			}
		});
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<TRefreshThing> findbywritter(String writter) {
		// TODO Auto-generated method stub
		
		return hibernateTemplate.find("from TRefreshThing as refreshThing where refreshThing.writter='"+ writter+"'");
		//return null;
		
	}

}

5、service

package org.ytz.service;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;
import org.ytz.dao.RefreshThingDao;
import org.ytz.model.TRefreshThing;

@Component
public class RefreshThingService {
	private RefreshThingDao refreshThingDao;

	public void save(TRefreshThing refreshThing){
		this.refreshThingDao.save(refreshThing);
	}
	
	public void update(TRefreshThing refreshThing){
		System.out.println(refreshThing.getId());
		TRefreshThing temp = this.getrefreshThing(refreshThing.getId());
		temp.setContent(refreshThing.getContent());
		temp.setAddTime(new Date());
		temp.setTitle(refreshThing.getTitle());
		refreshThingDao.update(temp);
	}
	
	public List<TRefreshThing> getrefreshThings(int pageSize, int startRow) {
		return refreshThingDao.getrefreshThings(pageSize, startRow);
	}
	
	public TRefreshThing getrefreshThing(int id){
		return this.refreshThingDao.getrefreshThing(id);
	}
	
	
	public void deleterefreshThing(TRefreshThing refreshThing){
		refreshThingDao.delete(refreshThing);
	}
	
	public List<TRefreshThing> findbywritter(String writter) {
		return refreshThingDao.findbywritter(writter);
	}
	
	public RefreshThingDao getrefreshThingDao() {
		return refreshThingDao;
	}

	@Resource
	public void setrefreshThingDao(RefreshThingDao refreshThingDao) {
		this.refreshThingDao = refreshThingDao;
	}

}


6、dto

package org.ytz.dto;

import java.util.Date;

import org.ytz.model.TRefreshThing;

public class TRefreshThingAuthorization {
	private String content;

	
	public TRefreshThing getRefreshThing(){
		TRefreshThing refreshThing=new TRefreshThing();
		//refreshThing.setWritter(writter);
		refreshThing.setContent(content);
		refreshThing.setAddTime(new Date());
		return refreshThing;
	}
	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
	

}


7、action:


package org.ytz.action;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;


import org.apache.struts2.interceptor.SessionAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.ytz.dto.TRefreshThingAuthorization;
import org.ytz.model.TRefreshThing;
import org.ytz.service.RefreshThingService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@Component(value = "refreshThingAction")
@Scope("prototype")
public class RefreshThingAction extends ActionSupport implements SessionAware, ModelDriven<TRefreshThingAuthorization> {

	private static final long serialVersionUID = 1L;
	private TRefreshThingAuthorization refreshThing = new TRefreshThingAuthorization();
	private RefreshThingService refreshThingService;
	private Map<String, Object> session;
	private String refreshThing_result = "";
	private int startRow;
	private String writter;

	public String add() {
		//refreshThing.setAddTime(new Date());
		TRefreshThing trefreshThing=refreshThing.getRefreshThing();
		trefreshThing.setWritter((String) session.get("realname"));
		refreshThingService.save(trefreshThing);
		refreshThing_result = "/student/success.jsp";
		return "add";
	}

	public String find(){
	
		session.put("newslist", refreshThingService.getrefreshThings(15, 0));
		refreshThing_result = "/student/newsall.jsp";
		return "find";
	}
	
	public String findbywritter(){
		//session.remove("newslist");
		session.put("newslistwritter", refreshThingService.findbywritter(writter));
		refreshThing_result = "/student/newsall_writter.jsp";
		return "findbywritter";
	}
	
	public String update(){
		//refreshThingService.update(refreshThing);
		refreshThing_result = "/student/success.jsp";
		return"update";
	}
	
	public String delete(){
		//refreshThingService.deleterefreshThing(refreshThing);
		refreshThing_result = "/student/success.jsp";
		return "delete";
	}
	
	
	public RefreshThingService getNoteService() {
		return refreshThingService;
	}
	
	public List<TRefreshThing> check(){
		return null;
	}

	@Override
	public TRefreshThingAuthorization getModel() {
		return this.refreshThing;
	}
	public TRefreshThingAuthorization getRefreshThing() {
		return refreshThing;
	}
	public void setRefreshThing(TRefreshThingAuthorization refreshThing) {
		this.refreshThing = refreshThing;
	}

	public RefreshThingService getRefreshThingService() {
		return refreshThingService;
	}

	@Resource
	public void setRefreshThingService(RefreshThingService refreshThingService) {
		this.refreshThingService = refreshThingService;
	}


	public String getRefreshThing_result() {
		return refreshThing_result;
	}


	public void setRefreshThing_result(String refreshThing_result) {
		this.refreshThing_result = refreshThing_result;
	}

	public int getStartRow() {
		return startRow;
	}

	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}

	@Override
	public void setSession(Map<String, Object> arg0) {
		// TODO Auto-generated method stub
		this.session=arg0;
	}

	public String getWritter() {
		return writter;
	}

	public void setWritter(String writter) {
		this.writter = writter;
	}
	
}


8、struts配置:(使用通配符)

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

<struts>
	<package name="authorityRefreshthing" namespace="/refreshthing" extends="configuration">

		<action name="refreshthing_*" class="refreshThingAction" method="{1}" >
			<result name="{1}">${refreshThing_result}</result>
		</action>
    
	</package>
</struts>


9、Spring:beans.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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<context:annotation-config />
	<context:component-scan base-package="org.ytz" />

	
<!--修改数据库 : 其一 jdbc2.properties -->
	<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>

<!--其二: dialect   -->

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		
		 <property name="packagesToScan">
			<list>
				<value>org.ytz.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.format_sql">true</prop>
				<prop key="connection.pool_size">1</prop>
				<prop key="hbm2ddl.auto">update</prop>
				<prop key="current_session_context_class">thread</prop>
			</props>
		</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 * org.ytz.service..*.*(..))" />
		<aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" />
	</aop:config>

	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<tx:method name="chaPass*" propagation="REQUIRED" read-only="false"/>
			<tx:method name="add*" propagation="REQUIRED" read-only="false"/>
			<tx:method name="save*" propagation="REQUIRED" read-only="false"/>
			<tx:method name="update*" propagation="REQUIRED" read-only="false"/>
			<tx:method name="delete*" read-only="false" />
			<tx:method name="isExist" read-only="true" />
			<tx:method name="getAll*" read-only="true" />
			<tx:method name="get*" read-only="true" />
			<tx:method name="shareNote*" read-only="false" />
			<tx:method name="cancel*" read-only="false"/>
		</tx:attributes>
	</tx:advice>
	

	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	

</beans>


10、web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<welcome-file-list>
		<welcome-file>login.jsp</welcome-file>
	</welcome-file-list>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:beans.xml</param-value>
	</context-param>
	<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>
	<filter>
		<filter-name>permission</filter-name>
		<filter-class>org.ytz.utils.UserPermissionFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>permission</filter-name>
		<url-pattern>/admin/*</url-pattern>
	</filter-mapping>
	<error-page>
		<error-code>404</error-code>
		<location>/index.jsp</location>
	</error-page>
	
	 <!-- http://blog.csdn.net/lifuxiangcaohui/article/details/7006895 session 配置 -->
	 <session-config>
	 	 <session-timeout>30</session-timeout>
	  </session-config>
</web-app>



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics