在系统中利用hibernate的API我们可以做很多事情,数据的读,存,删等,都比较的方便,但是如批量添加、更新、删除操作,量大的话会严重影响系统的性能,有两个算是比较好的办法解决。
1、直接通过JDBC API来执行该SQL语句
2、通过存储过程
在这两个操作中首先都要得到Connection,当然这也可以通过
- tx = session.beginTransaction();
- Connection con=session.connection();
来得到,在我现在使用的一个系统中是hibernate与spring的整合。通过一个.properties文件的配置来得到与数据库的连接。文件如下:
- hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
- hibernate.connection.url=jdbc:oracle:thin:@192.168.2.11:1521:oracle
- hibernate.connection.username=db_test
- hibernate.connection.password=test
- hibernate.show_sql=true
在此我们也是要利用这个属性文件来写一个DBConnection类来获取JDBC的连接。DBConnection类如下:
- package com.***.***.util;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.net.URL;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.util.Properties;
- public class DBConnection {
- public Connection getConnection() {
- Properties properties = new Properties();
- URL in = this.getClass().getClassLoader().getResource("jdbc.properties");
- try {
- properties.load(new FileInputStream(in.getFile()));
- } catch (FileNotFoundException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- String driver =properties.getProperty("hibernate.connection.driver_class");
- String url=properties.getProperty("hibernate.connection.url");
- String user=properties.getProperty("hibernate.connection.username");
- String password=properties.getProperty("hibernate.connection.password");
- Connection con;
- try{
- Class.forName(driver);
- con=DriverManager.getConnection(url,user,password);
- return con;
- }catch (ClassNotFoundException e){
- System.out.println(e.getMessage());
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }
- return null;
- }
- }
要想获取Connection,只需要
- DBConnection db = new DBConnection();
- Connection conn = db.getConnection();
接下来的操作就是普通的JDBC操作了。以下是一段参考代码:
- //serviceImpl中的一个方法
- public boolean addForm(String code,String name,String content)throws MailException{
- DBConnection db = new DBConnection();
- Connection conn = db.getConnection();
- try {
- conn.setAutoCommit(false);
- String queryStr = "insert into form(code,name,content)values(?,?,?)";
- PreparedStatement pstm = conn.prepareStatement(queryStr);
- pstm.setString(1,code);
- pstm.setString(2,name);
- Reader clobReader = new StringReader(content); // 将 text转成流形式
- pstm.setCharacterStream(3, clobReader, content.length());// 替换sql语句中的
- pstm.executeUpdate();
- conn.commit();
- } catch (SQLException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- return false;
- }finally{
- if(conn!=null){
- try {
- conn.close();
- } catch (SQLException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- }
- }
- }
- return true;
- }