趁今天休息,把昨天不會的知識總結(jié)一下,這幾天小湯給我們帶項目,給大家的感覺就是老師水平很高,我們還得苦修幾年才行啊,小湯經(jīng)驗挺豐富的,以至于我們
遇到問題時,他一問這個對象可以有嗎?下面萬籟無聲時,小湯一般就說“這個可以有”,好了,還是總結(jié)知識點吧:
1.HIbernate創(chuàng)建查詢,首先拿到session,再
List list = session .createQuery(//
" FROM Department d WHERE d.parentId = ?")//
.setParameter(0,值)//
.list();
之后測試,一般對于CRUD操作,都要單元測試。
注意:
用//格式固定格式,Hibernate源碼就是這樣固定格式的
2.用到的標(biāo)簽(不熟練的)舉例:
<html:link
action="/dept?method=editUI&id=${department.id}">修改<
/html:link>
<html:link
action="/dept?method=del&id=${department.id}&parentId=${parent.id}"
onclick="return window.confirm('您確定要刪除這條記錄嗎?')">刪除</html:link>
3.外鍵可以為空
4.游離:數(shù)據(jù)庫中有,但沒有和session關(guān)聯(lián),Hibernate根據(jù)id判定是否是游離狀態(tài),如果你id有值 ,則不是游離。
我在網(wǎng)上查了一下什么是游離對象?
游離對象的特征。游離對象具有以下特征:
(1) 不再位于Session的緩存中,也可以說,游離對象不被Session關(guān)聯(lián)。
(2) 游離對象是由持久化對象轉(zhuǎn)變過來的,因此在數(shù)據(jù)庫中可能還存在與它對應(yīng)的記錄(前提條件是沒有其他程序刪除了這條記錄)。
游離對象與臨時對象的相同之處在于,兩者都不被Session關(guān)聯(lián),因此Hibernate不會保證它們的屬性變化與數(shù)據(jù)庫保持同步。游離對象與臨時對象
的區(qū)別在于:前者是由持久化對象轉(zhuǎn)變過來的,因此可能在數(shù)據(jù)庫中還存在對應(yīng)的記錄,而后者在數(shù)據(jù)庫中沒有對應(yīng)的記錄。
Session的以下方法使持久化對象轉(zhuǎn)變?yōu)橛坞x對象:
(1)
當(dāng)調(diào)用Session的close()方法時,Session的緩存被清空,緩存中的所有持久化對象都變?yōu)橛坞x對象。如果在應(yīng)用程序中沒有引用變量引用這
些游離對象,它們就會結(jié)束生命周期。
(2)Session的evict()方法能夠從緩存中刪除一個持久化對象,使它變?yōu)橛坞x狀態(tài)。當(dāng)Session的緩存中保存了大量的持久化對象,會消耗
許多內(nèi)存空間,為了提高性能,可以考慮調(diào)用evict()方法,從緩存中刪除一些持久化對象。但是多數(shù)情況下不推薦使用evict()方法,而應(yīng)該通過查
詢語言,或者顯式的導(dǎo)航來控制對象圖的深度。
感覺這段話說的挺好的,就copy下來
5.注冊時間轉(zhuǎn)換器
轉(zhuǎn)換器為便于在項目中易于維護(hù),放在一個Servlet中,然后將Servlet配置在web.xml中
時間轉(zhuǎn)換器:
Java代碼
package cn.itcast;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class UtilDateConverter implements Converter {
private static SimpleDateFormat format = new
SimpleDateFormat("yyyy-MM-dd");
public Object convert(Class type, Object value) {
if (value == null) {
return value;
}
if (value instanceof Date) {
return value;
}
if (value instanceof String) {
try {
return format.parse((String) value);
} catch (ParseException ignore) {
}
}
return null;
}
}
Servlet類:
Java代碼
package cn.itcast;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.commons.beanutils.ConvertUtils;
public class InitConvert extends HttpServlet {
@Override
public void init() throws ServletException {
//注冊轉(zhuǎn)換器
ConvertUtils.register(new UtilDateConverter(), Date.class);
}
}
web.xml配置:
<servlet>
<servlet-name>InitConvert </servlet-name>
<servlet-class>cn.itacst.InitConvert </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
6. ActionForward 動態(tài)傳參問題:
ActionForward af = mapping.findForward(“toList”);
return new ActionForward(af.getPath+"&parentId="+af,af.getRedirect);
好了,今天就寫到此吧,明天還要上課,睡了!