package com.cns.certservice.dao.impl;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import com.cns.certservice.exception.DAOException;
public class HibernateTemplate {
private HibernateTemplate() {
}
/**
* static final session factory
*/
private static SessionFactory sessionFactory = null;
/**
* local thread variable used for storing share session instance
*/
private static final ThreadLocal localSession = new ThreadLocal();
/**
* log4j logger
*/
private static final Logger logger = Logger
.getLogger(HibernateTemplate.class);
/**
* use JTA transaction
*/
/**
* 該工具唯一實(shí)例。
*/
private static HibernateTemplate instance = null;
private static Transaction tx = null;
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final Configuration cfg = new Configuration();
/** Holds a single instance of Session */
private static final ThreadLocal threadLocal = new ThreadLocal();
/**
* 獲取持久工具的唯一實(shí)例,以后不是使用單實(shí)例模式,而不是采用對(duì)象池支持。
* @return PersistentTool
* @throws BaseException
*/
public synchronized static HibernateTemplate getInstance() {
if (instance == null) {
instance = new HibernateTemplate();
instance.initHibernate();
}
return instance;
}
/**
* 實(shí)現(xiàn)Hibernate的初始化配置環(huán)境。
*/
public void initHibernate() {
try {
//此處從系統(tǒng)路徑中獲取配置文件
cfg.configure(CONFIG_FILE_LOCATION);
} catch (HibernateException ex) {
ex.printStackTrace();
}
try {
// 裝載配置,構(gòu)造SessionFactory對(duì)象
sessionFactory = cfg.buildSessionFactory();
} catch (HibernateException e) {
e.printStackTrace();
}
}
/**
* Get the share session
* @
* @return Session share session
*/
public Session getSession() {
logger.debug("Now enter into getSession method of DaoUtil");
//obtain share session
Session session = (Session) localSession.get();
try {
if (session == null||!session.isOpen()) {
//get session by session factory
session = sessionFactory.openSession();
localSession.set(session);
}
} catch (HibernateException ex) {
ex.printStackTrace();
}
return session;
}
/**
* Close share session
* @
*/
public void close() {
logger.debug("Now enter into closeSessionl");
//obtain share session
Session session = (Session) localSession.get();
localSession.set(null);
if (session != null) {
try {
session.flush();
session.close();
} catch (HibernateException ex) {
ex.printStackTrace();
}
}
}
/**
* Begin JTA transaction
* @
*/
public void beginTransaction() {
logger.debug("Now enter into beginTransaction");
try {
Session session = (Session) localSession.get();
tx = session.beginTransaction();
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Commit transaction
* @
*/
public void commitTransaction() {
try {
tx.commit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Rollback transaction when breaching ACID operation
* @
*/
public void rollbackTransaction() {
try {
tx.rollback();
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Insert a record into table
* @param obj Object
* @throws DAOException
* @
*/
public int insertObject(Object obj) throws DAOException {
int res = 0;
logger.debug("Now enter into insertObject");
//obtain current share session
try {
Session session = HibernateTemplate.getInstance().getSession();
beginTransaction();
Object robj = session.save(obj);
if (robj instanceof Integer) {
res = (Integer) robj;
}
if (robj instanceof String) {
res =1;
}
session.flush();
} catch (HibernateException ex) {
rollbackTransaction();
logger.error("insertObject error:", ex);
throw new DAOException(ex);
} finally {
commitTransaction();
close();
}
return res;
}
/**
* Delete a record of database table by Hibernate po object
* @param obj Object
* @throws DAOException
* @
*/
public boolean deleteObject(Object obj) throws DAOException {
boolean res = false;
logger.debug("Now enter into deleteObject method");
//obtain current share session
try {
Session session = HibernateTemplate.getInstance().getSession();
beginTransaction();
session.delete(obj);
session.flush();
res = true;
} catch (HibernateException ex) {
rollbackTransaction();
logger.error("deleteObject error:", ex);
throw new DAOException(ex);
} finally {
commitTransaction();
close();
}
return res;
}
/**
* Update a record of database table
* @param ob Object
* @throws DAOException
* @
*/
public boolean updateObject(Object ob) throws DAOException {
boolean res = false;
logger.debug("Now enter into updateObject");
//obtain current share session
try {
Session session = HibernateTemplate.getInstance().getSession();
beginTransaction();
session.update(ob);
session.flush();
res= true;
} catch (HibernateException ex) {
rollbackTransaction();
logger.error("updateObject error:", ex);
throw new DAOException(ex);
} finally {
commitTransaction();
close();
}
return res;
}
}
posted @
2009-08-20 13:22 David1228 閱讀(1017) |
評(píng)論 (0) |
編輯 收藏
// 如果想通過(guò)iterator進(jìn)行集合的添加、刪除、修改操作,可以使用java.util.ListIterator接口,該接口實(shí)現(xiàn)了java.util.Iterator接口,同時(shí)還增加了一些額外的方法,方便使用,如add、remove、set、nextIndex(調(diào)用next方法返回元素的索引值,int類型)、previousIndex(調(diào)用previous方法返回元素的索引值,int類型)。
List<String> staff = new LinkedList<String>();
staff.add("Amy");
staff.add("Bob");
staff.add("Carl");
// 刪除方法很特殊,真正刪除的是iter左邊的元素, 類似于退格鍵。
ListIterator<String> iter = staff.listIterator();
iter.next();
iter.remove();
// 遍歷.
for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) {
String s = (String) iterator.next();
System.out.println("-------------->" + s);
}
ConcurrentModificationException異常什么時(shí)候會(huì)發(fā)生?
List<String> staff = new LinkedList<String>();
staff.add("Amy");
staff.add("Bob");
staff.add("Carl");
// ConcurrentModificationException異常什么時(shí)候會(huì)發(fā)生?
ListIterator<String> iter = staff.listIterator();
ListIterator<String> iter2 = staff.listIterator();
// 當(dāng)有多個(gè)iterator對(duì)同一個(gè)list迭代,如果有迭代器對(duì)list進(jìn)行了諸如add或remove的操作時(shí),則另一個(gè)迭代器會(huì)發(fā)生該異常。
// 因?yàn)閕terator會(huì)負(fù)責(zé)檢測(cè)所他自己的索引變化跟所迭代集合的變化是否是一致的,如果不一致就會(huì)拋出ConcurrentModificationException異常。
// 如果有進(jìn)行set方法的操作,則不會(huì)發(fā)生該異常。
iter.add("yyy");
iter.remove();
iter2.next();
// 按順序添加到集合中.
for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) {
String s = (String) iterator.next();
System.out.println("-------------->" + s);
}
Java之LinkedList集合結(jié)合listIterator的使用案例:
package com.javacore;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class LinkedListTest3 {
public static void main(String[] args) {
List<String> a = new LinkedList<String>();
a.add("a-Amy");
a.add("a-Bob");
a.add("a-Carl");
List<String> b = new LinkedList<String>();
b.add("b-xxx");
b.add("b-yyy");
b.add("b-zzz");
ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator();
// 將b集合插入/合并到a集合中
while (bIter.hasNext()) {
if (aIter.hasNext()) {
aIter.next();
}
aIter.add(bIter.next());
}
// 輸出a集合
System.out.println(a);
// 從b中刪除第二個(gè)元素
bIter = b.iterator();
while (bIter.hasNext()) {
bIter.next(); // 跳過(guò)第一個(gè)元素
if (bIter.hasNext()) {
bIter.next(); // 跳過(guò)下一個(gè)元素
bIter.remove(); // 刪除那個(gè)元素
}
}
// 輸出b集合
System.out.println(b);
// 刪除集合b
a.removeAll(b);
System.out.println(a);
}
}
posted @
2009-08-18 08:33 David1228|
編輯 收藏
http://m.tkk7.com/wujun/archive/2009/05/18/65890.html
posted @
2009-08-17 15:15 David1228|
編輯 收藏
摘要:
閱讀全文
posted @
2009-08-17 14:39 David1228 閱讀(3068) |
評(píng)論 (0) |
編輯 收藏
------------------------==================--------------------------
這個(gè)過(guò)程只是在我做項(xiàng)目中的一個(gè)簡(jiǎn)單過(guò)程,給自己做個(gè)筆記!@_@
:我用的是
tomcat和Jboss應(yīng)用服務(wù)器。
所以要將web工程和Ejb工程分開(kāi)部署好,
web工程:tomcat/webapps/raweb/目錄下通過(guò)dos命令打包(jar -cvf raweb.jar *)最好是通過(guò)Ant工具這樣比較方面些build.xml(自己試試寫(xiě)吧)!
Ejb工程:直接通過(guò)Myeclipse工具部署即可,Jboss目錄--jboss/server/default/deploy/raejb.jar
登陸進(jìn)入使用的linux平臺(tái)下:
1-web首先停止服務(wù)器,tomcat/bin目錄下執(zhí)行 ./shutdown.sh 如果以前發(fā)布過(guò)這些項(xiàng)目做些最好的方式做下備份,我是直接刪除了tomcat/webapps/raweb(rm -rf *)【刪除某個(gè)目錄下的所有文件】通過(guò)FTP工具上傳本地打好的jar包到linux的tomcat/webapps/raweb下,然后執(zhí)行該目錄下解開(kāi)jar命令:(jar -xvf raweb.jar ) ,刪除該目錄下的raweb.jar包OK?。?dòng)服務(wù),tomcat/bin目錄下(./startup.sh),然后查看日志命令(tail -f catalina.out)........ok
2-ejb首先殺掉進(jìn)程,查看信息命令(ps -ef|grep java), 找到你工程的進(jìn)程號(hào)xxxx 執(zhí)行(kill -9 xxxx),jboss/server/default/deploy/下刪除工程raejb.jar(rm -rf raejb.jar),通過(guò)FTP上傳本地jar包到該目錄下,在jboss/bin/目錄下啟動(dòng)命令(nohup ./run.sh) .查看日志(tail -f nohup.out) .....OK
順便推薦大家一個(gè)個(gè)人感覺(jué)比putty和SSH Secure Shell還方便的shell工具 XManager3.0企業(yè)版的,網(wǎng)上找下,也有注冊(cè)碼。
WebLogic下:
應(yīng)用路徑
/app/weblogic/bea/domains/epay/applications/efb
日志路徑
/app/weblogic/bea/domains/epay/logs/efb
tail -f /app/weblogic/bea/domains/epay/logs/efb/info.log
cd /app/weblogic/bea/domains/epay
netstat -lnap|grep 7005
kill -9 進(jìn)程號(hào)
nohup ./startWebLogic.sh &
緩存目錄
cd /app/weblogic/bea/domains/epay/servers/AdminServer/tmp/_WL_user
posted @
2009-08-10 22:58 David1228 閱讀(1353) |
評(píng)論 (0) |
編輯 收藏
只有注冊(cè)用戶登錄后才能閱讀該文。
閱讀全文
posted @
2009-04-05 12:13 David1228|
編輯 收藏
IN
確定給定的值是否與子查詢或列表中的值相匹配。
EXISTS
指定一個(gè)子查詢,檢測(cè)行的存在。
比較使用
EXISTS 和 IN 的查詢
這個(gè)例子比較了兩個(gè)語(yǔ)義類似的查詢。
第一個(gè)查詢使用 EXISTS 而第二個(gè)查詢使用 IN。注意兩個(gè)查詢返回相同的信息。
SELECT DISTINCT pub_name
FROM publishers
WHERE
EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')
-- Or, using the IN clause:
SELECT distinct pub_name
FROM publishers
WHERE pub_id
IN
(SELECT pub_id
FROM titles
WHERE type = 'business')
下面是任一查詢的結(jié)果集:
pub_name
----------------------------------------
Algodata Infosystems
New Moon Books
exits 相當(dāng)于存在量詞:表示集合存在,也就是集合不為空只作用一個(gè)集合.
例如 exist P表示P不空時(shí)為真; not exist P表示p為空時(shí)為真in表示一個(gè)標(biāo)量和一元關(guān)系的關(guān)系。
例如:s in P表示當(dāng)s與P中的某個(gè)值相等時(shí) 為真; s not in P 表示s與P中的每一個(gè)值都不相等時(shí) 為真
在Oracle SQL中取數(shù)據(jù)時(shí)有時(shí)要用到in 和
exists 那么他們有什么區(qū)別呢?
1)性能上的比較
比如Select * from T1 where x in ( select y from T2 )
執(zhí)行的過(guò)程相當(dāng)于:
select *
from t1, ( select distinct y from t2 ) t2
where t1.x = t2.y;
相對(duì)的
select * from t1 where
exists ( select null from t2 where y = x )
執(zhí)行的過(guò)程相當(dāng)于:
for x in ( select * from t1 )
loop
if (
exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
表 T1 不可避免的要被完全掃描一遍
分別適用在什么情況?
以子查詢 ( select y from T2 )為考慮方向
如果子查詢的結(jié)果集很大需要消耗很多時(shí)間,但是T1比較小執(zhí)行( select null from t2 where y = x.x )非常快,那么
exists就比較適合用在這里
相對(duì)應(yīng)得子查詢的結(jié)果集比較小的時(shí)候就應(yīng)該使用in.
in和
exists
in 是把外表和內(nèi)表作hash 連接,而
exists是對(duì)外表作loop循環(huán),每次loop循環(huán)再對(duì)內(nèi)表進(jìn)行查詢。
一直以來(lái)認(rèn)為
exists比in效率高的說(shuō)法是不準(zhǔn)確的。
如果查詢的兩個(gè)表大小相當(dāng),那么用in和
exists差別不大。
如果兩個(gè)表中一個(gè)較小,一個(gè)是大表,則子查詢表大的用
exists,子查詢表小的用in:
例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where
exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的
2:
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where
exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
not in 和not
exists
如果查詢語(yǔ)句使用了not in 那么內(nèi)外表都進(jìn)行全表掃描,沒(méi)有用到索引;
而not extsts 的子查詢依然能用到表上的索引。
所以無(wú)論那個(gè)表大,用not
exists都比not in要快。
in 與 =的區(qū)別
select name from student where name in ('zhang','wang','li','zhao');
與
select name from student where name='zhang' or name='li' or name='wang' or name='zhao'的結(jié)果是相同的。
posted @
2009-03-31 13:08 David1228 閱讀(4353) |
評(píng)論 (0) |
編輯 收藏
創(chuàng)建過(guò)程的語(yǔ)法:

Code
create [or replace] procedure procedure_name
[(argument[{in|out|in out}] type,

argument[{in|out|in out}] type)] {is|as}
procedure_body
簡(jiǎn)單的例子:

Code
create procedure RaiseError(
/*if p_Raise is true,then an unhandled error is raised.
if p_Raise is false,the procedure completes successfully.*/
p_Raise in boolean:=true,
p_ParameterA out number) as
begin
p_Parameter1:='abcdwxc';
p_Parameter2:=143;
end ParameterLength;
刪除過(guò)程語(yǔ)法:
drop procedure procedure_name;
2、創(chuàng)建函數(shù)的語(yǔ)法:

Code
create [or replace] function function_name
[(argument[{in|out|in out}] type,

argument[{in|out|in out}] type)]
return return_type {is|as}
function_body
簡(jiǎn)單函數(shù)的例子:
create function ClassInfo(
p_Department classes.department%type,
p_Course classes.course%type)
return varchar is
v_CurrentStudents number;
v_MaxStudents number;
v_PercentFull number;
begin
select current_students,max_students
into v_CurrentStudents,v_MaxStudents
from classes
where department=P_Department and course=P_Course;
--計(jì)算百分比
v_PercentFull:=v_CurrentStudents/V_MaxStudent*100;
if v_PercentFull=100 then
return 'Full';
elseif v_PercentFull>80 then
return 'Some Room';
elseif v_PercentFull>60 then
return 'More Room';
elseif v_PercentFull>0 then
return 'Lots of Room';
else
return 'Empty';
end if
end ClassInfo;
刪除函數(shù)語(yǔ)法:
drop function function_name;
posted @
2009-01-31 12:18 David1228|
編輯 收藏
只有注冊(cè)用戶登錄后才能閱讀該文。
閱讀全文
posted @
2008-12-15 15:54 David1228|
編輯 收藏
摘要:
使用的數(shù)據(jù)庫(kù)是MSSQL,庫(kù)名hibernate,預(yù)建立的表有3張。
分別是Student(學(xué)生)表,字段名:id、team_di、name、cardId、age。
team(班級(jí))表,字段名:id、team_id。
Certificate(身份證)表,字段名:id、describe。
Student與Certificate是一對(duì)一的關(guān)系,team與Student是一對(duì)多的...
閱讀全文
posted @
2008-12-15 15:44 David1228|
編輯 收藏