搭建第一個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了,然后實現其中的方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM