• 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
  • 相关阅读:
    C#发送Email邮件(实例:QQ邮箱和Gmail邮箱)
    MD5
    关节疼
    c#写入Mysql中文显示乱码 解决方法 z
    浅析基层检察院派驻乡镇检察室的健康发展 z
    查询数据库中所有名称相同的记录
    一个简单功能的SQL 实现
    java 的""和null的区别
    java 的 &和&&的区别
    mysql left join,right join,inner join的区别
  • 原文地址:https://www.cnblogs.com/x54256/p/8555908.html
Copyright © 2020-2023  润新知