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 SQL效能分析MySql
- MySQL索引效能分析MySql索引
- In和exists使用及效能分析(三):in和exists的效能分析
- mysql效能分析之explain的用法MySqlAI
- 批次殺死MySQL連線的四種方法詳解MySql
- MySQL-09.效能分析工具的使用MySql
- MySQL 索引 效能分析 show profilesMySql索引
- Mysql效能最佳化(三)MySql
- mysql 的常用批次更新MySql
- Unity效能分析(三)記憶體分析Unity記憶體
- MySQL 三種新增語句MySql
- mysql 啟停三種方式MySql
- HashMap 的 7 種遍歷方式與效能分析HashMap
- MySQL高階(3)-效能分析ExplainMySqlAI
- MySQL 查詢效能分析之 ExplainMySqlAI
- etcd:增加30%的寫入效能
- 三種提高Python程式碼效能的簡便方法Python
- 常見的五種MySQL高可用方案分析MySql
- 《MySQL 進階篇》十四:效能分析工具MySql
- mysql批次kill sessionMySqlSession
- vnc批次登入,2種VNC批次登入Linux的方法VNCLinux
- 三種提升Java程式碼效能的簡單技巧 - levelupJava
- Mysql增加節點MySql
- mysql 資料庫效能分析工具簡介MySql資料庫
- MySQL5.7/8.0效能分析shell指令碼MySql指令碼
- 【MySQL】三、效能優化之 覆蓋索引MySql優化索引
- 三種型別的物聯網平臺分析型別
- 分析三種型別的物聯網平臺型別
- 全面分析插入排序的三種插入方式排序
- elasticsearch查詢之三種fetch id的方案分析Elasticsearch
- 偽三元表示式 效能分析案例
- MySql三種常見引擎及其區別MySql
- Mysql效能最佳化(三)--explain返回的結果說明MySqlAI
- 【MySQL】批次修改排序規則MySql排序
- 第二章 :查詢與排序-------2.13_三種典型遞迴形式演算法的效能分析排序遞迴演算法
- 【知識分享】提升伺服器效能的三種負載均衡伺服器負載
- C#例項化物件的三種方式及效能對比C#物件