使用JdbcTemplate進行批量操作
spring.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.spring" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://210.30.12.3:3306/spring" /> <property name="username" value="root" /> <property name="password" value="sa" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan"> <list> <value>com.spring.model</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="entityServiceImpl" class="com.spring.service.impl.EntityServiceImpl" /> <bean id="batchOperationDao" class="com.spring.dao.BatchOperationDao" /> <tx:annotation-driven transaction-manager="txManager" /> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="insert*" rollback-for="Throwable" /> <tx:method name="*" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.spring.service..*.*(..))" id="entityServiceOperation" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="entityServiceOperation" /> </aop:config> --> </beans>
JdbcTemplate的批量操作特性需要實現特定的介面BatchPreparedStatementSetter來進行的, 通過實現這個介面,並將其傳入batchUpdate方法進行呼叫。 這個介面有兩個方法需要實現。一個叫做getBatchSize來提供當前需要批量操作的數量。另外一個方法是setValues 允許你為prepared statement設定引數。這個方法將在整個過程中被呼叫的次數,則取決於你在getBatchSize中所指定的大小。 下面的示例展示了根據傳入的list引數更新person表,而傳入的list同時作為批量操作的引數
package com.spring.dao; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; import javax.annotation.Resource; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import com.spring.model.Person; /** * <p> * 批量操作,批量更新 * </p> * * @author changlun.cheng * @since 2012-4-28 * @see BatchPreparedStatementSetter * @see JbdcTemplate */ public class BatchOperationDao { private JdbcTemplate jdbcTemplate; public int[] batchUpdate(final List<Person> persons) { String sql = "update person p set name = ?, age = ? where id = ? "; int[] updateCount = this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { ps.setString(1, persons.get(i).getName()); ps.setInt(2, persons.get(i).getAge()); ps.setInt(3, persons.get(i).getId()); System.out.println(persons.get(i).getId()); } @Override public int getBatchSize() { return persons.size(); } }); return updateCount; } @Resource(name = "jdbcTemplate") public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }
Boot,java
package com.spring.util; import java.util.ArrayList; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.spring.dao.BatchOperationDao; import com.spring.model.Person; import com.spring.service.EntityService; public class Boot { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext( new String[] { "spring.xml" }, Boot.class); EntityService es = (EntityService) ac.getBean("entityServiceImpl"); Person p = new Person(); p.setId(8); p.setAge(23); p.setName("**"); // es.update(p); // System.out.println(es.delete(p)); es.insert(p); // es.getPerson("stop"); BatchOperationDao bt = (BatchOperationDao) ac .getBean("batchOperationDao"); List<Person> persons = new ArrayList<Person>(); p.setAge(322); persons.add(p); p.setName("youdao"); persons.add(p); p.setName("reyoudao"); persons.add(p); System.out.println(bt.batchUpdate(persons)[0]); batch(); } private static void batch() { } }
相關推薦
使用JdbcTemplate進行批量操作
spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/200
mybatis進行批量操作時的需要設定allowMultiQueries=true
前言:在專案開發的時遇到同時執行多條刪除或者更新語句,將語句放到mysql命令列來執行是沒有問題的,可到了mybatis就報錯,為啥呢? 解決: 請大家先看一段程式碼: <update id="updateId"> delete from
mybatis使用foreach進行批量操作 The error may involve defaultParameterMap
觸發現象 xml: <insert id="insertByList"> <foreach collection="tagList" item="tag" separator=";"> insert into table(name) se
JedisCluster模式嘗試進行批量操作
搭建完redis集群后,可以通過jedis的JedisCluster來訪問Redis叢集,這裡列出使用jedisCluster的spring bean配置方式: <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConf
使用Redis的管道(Pipeline)進行批量操作
Redis管道技術簡介 Reids是一個cs模式的Tcp服務,類似於http的請求。 當客戶端傳送一個請求時,伺服器處理之後會將結果通過響應報文返回給客戶端 。 那麼當需要傳送多個請求時,難道每次都要等待請求響應,再發送下一個請求嗎? 當然不是,這
MyBatis利用動態SQL進行批量操作
什麼是動態SQL 簡單來說就是可以根據使用者輸入的查詢條件生成不同的查詢SQL。 動態SQL有哪些元素 --判斷元素:if,choose --關鍵字元素:where,set,trim --迴
JdbcTemplate batchUpdate 批量操作加事務
JdbcTemplate batchUpdate 可以用來進行批量操作,但在中途某條資料出錯時如何處理? 加入spring事務,目前發現一種能通過spring程式設計式事務(基於TransactionTemplate 的事務管理)可以實現。 1.不帶返回型別 public void transfer(f
JAVA對MYSQL資料庫進行批量操作,addBatch(),executeBatch()方法
有人說MySql的JDBC驅動,不是真正支援批量操作的,就算你在程式碼中呼叫了批量操作的方法,MySql的JDBC驅動也是按照一般操作來處理的。 但其實並非如此,Mysql 是有特殊的方式優化整個batch insert 結果的。 可不可以先假設 batch 的方式與非
SQL SERVER中使用Merge進行批量操作
在.net開發過程中,經常會和資料庫打交道。微軟的產品包裡,SQL SERVER便是一個強大的資料庫管理系統(DBS)。我們編寫的.net程式怎麼和DBS進行互動呢?筆者最常用的便是ado.net元件,其中包括了執行sql命令,執行儲存過程等豐富的操作方法。在ERP(企業
PowerDesigner中使用vbscript訪問物件進行批量操作
Power Designer是資料建模中一個比較常用的工具,比較擅長大規模的E-R模型的設計。對於一些批量操作,可以通過vbscript指令碼進行。用法:開啟物理模型,點選選單“Tools->Execute Commands -> Edit/Run Script...",或者快捷鍵(Ctr
JdbcTemplate 執行批量操作
public RemoveBaseEmergencyEventsArrayResponse removeBaseEmergencyEvents(RemoveBaseEmergencyEventsArray rbeArr) { final List<String&g
mybatis使用foreach進行批量插入和刪除操作
JD div foreach class AR tis 默認 post AC 一、批量插入 1.mapper層 int insertBatchRoleUser(@Param("lists") List<RoleUser> lists);//@Param
【java】【mybatis】在使用mybatis進行批量插入,批量更新等批量操作時,切割In集合List進行分批批量操作的java中的切割代碼
lse span ati 批量更新 次數 sublist 調用 size == 紅字部分代表mybatis的批量操作調用方法: int num = 0; int maxLength = 200; in
jsp中對資料進行批量刪除操作
批量刪除的SQL:delete from user where uid in(主鍵列表); UserBiz: //批量刪除 public boolean batchDelete(String[] uids); UserBizImpl: public
js 通過全選操作來進行批量刪除與批量修改
效果圖 1.先說js進行全選: //展示這麼多,其實只需要看標紅部分就行 <form name="action" class="form-horizontal" role="form" method="post" enctype="multipart
2500-使用MyBatis操作MySQL進行批量更新的注意事項
原則上一條SQL只更新一條資料庫操作,但有時需要批量操作資料,特別是一些DML語句,在操作資料庫時,資料庫會報出異常,不允許混合語句,此時需要額外配置進行相容。 例如: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExce
Spring JdbcTemplate批量操作
使用SimpleJdbcTemplate進行批量操作 SimpleJdbcTemplate類提供了另外一種批量操作的方式。無需實現一個特定的介面,你只需要提供所有在呼叫過程中要用到的引數,框架會遍歷這些引數值,並使用內建的prepared statement類進行批量操作。API將根據你是否使用
從零學springboot——使用jdbcTemplate的方式自定義sql進行資料庫操作
引入jdbcTemplate依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta
使用python連線資料庫並且進行批量新增資料的操作
1.搭建python的mysql環境在cmd中進入C:\Python34\Scripts資料夾,輸入pip install PyMySQL即可安裝,python的外掛安裝基本都可以通過pip這個命令實現。2.寫一個簡單的指令碼進行驗證。關於python的編輯器,推薦使用PyC
通過http介面進行批量post操作(json格式)
//通過@Test或者main方法來進行 相關依賴 //poi <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar