525
京东网上商城
ssh搭建开发环境
公司一直不是ssh零配置的框架,每次写action都要在applicationcontext和struts里面配置,好麻烦,最近有空,写了一个ssh零配置的框架
这里写了一个小的项目,以用户权限管理为例
先做准备工作:
1.struts2去官网下载最新版struts开发包https://struts.apache.org/download.cgi
2.hibernate4去官网下载最新版hibernate4开发包https://sourceforge.net/projects/hibernate/files/hibernate4/
3.spring3去官网下载最新版spring3开发包https://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协助开发需要的包:可以输入https://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中
- <!-- spring 配置 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context-param>
- <description>Spring上下文</description>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext*.xml</param-value>
- </context-param>
- <!-- hibernate 懒加载的问题过滤 ,可以不配置 -->
- <filter>
- <description>hibernate Session 过滤器</description>
- <filter-name>openSessionInViewFilter</filter-name>
- <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>openSessionInViewFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter>
- <!-- struts配置 -->
- <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>
struts.xml配置
- <struts>
- <!-- 使用Spring -->
- <constant name="struts.objectFactory" value="spring" />
- <constant name="struts.devMode" value="true" />
- <constant name="struts.configuration.xml.reload" value="true" />
- <package name="default" extends="struts-default" namespace="/">
- <interceptors>
- <!-- 使用权限拦截 -->
- <interceptor name="authority" class="com.sshFrame.zero.interceptor.AuthorityInterceptor"/>
- <!-- 异常拦截 -->
- <interceptor name="exceptionInterceptor" class="com.sshFrame.zero.interceptor.ExceptionInterceptor"/>
- <!-- 解决struts安全漏洞,拦截所有的带有#号的url -->
- <interceptor-stack name="baseStack">
- <interceptor-ref name="authority"/>
- <interceptor-ref name="exceptionInterceptor"/>
- <interceptor-ref name="params">
- <param name="excludeParams">.*\\u0023.*</param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"/>
- </interceptor-stack>
- </interceptors>
- <!-- 配置默认拦截器栈 -->
- <default-interceptor-ref name="baseStack"/>
- <global-results>
- <result name="login">/index.jsp</result>
- <result name="error">/error.jsp</result>
- </global-results>
- </package>
- </struts>
applicationcontext.xml配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="https://www.springframework.org/schema/beans"
- xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="https://www.springframework.org/schema/p"
- xmlns:context="https://www.springframework.org/schema/context"
- xmlns:aop="https://www.springframework.org/schema/aop"
- xmlns:tx="https://www.springframework.org/schema/tx"
- xmlns:dwr="https://www.directwebremoting.org/schema/spring-dwr"
- xsi:schemaLocation="https://www.springframework.org/schema/beans
- https://www.springframework.org/schema/beans/spring-beans-3.2.xsd
- https://www.springframework.org/schema/context
- https://www.springframework.org/schema/context/spring-context-3.2.xsd
- https://www.springframework.org/schema/aop
- https://www.springframework.org/schema/aop/spring-aop-3.2.xsd
- https://www.springframework.org/schema/tx
- https://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
- <property name="url" value="jdbc:mysql://127.0.0.1:3306/osdesignaid"></property>
- <property name="username" value="root"></property>
- <property name="password" value="root"></property>
- </bean>
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
- <prop key="hibernate.current_session_context_class">thread</prop>
- <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.format_sql">true</prop>
- <prop key="hibernate.hbm2ddl.auto">update</prop>
- </props>
- </property>
- <property name="packagesToScan">
- <list>
- <value>com.sshFrame.zero.pojo</value>
- <value>com.sshFrame.test.pojo</value>
- </list>
- </property>
- </bean>
- <aop:aspectj-autoproxy /><!-- 代理 -->
- <!-- 定义事务管理器 -->
- <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
- <!-- 申明annotation 加载事务驱动 -->
- <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <tx:attributes>
- <tx:method name="save*" propagation="REQUIRED" />
- <tx:method name="add*" propagation="REQUIRED" />
- <tx:method name="create*" propagation="REQUIRED" />
- <tx:method name="insert*" propagation="REQUIRED" />
- <tx:method name="update*" propagation="REQUIRED" />
- <tx:method name="merge*" propagation="REQUIRED" />
- <tx:method name="del*" propagation="REQUIRED" />
- <tx:method name="remove*" propagation="REQUIRED" />
- <tx:method name="put*" propagation="REQUIRED" />
- <tx:method name="use*" propagation="REQUIRED"/>
- <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->
- <tx:method name="get*" propagation="REQUIRED" read-only="true" />
- <tx:method name="count*" propagation="REQUIRED" read-only="true" />
- <tx:method name="find*" propagation="REQUIRED" read-only="true" />
- <tx:method name="list*" propagation="REQUIRED" read-only="true" />
- <tx:method name="*" read-only="true" />
- </tx:attributes>
- </tx:advice>
- <aop:config expose-proxy="true">
- <!-- 只对业务逻辑层实施事务 -->
- <aop:pointcut id="txPointcut" expression="execution(* cn.javass..service..*.*(..))" />
- <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
- </aop:config>
- <!-- 自动扫描包 -->
- <context:annotation-config />
- <context:component-scan base-package="com.sshFrame.zero.*,com.sshFrame.test.*" annotation-config="true"/>
- </beans>
三、写框架基类
改写基本的框架类了
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 <T>
- */
- public class BaseDao<T extends Serializable> {
- @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<T> findAll() throws Exception {
- List<T> 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<?> list = query.list();
- session.getTransaction().commit();
- if(list!=null&&!list.isEmpty()){
- count=((Integer) list.get(0)).intValue();
- }
- } catch (HibernateException e) {
- e.printStackTrace();
- }finally{
- session.close();
- }
- return count;
- }
- /**
- * QBC查询
- *
- * @param criteria
- * @throws HibernateException
- */
- @SuppressWarnings("unchecked")
- public List<T> findByCriteria(Criteria criteria) throws Exception {
- List<T> list=null;
- Session session=null;
- try {
- session = sessionFactory.openSession();
- session.beginTransaction();
- Criteria criteria1 = session.createCriteria(getEntityClass());
- criteria1=criteria;
- list = criteria1.list();
- session.getTransaction().commit();
- } catch (HibernateException e) {
- e.printStackTrace();
- }finally{
- session.close();
- }
- return list;
- }
- /**
- * QBE查询
- *
- * @param t
- * @throws HibernateException
- */
- @SuppressWarnings("unchecked")
- public List<T> findByExample(T t) throws Exception {
- List<T> list=null;
- Session session=null;
- Example example = Example.create(t);
- try {
- session = sessionFactory.openSession();
- session.beginTransaction();
- Criteria criteria = session.createCriteria(getEntityClass());
- criteria.add(example);
- list = criteria.list();
- session.getTransaction().commit();
- } catch (HibernateException e) {
- e.printStackTrace();
- }finally{
- session.close();
- }
- return list;
- }
- /**
- * HQL查询
- *
- * @param hql
- * @param objects
- * @throws HibernateException
- */
- @SuppressWarnings("unchecked")
- public List<Object[]> findByHql(String hql,final Object...objects) throws Exception{
- List<Object[]> list=null;
- Session session=null;
- try {
- session=sessionFactory.openSession();
- session.beginTransaction();
- Query query = session.createQuery(hql);
- for (int i = 0; i < objects.length; i++) {
- query.setParameter(i, objects[i]);
- }
- list = query.list();
- session.getTransaction().commit();
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- session.close();
- }
- return list;
- }
- /**
- * SQL查询
- *
- * @param hql
- * @param objects
- * @throws HibernateException
- */
- @SuppressWarnings("unchecked")
- public List<Object[]> findBySql(String sql,final Object...objects){
- List<Object[]> list=null;
- Session session=null;
- try {
- session=sessionFactory.openSession();
- session.beginTransaction();
- Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);
- for (int i = 0; i < objects.length; i++) {
- query.setParameter(i, objects[i]);
- }
- list = query.list();
- session.getTransaction().commit();
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- session.close();
- }
- return list;
- }
- }
BaseService
- package com.sshFrame.zero.service;
- import java.io.Serializable;
- import java.util.List;
- import com.sshFrame.zero.dao.BaseDao;
- /**
- * @author 雪精灵
- *
- * @param <t>
- */
- public class BaseService<T extends Serializable> {
- protected BaseDao<T> baseDao;
- public void save(T t) throws Exception{
- baseDao.save(t);
- }
- public void update(T t) throws Exception{
- baseDao.update(t);
- }
- public void delete(T t) throws Exception{
- baseDao.delete(t);
- }
- public T get(Serializable id) throws Exception{
- return baseDao.get(id);
- }
- public List<T> findAll() throws Exception{
- return baseDao.findAll();
- }
- public List<T> findByExample(T t) throws Exception{
- return baseDao.findByExample(t);
- }
- public BaseDao<T> getBaseDao() {
- return baseDao;
- }
- public void setBaseDao(BaseDao<T> baseDao) {
- this.baseDao = baseDao;
- }
- }</t>
四、写7个pojo
- package com.sshFrame.zero.pojo;
- import java.io.Serializable;
- 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.OneToMany;
- import javax.persistence.Table;
- import org.hibernate.annotations.GenericGenerator;
- @Entity
- @Table(name="userinfo")
- public class Userinfo implements Serializable{
- private static final long serialVersionUID = 1L;
- private String userid;
- private String username;
- private String password;
- private String depid;
- private String dutyid;
- private Set<Userrole> userroles=new HashSet<Userrole>();
- @GenericGenerator(name = "generator", strategy = "uuid")
- @Id
- @GeneratedValue(generator = "generator")
- @Column(name = "userid", unique = true, nullable = false, length = 50)
- public String getUserid() {
- return userid;
- }
- public void setUserid(String userid) {
- this.userid = userid;
- }
- @Column(name = "username", nullable = false, length = 50)
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- @Column(name = "password", nullable = false, length = 50)
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Column(name = "depid", nullable = false, length = 50)
- public String getDepid() {
- return depid;
- }
- public void setDepid(String depid) {
- this.depid = depid;
- }
- @Column(name = "dutyid", nullable = false, length = 50)
- public String getDutyid() {
- return dutyid;
- }
- public void setDutyid(String dutyid) {
- this.dutyid = dutyid;
- }
- @OneToMany(cascade=CascadeType.REMOVE,mappedBy="userinfo",fetch=FetchType.LAZY)
- public Set<Userrole> getUserroles() {
- return userroles;
- }
- public void setUserroles(Set<Userrole> userroles) {
- this.userrol
最后更新:2017-04-04 07:36:14
上一篇:
Oracle 查询表中各列名称、表中列数
下一篇:
WinFrom 控件 属性 小结