• Spring Batch 之 Sample(游标方式读写DB数据表)(八)


          前面关于Spring Batch的文章,讲述了SpringBatch对Flat、XML等文件的读写操作,本文将和大家一起讨论Spring Batch对DB的读写操作。Spring Batch对DB数据的读取操作提供两种形式,一种是以游标为基础,一条条的读取数据;另外一种是分页的方式读取DB。

          通过前面文章的讲解,大家应该对SpringBatch的框架和基本配置有了一定的了解。为了不显得啰嗦,本文只提供读取DB方式的核心配置,一些辅助信息的配置,如果不明白,可以参照前面几讲的内容。

          首先是读操作:

     1 <bean:bean id="jdbcItemReader"
    2 class="org.springframework.batch.item.database.JdbcCursorItemReader"
    3 scope="step">
    4 <bean:property name="dataSource" ref="dataSource" />
    5 <bean:property name="sql"
    6 value="select ID,USERID,USERNAME,PASSWORD from T_USER where id &lt; ?" />
    7 <bean:property name="rowMapper">
    8 <bean:bean class="org.springframework.jdbc.core.BeanPropertyRowMapper">
    9 <bean:property name="mappedClass"
    10 value="jp.co.necst.eqix.batch.jdbcTwoDest.pojo.User" />
    11 </bean:bean>
    12 </bean:property>
    13 <bean:property name="preparedStatementSetter" ref="paramStatementSetter" />
    14 </bean:bean>
    15
    16 <bean:bean id="paramStatementSetter"
    17 class="org.springframework.batch.core.resource.ListPreparedStatementSetter"
    18 scope="step">
    19 <bean:property name="parameters">
    20 <bean:list>
    21 <bean:value>#{jobParameters['id']}</bean:value>
    22 </bean:list>
    23 </bean:property>
    24 </bean:bean>

          Spring Batch对DB基于游标的读取数据操作,是由其核心类JdbcCursorItemReader来实现的。一般来说,从DB数据表中读取数据一般有以下几个步骤。首先是DB连接,这些连接DB的基本信息(像DB服务器地址、用户名、密码等信息)由dataSource属性提供,SpringBatch没有提专门供特殊的类,用的是Spring框架的DataSource。连接上了DB,下面需要关注的就是对DB具体的查询操作了,也就是SQL文的相关信息了,由其sql属性实现,主要是拼接SQL文的一个字符串。有了sql文,有可能需要传递参数,sql文参数的一些信息,由preparedStatementSetter属性来满足,具体的实现可以由SpringBatch提供的核心类ListPreparedStatementSetter来设置,如代码的16-24行。连接上了DB,执行了SQL文,最后要关心的就是查询结果的存放问题了,这一点由JdbcCursorItemReader的rowMapper属性来实现,如代码的7-12行。这样就可以将DB数据表中的数据一条条映射成我们的Pojo对象了,也就完成了读操作。

          其次是写操作:

     1 <bean:bean id="jdbcItemWriter"
    2 class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    3 <bean:property name="dataSource" ref="dataSource" />
    4 <bean:property name="sql"
    5 value="insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER)
    6 values
    7 (:id,:userId,:userName,:password,:updateDate,:updateUser)" />
    8 <bean:property name="itemSqlParameterSourceProvider">
    9 <bean:bean
    10 class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
    11 </bean:property>
    12 </bean:bean>

           写DB和读DB思路是一样的,只不过一个是从DB里读,一个是往DB里写。是由SpringBatch框架的JdbcBatchItemWriter类实现的。也有以下几个步骤:首先是连接DB,也是由dataSource属性提供;其次是执行的SQL文,有sql属性满足,最后就是如何传递参数了。写操作传递参数的时候,跟读操作有一定区别。写操作提供两种传递参数的方式:一种是直接传递一个对象进去,如上述代码8-11行所示,itemSqlParameterSourceProvider属性设置为BeanPropertyItemSqlParameterSourceProvider的实现就可以了。SQL文中的参数也是使用【:对象属性名】的方式,如上述代码的7行所示,并且区分大小写。第二种传递参数的方式是:设置JdbcBatchItemWriter类的itemSqlParameterSourceProvider属性(设置方式与读操作的paramStatementSetter属性的设置方式大同小异),当然,sql也和第一种方式有区别,使用如下形式:insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER) values (?,?,?,?,?,?).两种方式各有优势,根据实际情况自行选择。

          至此,SpringBatch读写DB的简单操作就介绍完了。下次将和大家一起讨论开发中遇到的一些高级特性和实际问题。



     

    作者:孤旅者
    如果您对本文有意见或者建议,欢迎留言,哪怕是拍砖(^_^)!
    欢迎转载,请注明出处!
    感谢您的阅读,请关注后续博客!
    共享视频教程请访问:JAVA 高级软件工程师视频
  • 相关阅读:
    数据库学习笔记3--基本的SQL语句
    数据库学习笔记2--MySQL数据类型
    数据库学习笔记1----MySQL 5.6.21的安装和配置(setup版)
    JavaWeb学习笔记1---http协议
    Spring学习笔记18--通过工厂方法配置Bean
    Spring学习笔记17--在XML中使用SPEL
    Spring 学习笔记16---properties文件的两种方式
    Spring学习笔记15--注解Bean
    Spring4.0学习笔记1---开发环境搭建
    Installed JREs时 Standard 1.1.x VM与Standard VM的区别
  • 原文地址:https://www.cnblogs.com/gulvzhe/p/2302432.html
Copyright © 2020-2023  润新知