zoukankan      html  css  js  c++  java
  • 搭建第一个web项目:实现用户的增删改查(三)

    每个程序员都有自己写代码的习惯吧,用公司编代码的方式习惯了之后,就按照公司的方法在后台建立了一些工具类。

    util类——JPAUtil.java(与数据库打交道)备注:只是一部分,只做了增删改查。

    package cn.itcast.oa.util;
    
    import java.io.Serializable;
    import java.util.List;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import cn.itcast.oa.base.IDAO;
    import cn.itcast.oa.domain.Role;
    import cn.itcast.oa.model.PageInfo;
    import cn.itcast.oa.model.SortParamList;
    
    public class JPAUtil {
        //这是第一种拿到applicationContext的方法。(通过applicationContextAware)
        //静态属性,spring初始化MyApplicationContextUtil的时候,将applicationContext属性set到这里面了。
        /*private static ApplicationContext applicationContext;
        
        public static Object getBean(String beanName) {
            return getCtx().getBean(beanName);
        }
    
        public static void setApplicationContext(ApplicationContext ctx) {
            applicationContext = ctx;
        }
    
        private static ApplicationContext getCtx() {
            return applicationContext;
        }*/
    
        private static IDAO dao = (IDAO) ApplicationUtil.getBean("baseDao");
        //这是第二种拿到applicationContext的方法
        private static ApplicationContext ac = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
    
        /**
         * find条件查询数据带分页排序
         * @param jpql
         * @param params
         * @param sortParams
         * @param pageInfo
         * @return
         */
        public static <T> List<T> find(String jpql, QueryParamList params,
                SortParamList sortParams, PageInfo pageInfo) {
    //        IDAO dao = null;
    //        try {
    //            dao = (IDAO) getCtx().getBean("baseDao");
    //        } catch (BeansException e) {
    //            e.printStackTrace();
    //        }
            return dao.find(jpql, params, sortParams, pageInfo);
        }
        /**
         * 创建一条数据
         * @param t
         */
        public static <T>void create(T t) {
            dao.create(t);
        }
        /**
         * 根据id查询数据
         * @param clazz
         * @param id
         * @return
         */
        public static <T> T loadById(Class<T> clazz, Serializable id) {
            return dao.loadById(clazz,id);
        }
        /**
         * 更新数据
         * @param t
         */
        public static <T> void update(T t) {
            dao.update(t);
        }
        /**
         * 
         * @param t
         */
        public static <T>void refresh(T t) {
            dao.refresh(t);
        }
        /**
         * 删除数据
         * @param clazz
         * @param id
         */
        public static <T>void remove(Class<T> clazz, Serializable id) {
            dao.remove(clazz,id);
        }
    
    }

    这里面要重点说一下ApplicationUtil这个获取容器Bean的类。再说这个类之前,先说一下MyApplicationContextUtil这个类:

    util类——MyApplicationContextUtil.java

    package cn.itcast.oa.util;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    public class MyApplicationContextUtil implements ApplicationContextAware{
    
        private  ApplicationContext context;
        private Log log = LogFactory.getLog(this.getClass());
        
        @Override
        public void setApplicationContext(ApplicationContext contex)
                throws BeansException {
            this.context = contex;
            
        }
        
        public void handle() {
    //        JPAUtil.setApplicationContext(context);
            ApplicationUtil.setApplicationContext(context); 
            log.debug("applicationContext进行设置完成。。。");
            
        }
    
        
    }

    这个类实现了ApplicationContextAware接口,因此可以直接获取到ApplicationContext。这种方法和使用private static ApplicationContext ac = new  ClassPathXmlApplicationContext("applicationContext.xml"); 获取有异曲同工之处,不过还是采用了上面这种方法,因为在此方法中的handle()中可以进行后续的扩展。

    这个接口在Spring的官方文档中也有阐述:

    大体意思:当容器创建了一个对象实例,这个实例实现了ApplicationContextAware接口,那么这个实例可以当做这个容器的引用。

    在MyApplicationContextUtil类中,当它创建一个实例后就可当做ApplicationContext容器的引用,而这个类是在spring容器初始化时给实例化了,在配置文件中给出了。然后这个实例类又将ApplicationContext对象set到了ApplicationUtil类中。

    <!--获取Spring容器管理对象的环境类 -->
        <bean id="myApplicationContext" class="cn.itcast.oa.util.MyApplicationContextUtil"
            init-method="handle"></bean>

    util类——ApplicationUtil.java

    package cn.itcast.oa.util;
    
    import org.springframework.context.ApplicationContext;
    
    public class ApplicationUtil {
    private static ApplicationContext applicationContext;
        
        public static Object getBean(String beanName) {
            return getCtx().getBean(beanName);
        }
    
        public static void setApplicationContext(ApplicationContext ctx) {
            applicationContext = ctx;
        }
        
        private static ApplicationContext getCtx() {
            return applicationContext;
        }
    }

    这样,在JPAUtil类中,就可以拿到容器对象,然后拿到对应的实现Bean了,然后实现其中的方法。

  • 相关阅读:
    python 学习——sqlalchemy 模块
    python学习——数据库基本知识mysql
    算法设计22——并行算法2 实际应用中的优化
    Perl 学习
    python学习——装饰器、生成器、迭代器
    算法设计19—— 全对最短路径 Floyd算法
    asp.net Core 使用过滤器判断请求客户端是否为移动端,并实现PC端和移动端请求映射和自动跳转
    在windows平台使用Apache James搭建邮件服务器以及使用C#向外网发送邮件
    asp.net core3.1策略授权问题
    Unity调用安卓中的方法遇到的问题
  • 原文地址:https://www.cnblogs.com/haojiahong/p/4614825.html
Copyright © 2011-2022 走看看