2009年3月25日
摘要: 突然間感覺身體有很多問題,而我的年齡才只有20多歲,簡直不敢相信,一場感冒的突襲,竟持續1月之久,至今,我都沒有完全康復,隨之而來的又是一系列其它的不適,我不知道,自己的身體究竟怎么了?我才只有20多歲,身體竟然如此不堪一擊。忽然想起,近年來,真的很好鍛煉身體,白天上班做一天,而上下班不是地鐵就是公交,走路很少,回到家里更是很少外出。基本上也是坐著,吃飯坐著,看電視坐著,打電腦還是坐著。每天10幾個小時奉獻給了“作者”..
閱讀全文
Error creating bean with name 'sessionFactory' defined
更多是因為jar包沖突所致,asm-util-2.2.3,asm-2.2.3,asm-commons-2.2.3 這三個保留第二個。
另外,關于用eclipse自動添加spring支持,生成的applicationContext.xml文件里定義的內容:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
應該改為:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
摘要: 1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:
select id from t where num=0
閱讀全文
摘要: PROPAGATION_REQUIRED--支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
PROPAGATION_SUPPORTS--支持當前事務,如果當前沒有事務,就以非事務方式執行。
PROPAGATION_MANDATORY--支持當前事務,如果當前沒有事務,就拋出異常。
PROPAGATION_REQUIRES_NEW--新建事務,如果當前存在事務,把當前事務掛起。
PROPAGATION_NOT_SUPPORTED--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
PROPAGATION_NEVER--以非事務方式執行,如果當前存在事務,則拋出異常。
閱讀全文
摘要: Session.load/get方法均可以根據指定的實體類和id從數據庫讀取記錄,并返回與之對應的實體對象。其區別在于:
如果未能發現符合條件的記錄,get方法返回null,而load方法會拋出一個ObjectNotFoundException。
Load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。
load方法可以充分利用內部緩存和二級緩存中的現有數據,而get方法則僅僅在內部緩存中進行數據查找,如沒有發現對應數據,將越過二級緩存,直接調用SQL完成數據讀取。
閱讀全文
摘要: 延遲加載機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數據的時候,才真正執行數據加載操作。在Hibernate中提供了對實體對象的延遲加載以及對集合的延遲加載,另外在Hibernate3中還提供了對屬性的延遲加載。下面我們就分別介紹這些種類的延遲加載的細節。
閱讀全文
摘要: OpenSessionInViewFilter是Spring提供的一個針對Hibernate的一個支持類,其主要意思是在發起一個頁面請求時打開 Hibernate的Session,一直保持這個Session,直到這個請求結束,具體是通過一個Filter來實現的。
由于 Hibernate引入了Lazy Load特性,使得脫離Hibernate的Session周期的對象如果再想通過getter方法取到其關聯對象的值,Hibernate會拋出一個 LazyLoad的Exception。所以為了解決這個問題,Spring引入了這個Filter,使得Hibernate的Session的生命周期變長。
閱讀全文
摘要: 最后,再補充一些:
分組group
常用于統計時,如分組查總數:
select gender,count(sno)
from students
group by gender
(查看男女學生各有多少)
注意:從哪種角度分組就從哪列"group by"
閱讀全文
摘要: LIKE語句的語法格式是:select * from 表名 where 字段名 like 對應值(子串),它主要是針對字符型字段的,它的作用是在一個字符型字段列中檢索包含對應子串的。
閱讀全文
摘要: PRIMARY KEY 約束唯一標識數據庫表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個表應該都一個主鍵,并且每個表只能有一個主鍵。
SQL PRIMARY KEY Constraint on CREATE TABLE
閱讀全文
摘要: 異常1:not-null property references a null or transient value
解決方法:將“一對多”關系中的“一”方,not-null設置為false
閱讀全文
摘要: 實際上接口和抽象類的選擇不是隨心所欲的。要理解接口和抽象類的選擇原則,有兩個概念很重要:對象的行為和對象的實現。如果一個實體可以有多種實現方式,則在設計實體行為的描述方式時,應當達到這樣一個目標:在使用實體的時候,無需詳細了解實體行為的實現方式。也就是說,要把對象的行為和對象的實現分離開來。既然Java的接口和抽象類都可以定義不提供具體實現的方法,在分離對象的行為和對象的實現時,到底應該使用接口還是使用抽象類呢?
閱讀全文
摘要: find(String queryString , Object value);
示例:this.getHibernateTemplate().find("from bean.User u where u.name=?", "test");
或模糊查詢:this.getHibernateTemplate().find("from bean.User u where u.name like ?", "%test%");
返回name屬性值為test的對象(模糊查詢,返回name屬性值包含test的對象)
閱讀全文
摘要: 該class提供了一系列的靜態方法操作業已存在的符合JavaBean規范定義的Java Class.這里強調的JavaBean規范,簡單來說就是一個Java Class通過一系列getter和setter的方法向外界展示其內在的成員變量(屬性).通過BeanUtils的靜態方法,我們可以: 復制一個JavaBean的實例
閱讀全文
摘要: struts2的s:iterator 可以遍歷 數據棧里面的任何數組,集合等等 以下幾個簡單的demo:
s:iterator 標簽有3個屬性:
value:被迭代的集合
id :指定集合里面的元素的id
status 迭代元素的索引
閱讀全文
左聯:
select a.id,a.name,b.address from a,b
where a.id=b.id(+)
右聯:
select a.id,a.name,b.address from a,b
where a.id(+)=b.id
外聯
SELECT a.id,a.name,b.address
FROM a,b
WHERE a.id = b.id(+)
UNION
SELECT b.id,'' name,b.address
FROM b
WHERE NOT EXISTS (
SELECT * FROM a
WHERE a.id = b.id);
在9i以上,已經開始支持SQL99標準,所以,以上語句可以寫成:
默認內部聯結:
select a.id,a.name,b.address,c.subject
from (a inner join b on a.id=b.id)
inner join c on b.name = c.name
where other_clause
左聯
select a.id,a.name,b.address
from a left outer join b on a.id=b.id
where other_clause
右聯
select a.id,a.name,b.address
from a right outer join b on a.id=b.id
where other_clause
外聯
select a.id,a.name,b.address
from a full outer join b on a.id=b.id
where other_clause
or
select a.id,a.name,b.address
from a full outer join b using (id)
where other_clause
摘要: 類集的作用、Collection、Map、Iterator、ListIterator、List、Set、Enumeration、二叉樹算法
JAVA SE的最重要四塊知識:面向對象、類集、JAVA IO、數據庫編程
閱讀全文
摘要: Ajax的工作原理相當于在用戶和服務器之間加了—個中間層,使用戶操作與服務器響應異步化。這樣把以前的一些服務器負擔的工作轉嫁到客戶端,利于客戶端閑置的處理能力來處理,減輕服務器和帶寬的負擔,從而達到節約ISP的空間及帶寬租用成本的目的。
我們以兩個驗證通行證帳號是否存在的例子來講述AJAX在實際中的應用:
(1) 用文本字符串的方式返回服務器的響應來驗證網易通行證帳號是否存在;
(2) 以XMLDocument對象方式返回響應來驗證金山通行證帳號是否存在;
閱讀全文
摘要: 大部分還是借鑒前人的代碼,添加了時間選擇功能,隱藏會遮擋控件的標簽select,object。
開始本想使用window.createPopup()來彈出日歷的選擇,這樣就可以跨過任何標簽。
不過做到中途發現用createPopup窗口實現理論上是行不通的:
一是因為不在窗體里單擊任何地方都會關閉窗口,而當用下拉框選擇年份時,很有可能會單擊到窗體外的地方,當然這個可以自己寫select來避免,但是比較麻煩;
二是窗體的寬度和高度只能在彈出時設置,而顯然,在選擇不同年月時,控件高度是要發生改變的。
鑒于上面的原因,還是決定采用普通的處理方法。
閱讀全文
摘要: 網站在注冊新用戶過程中,需要驗證很多內容。例如,用戶名是否已存在,E-mail是否已被人使用,驗證碼是否正確等。傳統方式是使用客戶端 JavaScript做初步驗證,用戶提交表單后在服務器端做進一步驗證。如果用戶輸入的內容有錯誤,會返回注冊頁面,提示用戶修改。使用了Ajax技術后,很多原來必須提交到服務器才能驗證的內容,可以在不刷新頁面的情況下直接驗證。本例就演示了這個過程,實例運行效果如圖3.1所示。
閱讀全文
JavaScript表單驗證年齡
JavaScript表單驗證年齡,判斷一個輸入量是否符合年齡,通過正則表達式實現。
//檢查年齡
function isAge(str){
var mydate=new Date;
var now=mydate.getFullYear();
if (str < now-60 || str > now-18){
return false;
}
return true;
}
正則表達式驗證郵箱
JavaScript表單驗證email,判斷一個輸入量是否為郵箱email,通過正則表達式實現。
//檢查email郵箱
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
return reg.test(str);
}
JavaScript表單驗證中文大寫字母
JavaScript表單驗證中文大寫字母,判斷一個輸入量是否為中文或大寫的英文字母,通過正則表達式實現。
// 檢查是否為有效的真實姓名,只能含有中文或大寫的英文字母
function isValidTrueName(strName){
var str = Trim(strName); //判斷是否為全英文大寫或全中文,可以包含空格
var reg = /^[A-Z u4E00-u9FA5]+$/;
if(reg.test(str)){
return false;
}
return true;
}
JavaScript表單驗證是否為中文
JavaScript表單驗證是否為中文,判斷一個輸入量是否為中文,通過正則表達式實現。
// 檢查是否為中文
function isChn(str){
var reg = /^[u4E00-u9FA5]+$/;
if(!reg.test(str)){
return false;
}
return true;
}
JavaScript表單驗證電話號碼
JavaScript表單驗證電話號碼,判斷一個輸入量是否為電話號碼,通過正則表達式實現。
//檢查電話號碼
function isTel(str){
var reg=/^([0-9]|[\-])+$/g ;
if(str.length<7 || str.length>18){
return false;
}
else{
return reg.exec(str);
}
}
本文來自: 腳本之家(www.jb51.net) 詳細出處參考:http://www.jb51.net/article/13443.htm
摘要: 經過網上搜索和自己的經驗,JSP/Servlet頁面的中文顯示為亂碼的問題可以細分為5類:
1. JSP頁面顯示亂碼。
2. Servlet接收Form/Request傳遞的參數時顯示為亂碼
3. JSP接收Form/Request傳遞的參數時顯示為亂碼
4. 用
時頁面顯示亂碼
5. 數據庫存取的時候產生亂碼。
解決方式:
1. JSP頁面顯示亂碼的解決方式:
第一種方式為在頁面的開頭加上:
閱讀全文
在JSP的開發中,迭代是經常要使用到的操作。例如,逐行的顯示查詢的結果等。在早期的JSP中,通常使用Scriptlets來實現Iterator或者Enumeration對象的迭代輸出。現在,通過JSTL的迭代標簽可以在很大的程度上簡化迭代操作。
JSTL所支持的迭代標簽有兩個,分別是<c:forEach>和<c:forTokens>。在這里介紹的是<c:forEach>標簽。
簡單點說,<c:forEach>標簽的作用就是迭代輸出標簽內部的內容。它既可以進行固定次數的迭代輸出,也可以依據集合中對象的個數來決定迭代的次數。
<c:forEach>標簽的語法定義如下所示。
<c:forEach var="name" items="expression" varStatus="name"
begin="expression" end="expression" step="expression">
body content
</c:forEach>
<c:forEach>標簽具有以下一些屬性:
l var:迭代參數的名稱。在迭代體中可以使用的變量的名稱,用來表示每一個迭代變量。類型為String。
l items:要進行迭代的集合。對于它所支持的類型將在下面進行講解。
l varStatus:迭代變量的名稱,用來表示迭代的狀態,可以訪問到迭代自身的信息。
l begin:如果指定了items,那么迭代就從items[begin]開始進行迭代;如果沒有指定items,那么就從begin開始迭代。它的類型為整數。
l end:如果指定了items,那么就在items[end]結束迭代;如果沒有指定items,那么就在end結束迭代。它的類型也為整數。
l step:迭代的步長。
<c:forEach>標簽的items屬性支持Java平臺所提供的所有標準集合類型。此外,您可以使用該操作來迭代數組(包括基本類型數組)中的元素。它所支持的集合類型以及迭代的元素如下所示:
l java.util.Collection:調用iterator()來獲得的元素。
l java.util.Map:通過java.util.Map.Entry所獲得的實例。
l java.util.Iterator:迭代器元素。
l java.util.Enumeration:枚舉元素。
l Object實例數組:數組元素。
l 基本類型值數組:經過包裝的數組元素。
l 用逗號定界的String:分割后的子字符串。
l javax.servlet.jsp.jstl.sql.Result:SQL查詢所獲得的行。
不論是對整數還是對集合進行迭代,<c:forEach>的varStatus屬性所起的作用相同。和var屬性一樣,varStatus用于創建限定了作用域的變量(改變量只在當前標簽體內起作用)。不過,由varStatus屬性命名的變量并不存儲當前索引值或當前元素,而是賦予javax.servlet.jsp.jstl.core.LoopTagStatus類的實例。該類包含了一系列的特性,它們描述了迭代的當前狀態,如下這些屬性的含義如下所示:
l current:當前這次迭代的(集合中的)項。
l index:當前這次迭代從0開始的迭代索引。
l count:當前這次迭代從1開始的迭代計數。
l first:用來表明當前這輪迭代是否為第一次迭代,該屬性為boolean類型。
l last:用來表明當前這輪迭代是否為最后一次迭代,該屬性為boolean類型。
l begin:begin屬性的值。
l end:end屬性的值
l step:step屬性的值
下面就來看兩個基本的例子,第一個例子是依次輸出集合內的元素。
<c:forEach var="item" items="${contents}" varStatus="status">
$status.count:${item}
</c:forEach>
下面的例子是一個固定次數的迭代,用來輸出1到9的平方。
<c:forEach var="x" begin="1" end="9" step="1">
${x*x}
</c:forEach>
實體對象的生命周期在Hibernate應用中是一個很關鍵的概念,正確的理解實體對象的生命周期將對我們應用Hibernate做持久層設計起到很大的作用.而所謂的實體對象的生命周期就是指實體對象由產生到被GC回收的一段過程.在這過程中我們需要理解的就是實體對象生命周期中的三種狀態.
1.自由狀態(Transient)
所謂的Transient狀態,即實體對象在內存中自由存在,與數據庫中的記錄無關,通常是我們的J2EE中VO,并沒有被納入Hibernate的實體管理容器.
1
Test test = new Test();
2
test.setName("energykk");
3
//此時的test對象處于Transient(自由狀態)并沒有被Hibernate框架所管理
4
2.持久狀態(Persistent)
何謂 Persistent? 即實體對象已經處于被Hibernate實體管理容器容器所管理的狀態.這種狀態下這個實體對象的引用將被納入Hibernate實體管理容器容器所管理.
處于Persistent狀態的實體對象,對它的變更也將被固化到數據庫中.
在J2EE中通常指的是一個PO.
Transaction tr = session.beginTransaction();
session.save(test);
//此時的test對象已經處于Persistent(持久狀態)它被Hibernate納入實體管理容器
tr.commit();
Transaction tr2 = session.beginTransaction();
test.setName("xukai");
//在這個事務中我們并沒有顯示的調用save()方法但是由于Persistent狀態的對象將會自動的固化到
//數據庫中,因此此時正處在Persistent狀態的test對象的變化也將自動被同步到數據庫中
tr2.commit();
處于Persistent狀態的實體可以簡單的理解為:如果一個實體對象與session發生了關聯,并且處于session的有效期內,那么這個實體對象就處于Persistent狀態.
3.游離狀態(Detached)
處于Persistent狀態的實體對象,其對應的session關閉以后,那么這個實體就處于Detached狀態.
我們可以認為session對象就是一個Persistent的宿主,一旦這個宿主失效,那么這個實體就處于Detached狀態.
session.close();
//與test對象關聯的session被關閉,因此此時的test對象進入Detached(游離狀態)
session2 = HibernateSessionFactory.getSession();
Transaction tr3 = session2.beginTransaction();
session2.update(test);
//此時正處于Detached狀態的test對象由于再次借助與session2被納入到Hibernate的實體管理容器所以此時的
//test對象恢復到Persistent狀態
test.setName("jjjj");
tr3.commit();
session2.close();
既然Transient狀態的實體與Detached狀態的實體都與Hibernate的實體管理容器沒有關系,那他們到底存在哪些差異?
差異就在于處于Transient狀態的只有一個Name的屬性.此時的test對象所包含的數據信息僅限于此,他與數據庫中的記錄沒有任何瓜葛.
但是處于Detached狀態的實體已經不止包含Name這個屬性,還被賦予了主鍵也就是通常POJO里的id屬性,由于id是主鍵,他可以確定數據庫表中的一條
唯一的記錄,那么自然的處于Detached狀態的實體就能與數據庫表中擁有相同id的記錄相關聯.
這就是他們之間所存在的差異,簡而言之,Transient狀態的實體缺乏與數據庫表記錄之間的聯系,而Detached狀態的試題恰恰相反.只不過是脫離了session這個數據庫操作平臺而已.