一般说来,应该尽可能避免在应用层进行批量操作,而应该在数据库层直接进行批量操作,例如直接在数据库中执行用于批量更新或删除的SQL语句,如果批量操作的逻辑比较复杂,则可以通过直接在数据库中运行的存储过程来完成批量操作。
并不是所有的数据库系统都支持存储过程。例如目前的MySQL就不支持存储过程,因此不能通过存储过程来进行批量更新或批量删除。
当然,在应用层也可以进行批量操作,主要有以下方式:
(1)通过Session来进行批量操作。
(2)通过StatelessSession来进行批量操作。
(3)通过HQL来进行批量操作。
(4)直接通过JDBC API来进行批量操作。
额 个人比较喜欢用原生sql 做批量处理,当然 简单的批量删除 hql野可以
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlDelete = "delete Customer c where c.name = :oldName";
int deletedEntities = session.createQuery( hqlDelete )
.setString( "oldName", "Tom" )
.executeUpdate();
tx.commit();
session.close();
以上程序代码向数据库提交的SQL语句为:
delete from CUSTOMERS where NAME="Tom"
hibernate3中可以直接通过面向对象的形式进行条件删除,或者是直接sql的形式进行批量删除。
sql代码:
session session=hibernateutil.getsessionfactory().getcurrentsession();
session.begintransaction();
string strsql=" delete from classes as a where a.classno like :name";
query query = session.createquery(strsql);
query.setstring("name", "%"+oid+"%");
session session=hibernateutil.getsessionfactory().getcurrentsession();
session.begintransaction();
string strsql="from classes as a where a.classno like :name";
query query = session.createquery(strsql);
hql代码:
session session = hibernateutil.getsessionfactory().getcurrentsession();
session.begintransaction();
list result=session.createquery("delete from classes as a where a.classno
like " '%"+oid+"%'").list();
[sql] view plaincopyprint?
session session = hibernateutil.getsessionfactory().getcurrentsession();
session.begintransaction();
list result=session.createquery("from classes as a where a.classno like " '%"+oid+"%'").list();
session session = hibernateutil.getsessionfactory().getcurrentsession();
session.begintransaction();
string result=session.createquery("delete from classes as a where a.classno like " '%"+oid+"%'").list();
用户登录
还没有账号?立即注册
用户注册
投稿取消
| 文章分类: |
|
还能输入300字
上传中....
一顿吃两碗