java – 如何使用MyBatis / Spring实现批处理?
发布时间:2020-12-14 16:30:51 所属栏目:Java 来源:网络整理
导读:我想知道如何使用MyBatis 3 amp;春天3? 例如,这是现在正在做的: spring.xml: bean id="jndiTemplateDatasource" class="org.springframework.jndi.JndiTemplate" property name="environment" props prop key="java.naming.factory.initial"${context.fac
我想知道如何使用MyBatis 3& amp;春天3?
例如,这是现在正在做的: spring.xml: <bean id="jndiTemplateDatasource" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial">${context.factory}</prop> </props> </property> </bean> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate" ref="jndiTemplateDatasource"/> <property name="jndiName" value="${connectionpool.jndi}"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test" /> </bean> MyService.xml: <insert id="insertMyRecord" parameterType="com.test.MyRecord" > insert into ... // code removed </insert> MyService.java: public interface MyService { public void insertMyRecord (MyRecord); } MyController.java: @Controller public class MyController { @Autowired private MyService myService; @Transactional @RequestMapping( .... ) public void bulkUpload (@RequestBody List<MyRecord> myRecords) { for (MyRecord record : myRecords) { myService.insertMyRecord(record); } } } 免责声明:这只是用于演示目的的伪代码 那么我该怎么做才能将其转化为批处理? 理想情况下,我希望能够以最少的“入侵”到代码中,即使用更注意的注释,但如果不可能,下一件最好的事情是什么? 此外,这需要为这一个服务配置,而不是项目中的所有内容. 解决方法
这是运行和测试的例子…
使用批次更新多行(ibatis java) 在这个例子我正在从表中更新参加计数,分别与partyid. public static int updateBatch(List<MyModel> attendingUsrList) { SqlSession session = ConnectionBuilderAction.getSqlSession(); PartyDao partyDao = session.getMapper(PartyDao.class); try { if (attendingUsrList.size() > 0) { partyDao.updateAttendingCountForParties(attendingUsrList); } session.commit(); } catch (Throwable t) { session.rollback(); logger.error("Exception occurred during updateBatch : ",t); throw new PersistenceException(t); } finally { session.close(); } } 定义变量的模型类: public class MyModel { private long attending_count; private String eid; public String getEid() { return eid; } public void setEid(String eid) { this.eid = eid; } public long getAttending_count() { return attending_count; } public void setAttending_count(long attending_count) { this.attending_count = attending_count; } } party.xml代码 批量执行的实际查询 <foreach collection="attendingUsrList" item="model" separator=";"> UPDATE parties SET attending_user_count = #{model.attending_count} WHERE fb_party_id = #{model.eid} </foreach> 接口代码在这里 public interface PartyDao { int updateAttendingCountForParties (@Param("attendingUsrList") List<FBEventModel>attendingUsrList); } 这是我的批量会话代码 public static synchronized SqlSession getSqlBatchSession() { ConnectionBuilderAction connection = new ConnectionBuilderAction(); sf = connection.getConnection(); SqlSession session = sf.openSession(ExecutorType.BATCH); return session; } SqlSession session = ConnectionBuilderAction.getSqlSession(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |