国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

HibernateTemplate回調(diào)函數(shù)的使用以及條件語句的拼接

2019-11-08 20:44:10
字體:
供稿:網(wǎng)友

一:查詢框架流程(架構(gòu)) 為了實現(xiàn)查詢代碼復(fù)用的效率,因此需要給所有的查詢寫一個抽象類BaseQuery,因此在將來收到頁面的查詢條件數(shù)據(jù),就以BaseQuery的格式傳遞,action到serrvice層以BaseQuery的格式傳遞,service傳到dao的數(shù)據(jù)也以BaseQuery的格式傳遞,在BaseQuey里邊有一個map類型的屬性,查詢條件的拼接都在調(diào)用basequery.buildWhere的時候拼接好了,

這個架構(gòu)應(yīng)該是項目的一個亮點(diǎn)應(yīng)為如何根據(jù)用戶輸入的條件來查詢具體的數(shù)據(jù),這個架構(gòu)大大的提高了代碼的復(fù)用率

BaseQuery是一個基礎(chǔ)的約束類,這個類用于獲取到用戶在頁面輸入的查詢條件,并且將查詢條件進(jìn)行封裝,封裝成map的形式,然后再后臺查詢的時候進(jìn)行hql語句的拼接,hql語句的拼接也是其中的一個亮點(diǎn)

package cn.edu.nwsuaf.GYL.query;import java.util.HashMap;import java.util.Map;//兩個功能//1:提供一個抽象方法,把具體頁面上的表單元素封裝成map,//2:提供一個map,供子類使用public abstract class BaseQuery { //把頁面上表單中的表單元素封裝成map結(jié)構(gòu) PRivate Map<String, Object> keyValues = new HashMap<String, Object>(); //當(dāng)前頁碼,初始化的值為1 private int currentPage = 1; //一頁顯示的條數(shù) private int pageSize = 2; //把頁面上的查詢條件進(jìn)行封裝,封裝成一個map(String ,object)類型 //并且進(jìn)行返回 public abstract Map<String, Object> buildWhere(); public Map<String, Object> getKeyValues() { return keyValues; } public void setKeyValues(Map<String, Object> keyValues) { this.keyValues = keyValues; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; }}

條件語句的拼接類,這個類使用到了hibernateTemplate的回調(diào)函數(shù),在頁面數(shù)據(jù)查詢的時候,回調(diào)函數(shù)扮演者極為重要的作用,所以這個地方的重點(diǎn)是回調(diào)函數(shù)的使用,下面以查詢某張表的記錄的總的條數(shù)為例子來展示

@Override public int getCount(final BaseQuery baseQuery) { //hibernate的回調(diào)函數(shù) return this.hibernateTemplate.execute(new HibernateCallback<Integer>() { @Override public Integer doInHibernate(session session) throws HibernateException, SQLException { // StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("select count(*) from Department"); stringBuffer.append(" where 1=1 "); //獲取所有的查詢條件 Map<String, Object> keyValues = baseQuery.buildWhere(); //拼接查詢條件,也就是拼接where條件語句,這個語句是條件的拼接 for(Entry<String, Object> entry:keyValues.entrySet()) { stringBuffer.append("and "+entry.getKey()+"=:"+entry.getKey()); } Query query = session.createQuery(stringBuffer.toString());//存放一個hql語句 System.out.println("拼接的條件語句是:"+stringBuffer.toString()); //接下來進(jìn)行值的拼接,把where條件中的參數(shù)傳遞值的過程 for(Entry<String, Object> entry:keyValues.entrySet()) { query.setParameter(entry.getKey(),entry.getValue()); } //獲取記錄的條數(shù) Long count = (Long) query.uniqueResult(); return count.intValue(); } }); }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洛阳市| 江津市| 阿拉尔市| 延边| 汕尾市| 平原县| 天全县| 桂林市| 江门市| 平遥县| 榆中县| 临泉县| 大邑县| 玛纳斯县| 昌乐县| 水城县| 双柏县| 英超| 七台河市| 新郑市| 芜湖市| 宝应县| 丹江口市| 珠海市| 北安市| 四子王旗| 南涧| 登封市| 达孜县| 黄大仙区| 鹤岗市| 固镇县| 西林县| 徐州市| 乐都县| 临猗县| 长白| 晋宁县| 工布江达县| 定州市| 抚宁县|