日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > JPA EntityManager高級

JPA EntityManager高級

來源:程序員人生   發布時間:2015-05-20 11:05:29 閱讀次數:4089次

面向對象的使用,抽象封裝是家常必備,前兩篇博客說道了基本的操作分別是:

  JPA EntitManager初體驗

  JPA EntitManager進階

這次我們就對前兩次的方法進行1個基本的抽象封裝

1個方法為了應對不同類型的使用,同時為了類型安全,我們引入了泛型。泛型的加入,使方法更具有靈活性,同時也保證類型的安全,下面我們就對基本的增,該查進行基本封裝。

 

定義泛型類  

1 抽象類BaseEaoImpl<T>

Public abstract class BaseEaoImpl<T> { //實體管理器援用 protected abstract EntityManager getEntityManager(); //反射對象 private Class<T> clazz; }

先來看我們的最基本的幾個方法吧


persist(Object)

find(Class<T>,object)

createQuery(String)

merge(TEntity)


要到達的要求是這4種方法適應所有的實體類型,所以抽象出來的Eao最少是子類的抽象,到達1個公用的效果

 

其次對使用泛型的類型,對其操作還是要知道真實的類型,這里就用到了反射獲得泛型真是類型

 1.1 構造函數反射獲得泛型真是類型

        

/** * 構造函數反射泛型對象真實類型 */ public BaseEaoImpl() { ParameterizedType pType = (ParameterizedType) this.getClass().getGenericSuperclass();// 獲得當前new的對象的泛型父類 this.clazz = (Class<T>)pType.getActualTypeArguments()[0];// 獲得類型參數的真是值,就是泛型參數的個數; className= clazz.getSimpleName(); System.out.println(clazz+" "+className); }


 1.2Save方法

  保存實體

public void save(T t) { getEntityManager().persist(t); }
 

//批量保存實體

Publci booleansaveEntitys(List<T) entitys){ //為了提升性能,我們對數據進行分批次的保存,手動控制更新到數據庫 boolean flag = false; try { // 每100條往數據庫里寫入1次,相對提升性能,此值可改變 int batchSize = 100; int i = 0; for (T entity : entitys) { getEntityManager().persist(entity); i++; if (i % batchSize == 0) { getEntityManager().flush(); getEntityManager().clear(); } } flag = true; if (logger.isDebugEnabled()) { logger.debug("Eao批量保存實體成功," + getEntityManager().getClass().getName()); } } catch (Exception e) { flag = false; logger.error("Eao批量保存實體失敗", e); } return flag; }

 

 1.3 find方法

find方法,根據id或實體的某個屬性查詢等,這個時候就需要使用泛型具體類型了

 

//根據主鍵id查詢 public T findEntityById(Serializable id){ return getEntityManager().find(clazz, id); }

固然了還可以傳入集合Id

//根據id集合查詢實體集合 public List<T> getByIds(List<String> ids) { return getEntityManager().createQuery(// "FROM " + className + "WHERE id in (:ids)")// .setParameter("ids", ids)// .list(); }

1.4 更新merge

//更新實體 ---留意級聯更新的效果

public boolean updateEntity(T entity) { boolean flag = false; try { getEntityManager().merge(entity); flag = true; } catch (Exception e) { flag = false; logger.error("Eao更新實體失敗", e); } return flag; }

1.5 createQuery

createQuery的用法博大精深,以上的任何1個用戶幾近都可以用creaQuery替換


如: queryByHql

參數hqlhql語句,

Maphql中的參數與值

public List queryByHql(final String hql, final Map<Serializable, Serializable> map) { if (null == hql || "".equals(hql)) { return null; } try { Query query = getEntityManager().createQuery(hql); for (Serializable key : map.keySet()) { query.setParameter((String) key, map.get(key)); } List list = query.getResultList(); if (logger.isDebugEnabled()) { logger.debug("Eao根據hql語句查詢實體集合成功," + getEntityManager().getClass().getName()); } return list; } catch (Exception e) { logger.error("Eao根據hql語句查詢實體集合失敗", e); return null; } }

實例:

public List findSmallQuesID(String paperID,String questionTypeId){ //參數hql語句 String hql = "From PaperSecond where paperID =:paperID AND questionTypeID=:questionTypeId"; //參數hal參數與值 Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>(); map.put("paperID", paperID); map.put("questionTypeId", questionTypeId); List<PaperDetail> paperSecondList = paperSecondEao.queryByHql(hql, map); return paperSecondList; }

//根據條件更新 

//根據條件更新 //String variable(要更新的字段), String condition(更新的條件),Object... args public boolean updateByCondition(String variable, String condition, Object... args) { boolean flag = false; qltry { Query query = getEntityManager().createQuery( "update " + clazz.getSimpleName() + " as o set " + variable + " " + condition); for (int i = 0; i < args.length; i++) { query.setParameter(i + 1, args[i]); } query.executeUpdate(); flag = true; if (logger.isDebugEnabled()) { logger.debug("Eao根據條件更新實體成功," + getEntityManager().getClass().getName()); } } catch (Exception e) { flag = false; logger.error("Eao根據條件更新實體失敗", e); } return flag; }

實例:    

String variable="studentName=?,sex=?";//要修改的字段,參數用? String condition="wherestudentCode=?";//條件 flag= studentBean.updateByCondition(variable, condition, "參數1","參數2","參數3");

總結: 

通過以上幾個小的實例我們認識到,幾個小小的方法,可以引申出很多的變化,但是重點還是在于不斷的總結,不斷的抽象,特別在于對hql語句上。

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产激情亚洲 | 亚洲欧美日韩一区 | a亚洲天堂 | а天堂中文在线官网 | 国产不卡视频 | 黄片毛片在线观看 | 日本免费黄色片 | 簧片免费在线观看 | 国产成人综合在线 | 国产日韩欧美视频 | 欧美综合图 | 欧洲天堂网 | 欧美视频一区二区 | 黄色3级视频| 暖暖av | 中国av大片 | 日韩精品一二区 | 在线中文 | 国内在线视频 | 夜夜久久久 | 中文字幕无线精品亚洲乱码一区 | 欧美日韩在线看 | 精品久久久久久久久久 | 国产剧情一区二区 | 国产最新在线 | 久久一二三区 | 欧美一区二区三区影视 | 国产色网站 | 久久综合久| 午夜激情爱爱 | 日本欧美视频 | 欧美日韩在线播放 | 国产精品成人一区二区 | yellow视频在线观看免费 | 国产精品综合 | 久久99精品久久久久久久久久久久 | 97秋霞影院 | 亚洲精品在线视频 | 欧美日韩国产大片 | 欧美日韩中文在线观看 | av在线毛片 |