mysql三種批次增加的效能分析
下面把程式碼寫出來,希望大家批評指正.
首先domain物件.在這裡使用的註解的方式,都是比較新的版本.
User.java
複製程式碼 程式碼如下:
package com.bao.sample.s3h4.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import com.bao.sample.base.domain.BaseDomain;
@Entity
@Table(name = "t_user")
public class User extends BaseDomain {
private static final long serialVersionUID = 1L;
private int id;
private String username;
private String password;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(nullable = false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
super();
}
public User(int id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
}
接下來是Dao介面,繼承一個BaseDao介面.
複製程式碼 程式碼如下:
package com.bao.sample.s3h4.dao;
import java.util.List;
import com.bao.sample.base.dao.BaseDao;
import com.bao.sample.s3h4.domain.User;
public interface UserBatchDao extends BaseDao
public int batchAddUsingJdbc(List
public int batchAddUsingHibernate(List
public int batchAddUsingJdbcTemplate(List
}
UserBatchDao的實現:
複製程式碼 程式碼如下:
UserBatchDaoImpl
package com.bao.sample.s3h4.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Session;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate4.SessionFactoryUtils;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.bao.sample.base.dao.BaseDaoImpl;
import com.bao.sample.s3h4.domain.User;
@Repository("userBatchDao")
public class UserBatchDaoImpl extends BaseDaoImpl
@Resource
protected JdbcTemplate jdbcTemplate;
@Override
public int batchAddUsingJdbc(List
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
String sql = "insert into t_user (username,password) values (?,?)";
try {
conn = SessionFactoryUtils.getDataSource(sessionFactory).getConnection();
conn.setAutoCommit(false);
pstmt = conn.prepareStatement(sql);
for (int i = 0; i int j = 1;
pstmt.setString(j++, users.get(i).getUsername());
pstmt.setString(j++, users.get(i).getPassword());
pstmt.addBatch();
}
pstmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
if (conn != null) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return result;
}
@Override
// @Transactional(noRollbackFor = RuntimeException.class)
@Transactional
public int batchAddUsingHibernate(List
Session session = this.getSession();
for (int i = 0; i session.save(users.get(i));
// 新增20條以後,強制入庫
// clear()清空快取
// postgres資料庫的隔離級別是已提交讀(Read committed),
// 所以flush以後,資料看不到,只有commit後才能看到資料,
// 如果失敗,rollback,前面的flush的資料不會入庫
if (i % 20 == 0) {
session.flush();
session.clear();
}
}
return 0;
}
// @Transactional(noRollbackFor = RuntimeException.class)
@Transactional
public int batchAddUsingJdbcTemplate(List
String sql = "insert into t_user (username,password) values (?,?)";
final List
final int count = users.size();
BatchPreparedStatementSetter pss = new BatchPreparedStatementSetter() {
// 為prepared statement設定引數。這個方法將在整個過程中被呼叫的次數
public void setValues(PreparedStatement pstmt, int i) throws SQLException {
int j = 1;
pstmt.setString(j++, tempUsers.get(i).getUsername());
pstmt.setString(j++, tempUsers.get(i).getPassword());
}
// 返回更新的結果集條數
public int getBatchSize() {
return count;
}
};
jdbcTemplate.batchUpdate(sql, pss);
return 0;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
}
外圍的框架沒有附上,有需要可以留言,我提供打包下載.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3244/viewspace-2804456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 批次殺死MySQL連線的幾種方法MySql
- MySQL Binlog三種格式介紹及分析MySql
- In和exists使用及效能分析(三):in和exists的效能分析
- MySQL SQL效能分析MySql
- MySQL索引效能分析MySql索引
- 批次殺死MySQL連線的四種方法詳解MySql
- MySQL大量資料插入各種方法效能分析與比較MySql
- mysql效能分析之explain的用法MySqlAI
- 不停止 MySQL 服務增加從庫的兩種方式MySql
- mysql 的常用批次更新MySql
- MySQL-09.效能分析工具的使用MySql
- Mysql效能最佳化(三)MySql
- Unity效能分析(三)記憶體分析Unity記憶體
- mysql 效能調優五種方式MySql
- MySQL效能分析工具之PROFILEMySql
- MySQL 索引 效能分析 show profilesMySql索引
- PHP 效能分析(三): 效能調優實戰PHP
- MySQL 三種新增語句MySql
- mysql 啟停三種方式MySql
- HashMap 的 7 種遍歷方式與效能分析HashMap
- Java中各種線性表的效能分析Java
- 九種常用排序的效能分析總結 [zhuan]排序
- mysql備份的三種方式詳解MySql
- mysql建立使用者的三種方法MySql
- MySQL 查詢效能分析之 ExplainMySqlAI
- MySQL高階(3)-效能分析ExplainMySqlAI
- MySQL下Limit使用及效能分析MySqlMIT
- mysql批次kill sessionMySqlSession
- 【SQL 效能優化】表的三種連線方式SQL優化
- 優化MySQL資料庫效能的八種方法優化MySql資料庫
- 使用pt-stalk分析MySQL的效能波動MySql
- vnc批次登入,2種VNC批次登入Linux的方法VNCLinux
- 三種web效能壓力測試工具Web
- 常見的五種MySQL高可用方案分析MySql
- PL/SQL 批次Bind Forall 的效能表現SQL
- 三種提高Python程式碼效能的簡便方法Python
- 三種提升Java程式碼效能的簡單技巧 - levelupJava
- 【SQL 效能最佳化】表的三種連線方式SQL