BOS项目

1、Struts2.xml

2、Struts2核心过滤器

3、log4j.properties

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

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:\mylog.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' ###
### fatal error warn info debug trace
log4j.rootLogger=debug, stdout
#         info,debug... file==>输出到文件中

4、Maven工程中Spring扫描hibernate实体的xml配置文件

5、Spring配置事物

6、持久层代码抽取

BaseDao.java

/**
 * 持久(Dao)层通用接口
 * @param <T>
 */
public interface IBaseDao<T> {

    public void save(T entity);
    public void delete(T entity);
    public void update(T entity);
    public T findById(Serializable id);     // ???
    public List<T> findAll();

}

BaseDaoImpl.java(+Spring封装的HibernateTemplate的使用方法)***

public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {

    // ***********根据类型注入spring工厂中的会话工厂对象sessionFactory***********

    @Resource(name = "sessionFactory")  // 只要子类注入容器中就能给它注入值;原理:继承了之后,它已经是子类的方法了,可以当做和父类没有关系了
    public void setMySessionFactory(SessionFactory sessionFactory){

        super.setSessionFactory(sessionFactory);
    }

    // ***************为什么要这样写,因为T是泛型类型,所以不可以用T.class方法获取 指定类 的字节码对象(获取的是T这个类的)***************

    // 字节码对象
    Class<T> entityClass;


    public BaseDaoImpl() {

        // 获取当前类的字节码对象==>获取当前类的超类(类的泛型的父类)
        Type type = this.getClass().getGenericSuperclass();
        // 将超类转换成泛型
        ParameterizedType pt = (ParameterizedType) type;
        // 获取泛型数组(可能有多个泛型)
        Type[] typeArray = pt.getActualTypeArguments();
        // 将第一个转为字节码类型
        Class<T> clazz = (Class<T>) typeArray[0];

        this.entityClass = clazz;
    }

    @Override
    public void save(T entity) {
        super.getHibernateTemplate().save(entity);
    }

    @Override
    public void delete(T entity) {
        super.getHibernateTemplate().delete(entity);
    }

    @Override
    public void update(T entity) {
        super.getHibernateTemplate().update(entity);
    }

    @Override
    public T findById(Serializable id) {
        // get方法需要一个字节码对象和序列话的id
        return super.getHibernateTemplate().get(entityClass,id);
    }

    @Override
    public List<T> findAll() {

        String hql = "from " + entityClass.getSimpleName(); // 通过字节码对象获取类名

        List<T> list = (List<T>) super.getHibernateTemplate().find(hql);

        return list;
    }
}

其他:通用更新方法

7、表现层代码抽取

public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {

    // 由于T是泛型对象,所以不能实例化,要我们用构造给它传递对象
    private T model;

    // 初始化方法,子类实例化,会调用父类的初始化方法
    public BaseAction() {

        // 获取泛型
        ParameterizedType pType = (ParameterizedType) this.getClass().getGenericSuperclass();
        // 获取泛型数组
        Type[] tList = pType.getActualTypeArguments();
        // 取出数组中第一个值,转成字节码对象
        Class<T> clazz = (Class<T>) tList[0];
        // 由于model要的是一个对象,所以要将字节码对象通过反射转换成对象
        try {
            this.model = clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    @Override
    public T getModel() {
        return model;
    }
}

8、js表单提交

9、啦啦啦

10、清除session

11、前端没有穿参数,赋默认值

12、UUID问题

13、通用page查询

pageQuery方法要抽取出来,所以不贴代码了

 1 @Override
 2 public void pageQuery(PageUtils pageBean) {
 3     Integer currentPage = pageBean.getCurrentPage();
 4     Integer pageSize = pageBean.getPageSize();
 5     // 获取离线对象
 6     DetachedCriteria detachedCriteria = pageBean.getDetachedCriteria();
 7 
 8     // 1.查询总数,封装到total中
 9         // select * ... ==> select count(*) ...
10     detachedCriteria.setProjection(Projections.rowCount());
11     List<Long> countList = (List<Long>) super.getHibernateTemplate().findByCriteria(detachedCriteria);
12         // Long型 ==> int型
13     Long count = countList.get(0);
14     pageBean.setTotal(count.intValue());
15     // 2.分页查询,封装到rows中
16         // 将上面的条件清空 select count(*) ... ==> select * ...
17     detachedCriteria.setProjection(null);
18 
19     Integer firstResult = (currentPage - 1) * pageSize;
20     Integer maxResults = pageSize;
21 
22     List list = super.getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults);
23 
24     pageBean.setRows(list);
25 }
BaseDao
原文地址:https://www.cnblogs.com/x54256/p/8555908.html