基于maven整合SSH

来源:互联网 发布:网上购物系统源码 编辑:程序博客网 时间:2024/05/20 08:26

pom.xml

<?xml version="1.0" encoding="utf-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>ssh</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>ssh</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>4.1.1.RELEASE</spring.version><hibernate.version>4.3.5.Final</hibernate.version><struts.version>2.3.16.3</struts.version></properties><dependencies><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.7</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.0</version></dependency><!-- struts --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>${struts.version}</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>${struts.version}</version></dependency><dependency><groupId>org.apache.struts.xwork</groupId><artifactId>xwork-core</artifactId><version>${struts.version}</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>${struts.version}</version></dependency><!-- hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.hibernate.common</groupId><artifactId>hibernate-commons-annotations</artifactId><version>4.0.4.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-c3p0</artifactId><version>${hibernate.version}</version></dependency><!-- J2EE --><dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0</version><scope>provided</scope></dependency><!-- Servlet --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!-- JSP --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.2-b01</version></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><!-- json数据 --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><!-- 日志文件管理包 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- SQL SERVER --><dependency><groupId>net.sourceforge.jtds</groupId><artifactId>jtds</artifactId><version>1.3.1</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><dependency><groupId>ognl</groupId><artifactId>ognl</artifactId><version>3.0.8</version><exclusions><exclusion><artifactId>javassist</artifactId><groupId>javassist</groupId></exclusion></exclusions></dependency><dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.20</version></dependency><dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.9.4</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.7</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.3.3</version></dependency></dependencies><!-- ====================================================================== --><build><finalName>ssh</finalName><defaultGoal>install</defaultGoal><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.6</source><target>1.6</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build></project>


创建如下包结构:

BaseDao

package com.wzh.dao;import java.util.Collection;import java.util.List;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.Projection;import com.wzh.util.Order;/** * @author 王泽浩 *  *         E-mail: 1028625100@qq.com *  * @version v1.1 *  *          创建时间:2014年2月21日 下午12:02:46 */public interface BaseDao<T> {/** *  获取记录总数 * @param criterion * 查询条件 * @return */public long getCount(final List<Criterion> criterion);/** * 刷新实体Bean,以得到对新对象 *  * @param entity *            需要刷新的实体类 */public void refresh(T entity);/** * 将实体的改变立刻刷新到数据库 */public void flush();/** * 清除一级缓存的数据 */public void clear();/** * 保存数据对象 *  * @param entity *            要保存的对象 */public void save(T entity);/** * 更新数据对象 *  * @param entity *            要更新的对象 */public void update(T entity);/** * 保存或者更新数据对象 *  * @param entity *            要保存或者更新的对象 */public void saveOrUpdate(T entity);/** * 保存或更新多个实体对象 *  * @param collection */public void saveOrUpdate(Collection<T> collection);/** * 删除数据对象 *  * @param entity *            要删除的对象 */public void delete(T entity);/** * 批量删除 *  * @param collection *            要删除的集合 */public void deleteAll(Collection<T> collection);/** * 通过ID查询数据对象 *  * @param id *            要查询的ID *  * @return POJO */public T get(int id);/** * 通过ID查询数据对象 *  * @param id *            要查询的ID *  * @return 查询到的对象 */public T load(int id);/** * 查询所有数据对象,不分页 *  * @return 返回结果集 */public List<T> findAll();/** * 分页查询 *  * @param criterion *            查询条件 *  * @param projection *            投影、统计、不重复结果等函数(max,min,avg....) *  * @param pageNumber *            当前页数 *  * @param pageSize *            每页显示的大小 *  * @param order *            排序类型 *  * @param sort *            要排序的属性名 *  * @return 查询到的结果集 */public List<T> getListForPage//(final List<Criterion> criterion, final List<Projection> projection,final int pageNumber, final int pageSize, final Order order,final String... sort);/** * 查询数据,返回list *  * @param criterion *            查询条件 *  * @param projection *            投影、统计、不重复结果等函数(max,min,avg....) *  * @return 查询到的结果集 */public List<T> executeQuery(final List<Criterion> criterion,final List<Projection> projection);/** * 查询数据,返回数据库唯一对象 *  * @param criterion *            查询条件 * @param projection *            投影、统计、不重复结果等函数(max,min,avg....) *  * @return 数据库查询到的对象 */public T executeQueryUnique(final List<Criterion> criterion,final List<Projection> projection);/** * 通过sql更新或者删除数据 *  * @param sql *            sql语句 *  * @param values *            要注入的值 *  * @return 执行SQL受影响的行数 */public int executeSql(final String sql, final Object... values);/** * 通过SQL语句查询 *  * @param sql *            sql语句 *  * @param values *            要注入的值 *  * @return 返回查询到的唯一对象 */public Object executeQueryBySqlForUniqueObj(final String sql,final Object... values);/** * 通过SQL语句查询 *  * @param sql *            sql语句 *  * @param values *            要注入的值 *  * @return 返回查询到的集合 */public List<Object> executeQueryBySqlForListObj(final String sql, final Object... values);/** * 通过SQL语句查询,返回对应的实体类 *  * @param sql *            sql语句 *  * @param values *            需要注入的值 *  * @return 返回查询到的唯一对象,自动转换为对应的实体类 */public T executeQueryBySqlForUnique(final String sql, final Object... values);/** * 通过SQL语句查询,返回对应的实体类 *  * @param sql *            sql语句 *  * @param values *            需要注入的值 *  * @return 返回查询到的结果集,自动转换为对应的实体类 */public List<T> executeQueryBySqlForList(final String sql, final Object... values);}

BaseDao实现类BaseDaoImpl

package com.wzh.dao.impl;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.Collection;import java.util.List;import javax.annotation.Resource;import org.hibernate.Criteria;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.SQLQuery;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.Projection;import org.hibernate.criterion.ProjectionList;import org.hibernate.criterion.Projections;import org.springframework.orm.hibernate4.HibernateCallback;import org.springframework.orm.hibernate4.HibernateTemplate;import com.wzh.dao.BaseDao;import com.wzh.util.Order;/** * @author 王泽浩 *  *         E-mail: 1028625100@qq.com *  * @version v2.1 *  *          创建时间:2014年2月21日 下午12:02:57 */@SuppressWarnings("all")public abstract class BaseDaoImpl<T> implements BaseDao<T> {private String pojoClassName=null;private Class<T> pojoClass=null;private HibernateTemplate hibernateTemplate;/** * 无参构造函数获取泛型CLASS对象 */public BaseDaoImpl() {Type type = this.getClass().getGenericSuperclass();     if (type instanceof ParameterizedType) {Type[] parameterizedType = ((ParameterizedType) type).getActualTypeArguments();this.pojoClassName = ((Class<T>) parameterizedType[0]).getName();this.pojoClass=(Class<T>) parameterizedType[0];}}@Resourcepublic void setSessionFactory(SessionFactory sessionFactory) {if (hibernateTemplate==null) {hibernateTemplate=new HibernateTemplate(sessionFactory);}}@Overridepublic long getCount(final List<Criterion> criterion) {return hibernateTemplate.execute(new HibernateCallback<Integer>() {@Overridepublic Integer doInHibernate(Session session) throws HibernateException {Criteria criteria = session.createCriteria(pojoClass);setCriteria(criteria, criterion);criteria.setProjection(Projections.rowCount());return Integer.parseInt(criteria.uniqueResult().toString());}});}@Overridepublic void refresh(T entity) {hibernateTemplate.refresh(entity);}@Overridepublic void flush() {hibernateTemplate.flush();}@Overridepublic void clear() {hibernateTemplate.clear();}@Overridepublic void save(T entity) {hibernateTemplate.save(entity);}@Overridepublic void update(T entity) {hibernateTemplate.update(entity);}@Overridepublic void saveOrUpdate(T entity) {hibernateTemplate.saveOrUpdate(entity);}@Overridepublic void saveOrUpdate(Collection<T>  collection ) {hibernateTemplate.saveOrUpdate(collection);}@Overridepublic void delete(T entity) {hibernateTemplate.delete(entity);}@Overridepublic void deleteAll(Collection<T> collection) {hibernateTemplate.deleteAll(collection);}@Overridepublic T get(int id) {return hibernateTemplate.get(pojoClass,id);}@Overridepublic T load(int id) {return hibernateTemplate.load(pojoClass, id);}@Overridepublic List<T> findAll() {return  (List<T>) hibernateTemplate.find("FROM "+ pojoClassName);}@Overridepublic List<T> getListForPage(final List<Criterion> criterion,final List<Projection> projection,final int pageNumber,final int pageSize, final Order order, final String... sort) {return hibernateTemplate.executeWithNativeSession(new HibernateCallback<List<T>>() {public List<T> doInHibernate(Session session)throws HibernateException {Criteria criteria = session.createCriteria(pojoClass);if (sort != null && sort.length > 0) {switch (order) {case ASC:criteria.addOrder(org.hibernate.criterion.Order.asc(sort[0]));break;case DESC:criteria.addOrder(org.hibernate.criterion.Order.desc(sort[0]));break;default:criteria.addOrder(org.hibernate.criterion.Order.asc("id"));break;}}setCriteria(criteria, criterion);setProjection(criteria, projection);criteria.setFirstResult((pageNumber - 1) * pageSize);criteria.setMaxResults(pageSize);return criteria.list();}});}@Overridepublic List<T> executeQuery(final List<Criterion> criterion,final List<Projection> projection) {return hibernateTemplate.executeWithNativeSession(new HibernateCallback<List<T>>() {@Overridepublic List<T> doInHibernate(Session session) throws HibernateException {Criteria criteria = session.createCriteria(pojoClass);setCriteria(criteria, criterion);setProjection(criteria, projection);return criteria.list();}});}@Overridepublic T executeQueryUnique(final List<Criterion> criterion,final List<Projection> projection) {return hibernateTemplate.execute(new HibernateCallback<T>() {@Overridepublic T doInHibernate(Session session) throws HibernateException {Criteria criteria = session.createCriteria(pojoClass);setCriteria(criteria, criterion);setProjection(criteria, projection);return  (T) criteria.uniqueResult();}});}@Overridepublic int executeSql(final String sql,final Object... values) {return hibernateTemplate.execute(new HibernateCallback<Integer>() {@Overridepublic Integer doInHibernate(Session session) throws HibernateException {SQLQuery sqlQuery = session.createSQLQuery(sql);setParams(sqlQuery, values);return sqlQuery.executeUpdate();}});}@Overridepublic Object executeQueryBySqlForUniqueObj(final String sql, final Object... values) {return hibernateTemplate.execute(new HibernateCallback<Object>() {public Object doInHibernate(Session session)throws HibernateException {SQLQuery sqlQuery = session.createSQLQuery(sql);setParams(sqlQuery, values);return sqlQuery.uniqueResult();}});}@Overridepublic List<Object> executeQueryBySqlForListObj(final String sql, final Object... values) {return hibernateTemplate.execute(new HibernateCallback<List<Object>>() {public List<Object> doInHibernate(Session session)throws HibernateException {SQLQuery sqlQuery = session.createSQLQuery(sql);setParams(sqlQuery, values);return sqlQuery.list();}});}@Overridepublic T executeQueryBySqlForUnique(final String sql, final Object... values) {return hibernateTemplate.execute(new HibernateCallback<T>() {public T doInHibernate(Session session)throws HibernateException {SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.addEntity(pojoClass);setParams(sqlQuery, values);return (T) sqlQuery.uniqueResult();}});}@Overridepublic List<T> executeQueryBySqlForList(final String sql, final Object... values) {return hibernateTemplate.execute(new HibernateCallback<List<T>>() {public List<T> doInHibernate(Session session)throws HibernateException {SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.addEntity(pojoClass);setParams(sqlQuery, values);return sqlQuery.list();}});}/** * 判断值是否为空或 *  * @param values * @return */protected boolean isEmptyOrNull(List list) {if (list == null || list.size() == 0)return true;return false;}/** *  * @param query *            Query对象 * @param values *            值 */protected void setParams(Query query, Object... values) {if(values!=null){for (int i = 0; i < values.length; i++) {query.setParameter(i, values[i]);}}}/** *  * @param criteria * @param criterion */protected void setCriteria(Criteria criteria,List<Criterion> criterion){if(!isEmptyOrNull(criterion)){for (Criterion c : criterion) {criteria.add(c);}}}/** *  * @param criteria * @param projection */protected void setProjection(Criteria criteria,List<Projection> projection ){ProjectionList  projectionList = Projections.projectionList();   if(!isEmptyOrNull(projection)){for (Projection  p : projection) {   projectionList.add(p);   }   criteria.setProjection(Projections.projectionList());   }}/** * 获取hibernateTemplate * @return */public HibernateTemplate getHibernateTemplate() {return hibernateTemplate;}}


BaseService

package com.wzh.service;import java.util.Collection;import java.util.List;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.Projection;import com.wzh.util.Order;/** * @author 王泽浩 *  *         E-mail: 1028625100@qq.com *  * @version v1.1 *  *          创建时间:2014年2月21日 下午12:03:59 *           *          关于Hibernate中Criteria的用法: *           *          Restrictions : *           *          方法说明 *          Restrictions.eq= *          Restrictions.allEq利用Map来进行多个等于的限制 *          Restrictions.gt> *          Restrictions.ge>= *          Restrictions.lt< *          Restrictions.le<= *          Restrictions.betweenBETWEEN *          Restrictions.likeLIKE *          Restrictions.inin *          Restrictions.andand *          Restrictions.oror *          更多方法请自行Google *           *          关于Hibernate中Projections的用法: *           *          方法说明 *          Restrictions.alias  起别名 *          Restrictions.avg一个属性的平均值 *          Restrictions.count一个属性的count值 *          Restrictions.countDistincat一个不重复的属性的count值 *          Restrictions.distinct一个属性的唯一值 *          Restrictions.groupProperty一个分组的属性 *          Restrictions.id   标识列的值 *          Restrictions.max   一个属性的最大值 *          Restrictions.min   一个属性的最小值 *          Restrictions.projectionList   创建一个映射集合 *          Restrictions.property 一个项目的映射值 *          Restrictions.rowcount一个查询的行数 *          Restrictions.sum一个属性的sum值 *           */public interface BaseService<T>{/** * 获取记录总数 *  * @return 返回记录总数 */public long getCount();/** *  获取记录总数 * @param criterion * 查询条件 * @return */public long getCount(final List<Criterion> criterion);/** * 刷新实体Bean,以得到对新对象 *  * @param entity */public void refresh(T entity);/** * 将实体的改变立刻刷新到数据库 */public void flush();/** * 清除一级缓存的数据 */public void clear();/** * 保存数据对象 *  * @param entity *            要保存的对象 */public void save(T entity);/** * 更新数据对象 *  * @param entity *            要更新的对象 */public void update(T entity);/** * 保存或者更新数据对象 *  * @param entity *            要保存或者更新的对象 */public void saveOrUpdate(T entity);/** * 保存或更新多个实体对象 *  * @param collection */public void saveOrUpdate(Collection<T> collection);/** * 删除数据对象 *  * @param entity *            要删除的对象 */public void delete(T entity);/** * 通过ID删除数据对象 *  * @param id *            要删除的ID */public void delete(int id);/** * 通过ID删除多个数据对象 *  * @param ids *            要删除的ID */public void delete(int[] ids);/** * 批量删除 *  * @param collection *            要删除的集合 */public void deleteAll(Collection<T> collection);/** * 通过ID查询数据对象 *  * @param id *            要查询的ID *  * @return POJO */public T get(int id);/** * 通过ID查询数据对象 *  * @param id *            要查询的ID *  * @return 查询到的对象 */public T load(int id);/** * 查询所有数据对象,不分页 *  * @return 返回结果集 */public List<T> findAll();/** * 分页查询 *  * @param criterion *            查询条件 *  * @param projection *            投影、统计、不重复结果等函数(max,min,avg....) *  * @param pageNumber *            当前页数 *  * @param pageSize *            每页显示的大小 *  * @param order *            排序类型 *  * @param sort *            要排序的属性名 *  * @return 查询到的结果集 */public List<T> getListForPage//(final List<Criterion> criterion,final List<Projection> projection, final int pageNumber,final int pageSize, final Order order, final String... sort);/** * 分页查询 *  * @param pageNumber *            当前页数 *  * @param pageSize *            每页显示的大小 *  * @param order *            排序类型 *  * @param sort *            要排序的属性名 *  * @return 查询到的结果集 */public List<T> getListForPage//(final int pageNumber,final int pageSize, final Order order, final String... sort);/** * 查询数据,返回list *  * @param criterion *            查询条件 *  * @param projection *            投影、统计、不重复结果等函数(max,min,avg....) *  * @return 查询到的结果集 */public List<T> executeQuery(final List<Criterion> criterion,final List<Projection> projection);/** * 查询数据,返回数据库唯一对象 *  * @param criterion *            查询条件 * @param projection *            投影、统计、不重复结果等函数(max,min,avg....) *  * @return 数据库查询到的对象 */public T executeQueryUnique(final List<Criterion> criterion,final List<Projection> projection);/** * 通过SQL语句查询 *  * @param sql *            sql语句 *  * @param values *            要注入的值 *  * @return 返回查询到的唯一对象 */public int executeSql(final String sql, final Object... values);/** * 通过SQL语句查询 *  * @param sql *            sql语句 *  * @param values *            要注入的值 *  * @return 返回查询到的唯一对象 */public Object executeQueryBySqlForUniqueObj(final String sql,final Object... values);/** * 通过SQL语句查询 *  * @param sql *            sql语句 *  * @param values *            要注入的值 *  * @return 返回查询到的集合 */public List<Object> executeQueryBySqlForListObj(final String sql,final Object... values);/** * 通过SQL语句查询,返回对应的实体类 *  * @param sql *            sql语句 *  * @param values *            需要注入的值 *  * @return 返回查询到的唯一对象,自动转换为对应的实体类 */public T executeQueryBySqlForUnique(final String sql,final Object... values);/** * 通过SQL语句查询,返回对应的实体类 *  * @param sql *            sql语句 *  * @param values *            需要注入的值 *  * @return 返回查询到的结果集,自动转换为对应的实体类 */public List<T> executeQueryBySqlForList(final String sql,final Object... values);}
BaseService的实现类BaseServiceImpl

package com.wzh.service.impl;import java.util.Collection;import java.util.List;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.Projection;import com.wzh.dao.BaseDao;import com.wzh.service.BaseService;import com.wzh.util.Order;/** * @author 王泽浩 *  *         E-mail: 1028625100@qq.com *  * @version v2.1 *  *          创建时间:2014年2月21日 下午12:04:06 */public abstract class BaseServiceImpl<T> implements BaseService<T> {private BaseDao<T> baseDao;public void setBaseDao(BaseDao<T> baseDao) {this.baseDao = baseDao;}@Overridepublic long getCount() {return baseDao.getCount(null);}@Overridepublic long getCount(List<Criterion> criterion) {return baseDao.getCount(criterion);}@Overridepublic void refresh(T entity) {baseDao.refresh(entity);}@Overridepublic void flush() {baseDao.flush();}@Overridepublic void clear() {baseDao.clear();}@Overridepublic void save(T entity) {baseDao.save(entity);}@Overridepublic void update(T entity) {baseDao.update(entity);}@Overridepublic void saveOrUpdate(T entity) {baseDao.saveOrUpdate(entity);}@Overridepublic void saveOrUpdate(Collection<T> collection) {baseDao.saveOrUpdate(collection);}@Overridepublic void delete(T entity) {baseDao.delete(entity);}@Overridepublic void delete(int id) {baseDao.delete(baseDao.get(id));}@Overridepublic void delete(int[] ids) {for (int i : ids) {baseDao.delete(baseDao.get(i));}}@Overridepublic void deleteAll(Collection<T> collection) {baseDao.deleteAll(collection);}@Overridepublic T get(int id) {return baseDao.get(id);}@Overridepublic T load(int id) {return baseDao.load(id);}@Overridepublic List<T> findAll() {return baseDao.findAll();}@Overridepublic List<T> getListForPage(List<Criterion> criterion,List<Projection> projection, int pageNumber, int pageSize,Order order, String... sort) {return this.baseDao.getListForPage(criterion, projection, pageNumber,pageSize, order, sort);}@Overridepublic List<T> getListForPage(int pageNumber, int pageSize, Order order,String... sort) {return this.baseDao.getListForPage(null, null, pageNumber,pageSize, order, sort);}@Overridepublic List<T> executeQuery(List<Criterion> criterion,List<Projection> projection) {return this.baseDao.executeQuery(criterion, projection);}@Overridepublic T executeQueryUnique(List<Criterion> criterion,List<Projection> projection) {return this.baseDao.executeQueryUnique(criterion, projection);}@Overridepublic int executeSql(String sql, Object... values) {return this.baseDao.executeSql(sql, values);}@Overridepublic List<T> executeQueryBySqlForList(String sql, Object... values) {return this.baseDao.executeQueryBySqlForList(sql, values);}@Overridepublic List<Object> executeQueryBySqlForListObj(String sql,Object... values) {return this.baseDao.executeQueryBySqlForListObj(sql, values);}@Overridepublic T executeQueryBySqlForUnique(String sql, Object... values) {return this.baseDao.executeQueryBySqlForUnique(sql, values);}@Overridepublic Object executeQueryBySqlForUniqueObj(String sql, Object... values) {return this.baseDao.executeQueryBySqlForUniqueObj(sql, values);}}

开始编写配置文件:

jdbc.properties

#MS SERVER#jdbc.url = jdbc:jtds:sqlserver://192.168.1.251:1433/master#jdbc.driverClass = net.sourceforge.jtds.jdbc.Driver#MySqljdbc.url=jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=UTF-8jdbc.driverClass = com.mysql.jdbc.Driver#Oracle#jdbc.url=jdbc:oracle:thin:@192.168.1.251:1521:orcl#jdbc.driverClass=oracle.jdbc.driver.OracleDriver#账号jdbc.user=root#密码jdbc.password=root#初始化时获取十个连接,取值应在minPoolSize与maxPoolSize之间。jdbc.initialPoolSize = 10#连接池中保留的最小连接数。jdbc.miniPoolSize = 10#连接池中保留的最大连接数。jdbc.maxPoolSize = 100#####################################      C3P0       #########################################最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0jdbc.maxIdleTime = 60#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3jdbc.acquireIncrement = 5#定义在从数据库获取新连接失败后重复尝试的次数。Default: 30jdbc.acquireRetryAttempts = 30#两次连接中间隔时间,单位毫秒。Default: 1000jdbc.acquireRetryDelay = 1000#如果设为true那么在取得连接的同时将校验连接的有效性。Default: falsejdbc.testConnectionOnCheckin=true#自动测试的table名称jdbc.automaticTestTable = c3p0TestTable#每60秒检查所有连接池中的空闲连接。Default: 0jdbc.idleConnectionTestPeriod = 60#当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。Default: 0jdbc.checkoutTimeout=18000#连接关闭时默认将所有未提交的操作回滚。Default: falsejdbc.autoCommitOnClose=false#获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,#并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: falsejdbc.breakAfterAcquireFailure=false#JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。#所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0jdbc.maxStatements=100#maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0jdbc.maxStatementsPerConnection=100#c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行。Default: 3jdbc.numHelperThreads=20#用户修改系统配置参数执行前最多等待300秒。Default: 300jdbc.propertyCycle=300#因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都将校验其有效性。#建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能。Default: falsejdbc.testConnectionOnCheckout=false#####################################      hibernate      #########################################数据库方言MySQLDialect,SQLServerDialect,OracleDialecthibernate.dialect=org.hibernate.dialect.MySQLDialect#自动检查数据库表结构,或者将数据库schema的DDL导到数据库中hibernate.hbm2ddl.auto=update#设置显示SQL语句hibernate.show_sql=true#格式化输出到控制台的SQL语句hibernate.format_sql=true#数据库批量查询数 hibernate.jdbc.fetch_size=100#数据库批量更新数hibernate.jdbc.batch_size=50


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:p="http://www.springframework.org/schema/p"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:c="http://www.springframework.org/schema/c"xmlns:cache="http://www.springframework.org/schema/cache"xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:jee="http://www.springframework.org/schema/jee"xmlns:lang="http://www.springframework.org/schema/lang"xmlns:oxm="http://www.springframework.org/schema/oxm"xmlns:task="http://www.springframework.org/schema/task"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.0.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-4.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="true"><property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /><property name="ignoreResourceNotFound" value="true" /><property name="locations"><list><value>classpath:conf/jdbc.properties</value></list></property></bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property name="driverClass" value="${jdbc.driverClass}" /><property name="jdbcUrl" value="${jdbc.url}" /><property name="user" value="${jdbc.user}" /><property name="password" value="${jdbc.password}" /><property name="minPoolSize" value="${jdbc.miniPoolSize}" /><property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>  <property name="initialPoolSize" value="${jdbc.initialPoolSize}"/><property name="maxIdleTime" value="${jdbc.maxIdleTime}"/><property name="acquireIncrement" value="${jdbc.acquireIncrement}"/><property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}"/><property name="acquireRetryDelay" value="${jdbc.acquireRetryDelay}"/><property name="automaticTestTable" value="${jdbc.automaticTestTable}"/><property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"/><property name="checkoutTimeout" value="${jdbc.checkoutTimeout}"/><property name="autoCommitOnClose"  value="${jdbc.autoCommitOnClose}"/><property name="breakAfterAcquireFailure"  value="${jdbc.breakAfterAcquireFailure}"/><property name="maxStatements"  value="${jdbc.maxStatements}"/><property name="maxStatementsPerConnection"  value="${jdbc.maxStatementsPerConnection}"/><property name="numHelperThreads"  value="${jdbc.numHelperThreads}"/><property name="propertyCycle"  value="${jdbc.propertyCycle}"/><property name="testConnectionOnCheckout"  value="${jdbc.testConnectionOnCheckout}"/><property name="testConnectionOnCheckin"  value="${jdbc.testConnectionOnCheckin}"/></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><value><!-- 设置数据库方言 -->hibernate.dialect=${hibernate.dialect}<!-- 设置自动创建|更新|验证数据库表结构 -->hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto}<!-- 输出SQL语句到控制台 -->hibernate.show_sql=${hibernate.show_sql}<!-- 格式化输出到控制台的SQL语句 -->hibernate.format_sql=${hibernate.format_sql}<!-- 数据库批量查询数 -->hibernate.jdbc.fetch_size=${hibernate.jdbc.fetch_size}<!-- 数据库批量更新数 -->hibernate.jdbc.batch_size=${hibernate.jdbc.batch_size}</value></property><property name="packagesToScan"><list><value>com.wzh.entity</value></list></property></bean><!-- 设置Spring注解扫描的类 --><context:component-scan base-package="com.wzh"/><!-- 使用AspectJ方式配置AOP --><aop:aspectj-autoproxy proxy-target-class="true" /><aop:config proxy-target-class="true" /><!-- 使用注解方式定义事务 --><tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" /><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 配置事务传播特性 --><tx:advice id="transactionAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="save*" propagation="REQUIRED" /><tx:method name="del*" propagation="REQUIRED" /><tx:method name="up*" propagation="REQUIRED" /><tx:method name="get*" read-only="true" /><tx:method name="find*" read-only="true" /><tx:method name="*" read-only="true" /></tx:attributes></tx:advice><!-- 配置哪些类的哪些方法参与事务 --><aop:config><aop:advisor pointcut="execution(* com.wzh.service..*.*(..))" advice-ref="transactionAdvice" /></aop:config></beans>

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.ui.theme" value="simple" />  <!-- spring 托管 -->  <constant name="struts.objectFactory" value="spring" /><!--设置是否支持动态方法调用,true为支持,false不支持 --><constant name="struts.enable.DynamicMethodInvocation" value="true" /><!--解决乱码 -->    <constant name="struts.i18n.encoding" value="UTF-8" /><!-- 设置浏览器是否缓存静态内容,默认值为true,开发阶段最好false --><constant name="struts.serve.static.browserCache " value="true"/><!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好true --><constant name="struts.configuration.xml.reload" value="true"/><!-- Struts2默认识别*.action,不是*.do --><constant name="struts.action.extension" value="do" /><!-- struts开发模式 --><constant name="struts.devMode" value="true" /><!-- 该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true --><constant name="struts.enable.SlashesInActionNames" value="false"/><!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->    <constant name="struts.multipart.saveDir " value="../temp" /><!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->    <constant name="struts.multipart.maxSize" value="20971520"/><!-- 一般struts2+spring应用中,spring的插件只负责为action的ioc部分,但并没有进行功能加强,即采用代理的机制,所有的action还是使用struts2进行管理,在使用AOP后,这些action需要由spring进行管理,如果没有由spring进行代理,将出现注入失败。  --><constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" /><!-- Add packages here --><package name="default" extends="struts-default" namespace="/"><action name="*_*" class="com.wzh.action.{1}Action" method="{2}"><result name="success">/WEB-INF/page/{1}/{2}.jsp</result></action></package></struts>

web.xml位置文件

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>ssh</display-name><!-- 指定spring配置文件位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:conf/applicationContext.xml</param-value></context-param><!-- 指定log4j配置文件位置 --><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:conf/log4j.properties</param-value></context-param><!-- 重新读取log4j配置文件的间隔时间(毫秒) --><context-param><param-name>log4jRefreshInterval</param-name><param-value>6000</param-value></context-param><!-- 编码过滤器 --><filter><filter-name>SpringEncodingFilter</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-mapping><filter-name>SpringEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 动态的改变记录级别和策略,不需要重启Web应用 --><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><!-- 启动Web容器时,自动装配ApplicationContext的配置信息 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener><!-- 防止Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏 --><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><!-- struts过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><!-- 指定struts配置文件位置 --><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,conf/struts.xml</param-value></init-param><!-- 指定Action类所在的包空间 --><init-param><param-name>actionPackages</param-name><param-value>com.wzh.action</param-value></init-param></filter><!-- struts映射名*.do --><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.do</url-pattern></filter-mapping><!-- 会话超时配置(单位为分钟) --><session-config><session-timeout>30</session-timeout></session-config><!-- 404页面 --><error-page><error-code>404</error-code><location>/commons/404.jsp</location></error-page><!-- 错误页面 --><error-page><exception-type>java.lang.Exception</exception-type><location>/commons/except.jsp</location></error-page><!-- 首页 --><welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file></welcome-file-list></web-app>
为了方便获取response,request,session,等对象,编写BaseAction

package com.wzh.util;import java.io.IOException;import java.io.PrintWriter;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.interceptor.SessionAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;import com.wzh.util.Order;/** * @author 王泽浩 *  *         E-mail: 1028625100@qq.com *  * @version v2.1 *  *          创建时间:2014年2月21日 下午12:02:46 */public abstract class BaseAction extends ActionSupport implementsServletRequestAware, ServletResponseAware, ServletContextAware,SessionAware {private static final long serialVersionUID = 9157329967324584921L;/** * request对象 */protected HttpServletRequest request;/** * response对象 */protected HttpServletResponse response;/** * application对象 */protected ServletContext application;/** * session对象 */protected Map<String, Object> session;/** * out对象 */protected PrintWriter out;/** * 第几页 */protected int pageNumber = 1;/** * 每页有显示多少条 */protected int pageSize = 20;/** * 按什么字段排序,默认是ID */protected String sort = "id";/** * 升序还是降序,默认降序 */protected Order order = Order.DESC;/** * 获取访问路径 */public String getBase() {return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();}/** * 重定向 *  * @param url *            url * @throws IOException */public void sendRedirect(String url) {try {response.sendRedirect(url);} catch (IOException e) {e.printStackTrace();}}/** * 转发 *  * @param url *            url */public void forward(String url) {try {request.getRequestDispatcher(url).forward(request, response);} catch (Exception e) {e.printStackTrace();request.getRequestDispatcher(url);}}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request = request;}@Overridepublic void setServletResponse(HttpServletResponse response) {try {response.setContentType("text/html;charset=UTF-8");this.response = response;out = response.getWriter();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void setServletContext(ServletContext context) {this.application = context;}@Overridepublic void setSession(Map<String, Object> session) {this.session = session;}public void setSort(String sort) {this.sort = sort;}public void setOrder(String order) {this.order = (order.equals("") || order.equals("desc")) ? Order.DESC : Order.ASC;}public void setPage(String page) {this.pageNumber = Integer.parseInt((page == null || page .equals( "0")) ? "1" : page);}public void setRows(String rows) {this.pageSize = Integer.parseInt((rows == null || rows.equals("0")) ? "20" : rows);}}

最后是排序用到的枚举类

Order

package com.wzh.util;/** * @author 王泽浩 *  *         E-mail: 1028625100@qq.com *  * @version v1.1 *  *          创建时间:2014年2月21日 下午12:50:06 *           *          排序 */public enum Order {/** * 升序排列 */ASC,/** * 降序排列 */DESC;}

至此搭建完成。
















0 0
原创粉丝点击