批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。但Hibernate在批量更新数据方面始终比JDBC的效率要低,今天在网上搜到一个方法可以绕过Hibernate API,直接通过JDBC来指批量更新数据。
以下是指更新数据:
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
try{
Connection con=session.connection();
PreparedStatement stmt=con.prepareStatement("update TEntinfo as ent set ent.groupId=null"+
" where ent.entId= "+entid);
stmt.executeUpdate();
}catch(Exception ex){
ex.printStackTrack();
}
tx.commit();
con.close();
session.close();
以下是指增加记录:
session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Connection con = session.connection();
try {
String sql = "insert into t_notice(Accepter,Title_cn,Content_cn,"
+ "Title_en,Content_en,Author,CreateTime) values(?,?,?,?,?,?,?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, Accepter);
stmt.setString(2, titleCn);
stmt.setString(3, contentCn);
stmt.setString(4, titleEn);
stmt.setString(5, contentEn);
stmt.setString(6, author);
stmt.setDate(7, createTime);
stmt.addBatch();
stmt.executeBatch();
flag = true;
} catch (Exception e) {
e.printStackTrace();
con.rollback();
tx.rollback();
flag = false;
}
tx.commit();
con.close();
session.close();
通过Session的connection()方法获得该Session使用的数据库连接,然后通过它创建PreparedStatement对象并执行SQL语句。值得注意的是,应用程序仍然通过Hibernate的Transaction接口来声明事务边界。
以下是指更新数据:
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
try{
Connection con=session.connection();
PreparedStatement stmt=con.prepareStatement("update TEntinfo as ent set ent.groupId=null"+
" where ent.entId= "+entid);
stmt.executeUpdate();
}catch(Exception ex){
ex.printStackTrack();
}
tx.commit();
con.close();
session.close();
以下是指增加记录:
session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Connection con = session.connection();
try {
String sql = "insert into t_notice(Accepter,Title_cn,Content_cn,"
+ "Title_en,Content_en,Author,CreateTime) values(?,?,?,?,?,?,?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, Accepter);
stmt.setString(2, titleCn);
stmt.setString(3, contentCn);
stmt.setString(4, titleEn);
stmt.setString(5, contentEn);
stmt.setString(6, author);
stmt.setDate(7, createTime);
stmt.addBatch();
stmt.executeBatch();
flag = true;
} catch (Exception e) {
e.printStackTrace();
con.rollback();
tx.rollback();
flag = false;
}
tx.commit();
con.close();
session.close();
通过Session的connection()方法获得该Session使用的数据库连接,然后通过它创建PreparedStatement对象并执行SQL语句。值得注意的是,应用程序仍然通过Hibernate的Transaction接口来声明事务边界。