SSH整合

<?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">
	
	<!-- 1 属性文件加载 指定spring容器要加载的属性文件 用来连接数据库的  -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<!-- 加载位于src目录下的 jdbc.properties -->
		<property name="location">
        	<value>classpath:/jdbc.properties</value>
    	</property>
		
		<!-- 加载位于webapp目录下的文件  
		<property name="locations">
			<list>
				<value>/WEB-INF/db/jdbc.properties</value>
			</list>
		</property>
		-->
	</bean>
	
	
	<!-- 2 把类交给spring管理 扫描加注解的方式 包及其子包-->
	<context:component-scan base-package="com.scottwong"/>
	
	<!-- 3 配置c3p0数据源-->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	
		<property name="driverClass" value="${jdbc.driver}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
		<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
		<property name="initialPoolSize" value="1" />
		<!--连接池中保留的最小连接数。-->
		<property name="minPoolSize" value="1" />
		<!--连接池中保留的最大连接数。Default: 15 -->
		<property name="maxPoolSize" value="300" />
		<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
		<property name="maxIdleTime" value="60" />
		<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
		<property name="acquireIncrement" value="5" />
		<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
		<property name="idleConnectionTestPeriod" value="60" />
	</bean>
	
	<!-- 4 把SessionFactory交给spring管理 单例 spring和hibernate集成-->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="annotatedClasses" ref="annotatedClasses"/>   
		<property name="hibernateProperties">
			 <value>
			      hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
			      hibernate.hbm2ddl.auto=update
			      hibernate.show_sql=false
			      hibernate.format_sql=false
			  </value>
		 </property>
	</bean>
	
	<!-- 5 指定哪些类是和数据库中的表一一对应的。-->  
	<bean	id="annotatedClasses" class="org.springframework.beans.factory.config.ListFactoryBean">   
    	<property name="sourceList">   
	        <list>   
	            <value>com.scottwong.bean.Employee</value>   
	            <value>com.scottwong.bean.Department</value>
	        </list>   
    	</property>   
	</bean>   
	
	<!-- 6 配置spring的事物管理器 把hibernate的事务管理交给spring -->
	<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	
	<!-- 7 使用基于注解配置事务 -->
	<tx:annotation-driven transaction-manager="txManager"/>
</beans>

 以上是 bean.xml  一共是7步 用的是spring annotation

---------------------------------------------------------------------------------------------------------------------------------------------------

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">

	
	<!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
	<context-param>
	   <param-name>contextConfigLocation</param-name>
	   <param-value>classpath:beans.xml</param-value>
	</context-param>
	

	<!-- 对Spring容器进行实例化 -->
	<listener>
	      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<context-param> 
		<param-name>webAppRootKey</param-name> 
		<param-value>webName.root</param-value> 
	</context-param>
	
	<!--由Sprng载入的Log4j配置文件位置-->   
	<context-param>   
	       <param-name>log4jConfigLocation</param-name>   
	       <param-value>classpath:log4j.properties</param-value>   
	</context-param>   
	  
	<!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->   
	<context-param>   
	       <param-name>log4jRefreshInterval</param-name>   
	       <param-value>60000</param-value>   
	</context-param>   
	  
	<!--Spring log4j Config loader-->   
	<listener>   
	       <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>   
	</listener>  
	

   <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>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


jdbc.properties

jdbc.username=root
jdbc.password=qq123456
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://127.0.0.1\:3306/ssh2?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.show_sql=true
 


 

log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug

### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace



 

package com.scottwong.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;
import com.scottwong.bean.Employee;
import com.scottwong.service.EmployeeService;
import com.scottwong.util.PageBean;

@Controller
public class EmployeeAction extends ActionSupport {
	@Resource
	private EmployeeService employeeService;
	
	private int page;    //第几页
    private PageBean pageBean;    //包含分布信息的bean
    
    public int getPage() {
        return page;
    }

    public void setPage(int page) {        //若URL中无此参数,会默认为第1页
        this.page = page;
    }

    public PageBean getPageBean() {
        return pageBean;
    }

    public void setPageBean(PageBean pageBean) {
        this.pageBean = pageBean;
    }
	
	
	private List<Employee> listEmployees;    //用来页面显示
	private int id;                          //用来接收参数
	private Employee employee;               //用来页面显示
	
	
	public Employee getEmployee() {
		return employee;
	}

	public void setEmployee(Employee employee) {
		this.employee = employee;
	}

	public int getId() {
		return id;
	}

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

	public List<Employee> getListEmployees() {
		return listEmployees;
	}

	public void setListEmployees(List<Employee> listEmployees) {
		this.listEmployees = listEmployees;
	}
	
	/**
	 * http://localhost:8080/ssh2_1.1/employee/employeeAction!add.action
	 */
	public String add(){
//		Employee transientInstance = new Employee("黄家驹",200000,3);
//		employeeService.save(transientInstance);
		return "add";
	}
	
	/**
	 * 显示所有的雇员
	 * http://localhost:8080/ssh2_1.4/employee/employeeAction!list.action
	 */
	public String list(){
		this.pageBean = employeeService.queryForPage(10, page);
		return "list";
	}
	
	
	/**
	 * 显示一个雇员
	 * http://localhost:8080/ssh2_1.1/employee/employeeAction!show.action?id=10
	 */
	public String show(){
		employee = employeeService.findById(id);
		return "show";
	}
	
	
	/**
	 * 修改雇员信息前收集数据
	 * @return
	 */
	public String preUpdate(){
		employee = employeeService.findById(id);
		return "preupdate";
	}
	
	/**
	 * 更新数据
	 * @return
	 */
	public String update(){
		employeeService.update(employee);
		return "update";
	}
	

}


 

package com.scottwong.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.scottwong.bean.Employee;
import com.scottwong.dao.EmployeeDao;
import com.scottwong.dao.PageDao;
import com.scottwong.util.PageBean;

@Service
public class EmployeeService {
	
	@Resource
	private EmployeeDao employeeDao;
	
	@Resource
	private PageDao pageDao;
	
	/** 
     * 分页查询
     * @param currentPage 当前第几页
     * @param pageSize    每页大小
     * @return 封闭了分页信息(包括记录集list)的Bean
     */ 
    public PageBean queryForPage(int pageSize,int page){
        final String hql = "from Employee";        //查询语句
        int allRow = pageDao.getAllRowCount(hql);    //总记录数
        int totalPage = PageBean.countTotalPage(pageSize, allRow);    //总页数
        final int offset = PageBean.countOffset(pageSize, page);    //当前页开始记录
        final int length = pageSize;    //每页记录数
        final int currentPage = PageBean.countCurrentPage(page);
        List list = pageDao.queryForPage(hql,offset, length);        //"一页"的记录
        
        //把分页信息保存到Bean中
        PageBean pageBean = new PageBean();
        pageBean.setPageSize(pageSize);    
        pageBean.setCurrentPage(currentPage);
        pageBean.setAllRow(allRow);
        pageBean.setTotalPage(totalPage);
        pageBean.setList(list);
        pageBean.init();
        return pageBean;
    }
	
	public void save(Employee transientInstance){
		this.employeeDao.save(transientInstance);
	}
	
	public List<Employee> findAllEmployees(){
		return this.employeeDao.findAllEmployees();
	}
	
	public Employee findById(int id) {
		return this.employeeDao.findById(id);
	}
	
	public void update(Employee transientInstance) {
		this.employeeDao.update(transientInstance);
	}
	
	public List<Employee> findAll(){
		return this.employeeDao.findAll();
	}
	public List<Employee> findByHQL(int id,String name){
		return this.employeeDao.findByHQL(id,name);
	}
	public List<Employee> findEmployeesByemployeeName(final String name){
		return this.employeeDao.findEmployeesByemployeeName(name);
	}
	public List<Employee> findByCriteria(int id, String name) {
		return this.employeeDao.findByCriteria(id, name);
	}
	
	public List<Employee> findByDongTaiBangDing(int id, String name) {
		return this.employeeDao.findByDongTaiBangDing(id, name);
	}

}


 

package com.scottwong.dao;

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

import javax.xml.registry.infomodel.User;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.stereotype.Repository;

import com.scottwong.bean.Employee;

@Repository
public class EmployeeDao extends BaseDao {
	private static final Log log = LogFactory.getLog(EmployeeDao.class);

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

	public void delete(Employee persistentInstance) {
		log.debug("deleting Employee instance");
		try {
			getHibernateTemplate().delete(persistentInstance);
			log.info("delete successful");
		} catch (RuntimeException re) {
			log.error("delete failed", re);
			throw re;
		}
	}

	public void update(Employee transientInstance) {
		log.info("update Employee instance");
		try {
			getHibernateTemplate().update(transientInstance);
			getHibernateTemplate().flush();
			log.info("update successful");
		} catch (RuntimeException re) {
			log.error("update failed", re);
			throw re;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Employee> findAllEmployees() {
		log.info("finding all Employee instances");
		try {
			String queryString = "from Employee";
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}

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

	public List findByExample(Employee instance) {
		log.debug("finding Employee instance by example");
		try {
			List results = getHibernateTemplate().findByExample(instance);
			log.info("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.info("finding Employee instance with property: " + propertyName
				+ ", value: " + value);
		try {
			String queryString = "from Employee as model where model."
					+ propertyName + "= ?";
			return getHibernateTemplate().find(queryString, value);
		} catch (RuntimeException re) {
			log.error("find by property name failed", re);
			throw re;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Employee> findAll() {
		return (List<Employee>) this.getHibernateTemplate().findByCriteria(
				DetachedCriteria.forClass(Employee.class));

	}

	@SuppressWarnings("unchecked")
	public List<Employee> findByHQL(final int id, final String name) {
		return (List<Employee>) this.getHibernateTemplate().execute(
				new HibernateCallback() {
					public Object doInHibernate(Session session) throws HibernateException,SQLException {
						List result = session.createCriteria(Employee.class)
								      .add(Restrictions.ge("employeeId", id)) //ge >= bigger than and equal
								      .add(Restrictions.like("employeeName", "%" + name + "%"))
								      .list();
						return result;
					}
				});

	}
	
	@SuppressWarnings("unchecked")
	public List<Employee> findByCriteria(final int id, final String name) {
		return (List<Employee>) this.getHibernateTemplate().execute(
				new HibernateCallback() {
					public Object doInHibernate(Session session) throws HibernateException,SQLException {
						Criteria criteria = session.createCriteria(Employee.class);
						criteria.add(Restrictions.like("employeeName", name+"%")); // Employee有个属性叫name 
						criteria.add(Restrictions.gt("employeeId", id));          // Employee有个属性叫employeeId   
						List<User> list = (List<User>) criteria.list();  
						return list;
					}
				});

	}
	
	/**
	 * 动态绑定参数
	 * @param id
	 * @param name
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Employee> findByDongTaiBangDing(final int id, final String name) {
		return (List<Employee>) this.getHibernateTemplate().execute(
				new HibernateCallback() {
					public Object doInHibernate(Session session) throws HibernateException,SQLException {
						String hql ="from Employee as e where e.employeeId >= :id and e.employeeName like :name";
						Query query = session.createQuery(hql);
						query.setInteger("id", id);
						query.setString("name", "%"+name+"%");
						List<User> list = (List<User>) query.list();  
						return list;
					}
				});

	}

	@SuppressWarnings("unchecked")
	public List<Employee> findEmployeesByemployeeName(final String name) {
		return (List<Employee>) this.getHibernateTemplate().execute(
				new HibernateCallback() {
					public Object doInHibernate(Session session)
							throws HibernateException {
						List<Employee> result = session.createCriteria(
								Employee.class).add(
								Restrictions.like("employeeName", name + "%"))
								.list();
						return result;
					}
				});
	}
}


 

package com.scottwong.dao;

import javax.annotation.Resource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseDao extends HibernateDaoSupport {

	

	@Resource(name = "sessionFactory") //为父类HibernateDaoSupport注入sessionFactory的值
    public void setSuperSessionFactory(SessionFactory sessionFactory) {
        try{
        	super.setSessionFactory(sessionFactory);
        }catch (Exception e) {
        	e.printStackTrace();
		}
        
    }


}


 

<?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>
	<!-- 默认的视图主题 -->
	<constant name="struts.ui.theme" value="simple"/>
	<constant name="struts.configuration.xml.reload" value="true" />
    <constant name="struts.devMode" value="true" />

	<!-- 使用spring的对象工厂替换struts2默认的对象工厂  由 StrutsSpringObjectFactory 负责Action对象的创建 从spring容器里获取bean实例 -->
	<!-- org.apache.struts2.spring.StrutsSpringObjectFactory -->
	<!-- 配也可以,不配也可以 -->
	<constant name="struts.objectFactory" value="spring" />

	<!-- http://localhost:8080/ssh2/employee/list.action -->
	<package name="employee" namespace="/employee" extends="struts-default">
		<action name="employeeAction" class="employeeAction">
			<result name="add">/employee/add_success.jsp</result>
			<result name="list">/employee/index.jsp</result>
			<result name="preupdate">/employee/pre_update.jsp</result>
			<result name="update" type="redirect" >employeeAction!list.action</result>
		</action>
		
		<action name="listmemberAction" class="listmemberAction">
			<result name="list">/listMember.jsp</result>
		</action>

	</package>
	
	<package name="login" namespace="/login" extends="struts-default">
		<action name="loginAction" class="loginAction">
		</action>

	</package>
</struts>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值