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
*/
/**
* 该工具唯一实例。
*/
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();
/**
* 获取持久工具的唯一实例,以后不是使用单实例模式,而不是采用对象池支持。
* @return PersistentTool
* @throws BaseException
*/
public synchronized static HibernateTemplate getInstance() {
if (instance == null) {
instance = new HibernateTemplate();
instance.initHibernate();
}
return instance;
}
/**
* 实现Hibernate的初始化配置环境。
*/
public void initHibernate() {
try {
//此处从系统路径中获取配置文件
cfg.configure(CONFIG_FILE_LOCATION);
} catch (HibernateException ex) {
ex.printStackTrace();
}
try {
// 装载配置,构造SessionFactory对象
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 阅读(1010) |
评论 (0) |
编辑 收藏
// 如果想通过iterator进行集合的添加、删除、修改操作,可以使用java.util.ListIterator接口,该接口实现了java.util.Iterator接口,同时还增加了一些额外的方法,方便使用,如add、remove、set、nextIndex(调用next方法返回元素的索引值,int类型)、previousIndex(调用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异常什么时候会发生?
List<String> staff = new LinkedList<String>();
staff.add("Amy");
staff.add("Bob");
staff.add("Carl");
// ConcurrentModificationException异常什么时候会发生?
ListIterator<String> iter = staff.listIterator();
ListIterator<String> iter2 = staff.listIterator();
// 当有多个iterator对同一个list迭代,如果有迭代器对list进行了诸如add或remove的操作时,则另一个迭代器会发生该异常。
// 因为iterator会负责检测所他自己的索引变化跟所迭代集合的变化是否是一致的,如果不一致就会抛出ConcurrentModificationException异常。
// 如果有进行set方法的操作,则不会发生该异常。
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集合结合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中删除第二个元素
bIter = b.iterator();
while (bIter.hasNext()) {
bIter.next(); // 跳过第一个元素
if (bIter.hasNext()) {
bIter.next(); // 跳过下一个元素
bIter.remove(); // 删除那个元素
}
}
// 输出b集合
System.out.println(b);
// 删除集合b
a.removeAll(b);
System.out.println(a);
}
}
posted @
2009-08-18 08:33 David1228|
编辑 收藏
http://www.blogjava.net/wujun/archive/2009/05/18/65890.html
posted @
2009-08-17 15:15 David1228|
编辑 收藏
摘要:
阅读全文
posted @
2009-08-17 14:39 David1228 阅读(3059) |
评论 (0) |
编辑 收藏
------------------------==================--------------------------
这个过程只是在我做项目中的一个简单过程,给自己做个笔记!@_@
:我用的是
tomcat和Jboss应用服务器。
所以要将web工程和Ejb工程分开部署好,
web工程:tomcat/webapps/raweb/目录下通过dos命令打包(jar -cvf raweb.jar *)最好是通过Ant工具这样比较方面些build.xml(自己试试写吧)!
Ejb工程:直接通过Myeclipse工具部署即可,Jboss目录--jboss/server/default/deploy/raejb.jar
登陆进入使用的linux平台下:
1-web首先停止服务器,tomcat/bin目录下执行 ./shutdown.sh 如果以前发布过这些项目做些最好的方式做下备份,我是直接删除了tomcat/webapps/raweb(rm -rf *)【删除某个目录下的所有文件】通过FTP工具上传本地打好的jar包到linux的tomcat/webapps/raweb下,然后执行该目录下解开jar命令:(jar -xvf raweb.jar ) ,删除该目录下的raweb.jar包OK!!启动服务,tomcat/bin目录下(./startup.sh),然后查看日志命令(tail -f catalina.out)........ok
2-ejb首先杀掉进程,查看信息命令(ps -ef|grep java), 找到你工程的进程号xxxx 执行(kill -9 xxxx),jboss/server/default/deploy/下删除工程raejb.jar(rm -rf raejb.jar),通过FTP上传本地jar包到该目录下,在jboss/bin/目录下启动命令(nohup ./run.sh) .查看日志(tail -f nohup.out) .....OK
顺便推荐大家一个个人感觉比putty和SSH Secure Shell还方便的shell工具 XManager3.0企业版的,网上找下,也有注册码。
WebLogic下:
应用路径
/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 进程号
nohup ./startWebLogic.sh &
缓存目录
cd /app/weblogic/bea/domains/epay/servers/AdminServer/tmp/_WL_user
posted @
2009-08-10 22:58 David1228 阅读(1344) |
评论 (0) |
编辑 收藏
只有注册用户登录后才能阅读该文。
阅读全文
posted @
2009-04-05 12:13 David1228|
编辑 收藏
IN
确定给定的值是否与子查询或列表中的值相匹配。
EXISTS
指定一个子查询,检测行的存在。
比较使用
EXISTS 和 IN 的查询
这个例子比较了两个语义类似的查询。
第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。
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')
下面是任一查询的结果集:
pub_name
----------------------------------------
Algodata Infosystems
New Moon Books
exits 相当于存在量词:表示集合存在,也就是集合不为空只作用一个集合.
例如 exist P表示P不空时为真; not exist P表示p为空时为真in表示一个标量和一元关系的关系。
例如:s in P表示当s与P中的某个值相等时 为真; s not in P 表示s与P中的每一个值都不相等时 为真
在Oracle SQL中取数据时有时要用到in 和
exists 那么他们有什么区别呢?
1)性能上的比较
比如Select * from T1 where x in ( select y from T2 )
执行的过程相当于:
select *
from t1, ( select distinct y from t2 ) t2
where t1.x = t2.y;
相对的
select * from t1 where
exists ( select null from t2 where y = x )
执行的过程相当于:
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 )为考虑方向
如果子查询的结果集很大需要消耗很多时间,但是T1比较小执行( select null from t2 where y = x.x )非常快,那么
exists就比较适合用在这里
相对应得子查询的结果集比较小的时候就应该使用in.
in和
exists
in 是把外表和内表作hash 连接,而
exists是对外表作loop循环,每次loop循环再对内表进行查询。
一直以来认为
exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和
exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用
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
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
而not extsts 的子查询依然能用到表上的索引。
所以无论那个表大,用not
exists都比not in要快。
in 与 =的区别
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'的结果是相同的。
posted @
2009-03-31 13:08 David1228 阅读(4342) |
评论 (0) |
编辑 收藏
创建过程的语法:
Code
create [or replace] procedure procedure_name
[(argument[{in|out|in out}] type,
argument[{in|out|in out}] type)] {is|as}
procedure_body
简单的例子:
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;
删除过程语法:
drop procedure procedure_name;
2、创建函数的语法:
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
简单函数的例子:
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;
--计算百分比
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;
删除函数语法:
drop function function_name;
posted @
2009-01-31 12:18 David1228|
编辑 收藏
只有注册用户登录后才能阅读该文。
阅读全文
posted @
2008-12-15 15:54 David1228|
编辑 收藏
摘要:
使用的数据库是MSSQL,库名hibernate,预建立的表有3张。
分别是Student(学生)表,字段名:id、team_di、name、cardId、age。
team(班级)表,字段名:id、team_id。
Certificate(身份证)表,字段名:id、describe。
Student与Certificate是一对一的关系,team与Student是一对多的...
阅读全文
posted @
2008-12-15 15:44 David1228|
编辑 收藏