公司一直不是ssh零配置的框架,每次写action都要在applicationcontext和struts里面配置,好麻烦,最近有空,写了一个ssh零配置的框架
这里写了一个小的项目,以用户权限管理为例
先做准备工作:
1.struts2去官网下载最新版struts开发包http://struts.apache.org/download.cgi#struts216
2.hibernate4去官网下载最新版hibernate4开发包http://sourceforge.net/projects/hibernate/files/hibernate4/
3.spring3去官网下载最新版spring3开发包http://www.springsource.org/download/community
一、先建立一个空的web的项目sshFrame,加载必须的包
1.添加struts2必备的包。我下载的是最近的struts2.3.8
asm-3.3.jar --ASM字节码库 ,使用“cglib”则必要
aopalliance-1.0.jar --这个包为AOP提供了最普通和通用的接口
commons-fileupload-1.2.2.jar --Struts2上传下载的jar
commons-io-2.0.1.jar --Struts2上传下载的jar
commons-logging-1.1.1.jar --Jakarta的通用日志记录包
freemarker-2.3.19.jar
ognl-3.0.6.jar --支持ognl表达式
struts2-core-2.3.8.jar --struts2的核心包
struts2-spring-plugin-2.3.8.jar --struts2与spring整合所需
struts2-convention-plugin-2.3.8.jar --struts2零配置注释用
xwork-core-2.3.8.jar
可以不加 struts2-config-browser-plugin-2.3.8.jar为struts协助开发需要的包:可以输入http://127.0.0.1:8686/config-browser/actionNames.action查看系统所有已经存在的action,配置不正确就可以在这里看出来;
2.添加Hibernate 所需要的包。hibernate-4.1.9.Final
把下载下来的hibernate\lib\required下的包全部拷贝进去,分别是
antlr-2.7.7.jar --语言转换工具,hibernate用他将hql语句转换为sql语句
dom4j-1.6.1.jar --解析xml文档的工具
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.9.Final.jar --核心包
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.17.1-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
还有加入hibernate\lib\optional\c3p0\c3p0-0.9.1.jar
hibernate-ehcache-4.1.9.Final.jar
ehcache-core-2.4.3.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar
3添加spring3 所需要的包 spring-framework-3.2.0.RELEASE
spring-aop-3.2.0.RELEASE.jar
spring-aspects-3.2.0.RELEASE.jar
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
spring-instrument-3.2.0.RELEASE.jar
spring-jdbc-3.2.0.RELEASE.jar
spring-jms-3.2.0.RELEASE.jar
spring-orm-3.2.0.RELEASE.jar
spring-oxm-3.2.0.RELEASE.jar
spring-test-3.2.0.RELEASE.jar --测试时用
spring-tx-3.2.0.RELEASE.jar --事务处理所用
spring-web-3.2.0.RELEASE.jar
aspectjweaver-1.5.3.jar --spring所依赖的包
其他
asm-commons-3.3.jar
Commons—pool.jar ,commons-dbcp.jar ----------DBCP数据库连接池,Apache的jakarta组织开发 的,tomcat连接池也是dbcp(可选)
cglib.jar----------------------------高效的代码生成工具, Hibernate用它在运行时扩展 Java类和实现 Java 接
jta.jar --标准的JTA API(JTA即java事物API,JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接),我暂时还没加,先备着
mysql-connector-java-5.1.18-bin.jar
log4j-1.2.16.jar
二、添加配置文件
在struts包下struts\src\apps\blank\src\main\resources提供了空白的struts.xml文件,把它复制到项目的src下
web.xml中
- org.springframework.web.context.ContextLoaderListener
- Spring上下文
- contextConfigLocation
- classpath:applicationContext*.xml
- hibernate Session 过滤器
- openSessionInViewFilter
- org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
- openSessionInViewFilter
- /*
- struts2
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- struts2
- /*
struts.xml配置
- .*\\u0023.*
- /index.jsp
- /error.jsp
applicationcontext.xml配置:
- org.hibernate.dialect.MySQLDialect
- thread
- org.hibernate.cache.EhCacheRegionFactory
- true
- true
- update
- com.sshFrame.zero.pojo
- com.sshFrame.test.pojo
三、写框架基类
改写基本的框架类了
Basedao
- package com.sshFrame.zero.dao;
- import java.io.Serializable;
- import java.lang.reflect.Field;
- import java.lang.reflect.ParameterizedType;
- import java.lang.reflect.Type;
- import java.util.List;
- import javax.persistence.Id;
- import org.hibernate.Criteria;
- import org.hibernate.HibernateException;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.criterion.Example;
- import org.springframework.beans.factory.annotation.Autowired;
- /**
- * 基于hibernate的BaseDao
- * Spring3对Hibernate4已经没有了HibernateDaoSupport和HibernateTemplate的支持,使用了原生态的API
- * @author 雪精灵
- *
- * @param
- */
- public class BaseDao {
- @Autowired
- private SessionFactory sessionFactory;
- //当前泛型类
- @SuppressWarnings("rawtypes")
- private Class entityClass;
- //当前主键名称
- private String pkname;
- private final String HQL_LIST_ALL;
- private final String HQL_COUNT_ALL;
- @SuppressWarnings("rawtypes")
- public Class getEntityClass() {
- return entityClass;
- }
- @SuppressWarnings("rawtypes")
- public void setEntityClass(Class entityClass) {
- this.entityClass = entityClass;
- }
- @SuppressWarnings("rawtypes")
- public BaseDao() {
- //获取当前泛型类
- Type type = this.getClass().getGenericSuperclass();
- if (type.toString().indexOf("BaseDao") != -1) {
- ParameterizedType type1 = (ParameterizedType) type;
- Type[] types = type1.getActualTypeArguments();
- setEntityClass((Class) types[0]);
- }else{
- type = ((Class)type).getGenericSuperclass();
- ParameterizedType type1 = (ParameterizedType) type;
- Type[] types = type1.getActualTypeArguments();
- setEntityClass((Class) types[0]);
- }
- getPkname();
- HQL_LIST_ALL="from "+this.entityClass.getSimpleName()+" order by "+pkname+" desc";
- HQL_COUNT_ALL="select count(*) from "+this.entityClass.getSimpleName();
- }
- /**
- * 获取主键名称
- * @return
- */
- public String getPkname() {
- Field[] fields = this.entityClass.getDeclaredFields();//反射类字段
- for (Field field : fields) {
- field.isAnnotationPresent(Id.class);
- this.pkname=field.getName();
- break;
- }
- return pkname;
- }
- /**
- * 保存实例
- *
- * @param t
- * @throws HibernateException
- */
- public void save(T t) throws HibernateException{
- Session session=null;
- try {
- session=sessionFactory.openSession();
- session.beginTransaction();
- session.save(t);
- session.getTransaction().commit();
- } catch (HibernateException e) {
- e.printStackTrace();
- throw new HibernateException(e);
- }finally{
- session.close();
- }
- }
- /**
- * 修改实例
- *
- * @param t
- * @throws HibernateException
- */
- public void update(T t) throws HibernateException{
- Session session=null;
- try {
- session=sessionFactory.openSession();
- session.beginTransaction();
- session.update(t);
- session.getTransaction().commit();
- } catch (HibernateException e) {
- e.printStackTrace();
- throw new HibernateException(e);
- }finally{
- session.close();
- }
- }
- /**
- * 删除实例
- *
- * @param t
- * @throws HibernateException
- */
- public void delete(T t) throws HibernateException{
- Session session=null;
- try {
- session=sessionFactory.openSession();
- session.beginTransaction();
- session.delete(t);
- session.getTransaction().commit();
- } catch (HibernateException e) {
- e.printStackTrace();
- throw new HibernateException(e);
- }finally{
- session.close();
- }
- }
- /**
- * 获取实例
- *
- * @param id
- * @throws HibernateException
- */
- @SuppressWarnings("unchecked")
- public T get(Serializable id) throws Exception{
- Session session=null;
- T t=null;
- try {
- session=sessionFactory.openSession();
- session.beginTransaction();
- t=(T) session.get(getEntityClass(), id);
- session.getTransaction().commit();
- } catch (HibernateException e) {
- e.printStackTrace();
- throw new HibernateException(e);
- }finally{
- session.close();
- }
- return t;
- }
- /**
- * 查询全部
- *
- * @throws HibernateException
- */
- @SuppressWarnings("unchecked")
- public List findAll() throws Exception {
- List list=null;
- Session session=null;
- try {
- session = sessionFactory.openSession();
- session.beginTransaction();
- Query query = session.createQuery(HQL_LIST_ALL);
- list = query.list();
- session.getTransaction().commit();
- } catch (HibernateException e) {
- e.printStackTrace();
- }finally{
- session.close();
- }
- return list;
- }
- /**
- * 查询总数
- *
- * @throws HibernateException
- */
- public Integer findAllCount() throws Exception {
- Session session=null;
- Integer count=0;
- try {
- session = sessionFactory.openSession();
- session.beginTransaction();
- Query query = session.createQuery(HQL_COUNT_ALL);
- List
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录