中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Spring Batch 之 Sample(游標(biao)方式讀寫DB數據(ju)表)(八)

      前面關于Spring Batch的文章,講述了SpringBatch對Flat、XML等文件的(de)(de)讀寫(xie)操(cao)(cao)作,本文將和大家一(yi)起(qi)討論Spring Batch對DB的(de)(de)讀寫(xie)操(cao)(cao)作。Spring Batch對DB數據的(de)(de)讀取(qu)操(cao)(cao)作提供兩種(zhong)形式,一(yi)種(zhong)是以游標為基礎(chu),一(yi)條條的(de)(de)讀取(qu)數據;另(ling)外(wai)一(yi)種(zhong)是分頁的(de)(de)方式讀取(qu)DB。

      通過前面文(wen)章的(de)(de)講解,大家應該對SpringBatch的(de)(de)框架和基本(ben)配(pei)(pei)置(zhi)有了(le)一定的(de)(de)了(le)解。為了(le)不顯得(de)啰嗦,本(ben)文(wen)只提供(gong)讀(du)取DB方式的(de)(de)核(he)心(xin)配(pei)(pei)置(zhi),一些輔(fu)助信息(xi)的(de)(de)配(pei)(pei)置(zhi),如(ru)果不明(ming)白(bai),可以參(can)照前面幾講的(de)(de)內容。

      首先是讀操作:

 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基于游標的(de)(de)(de)讀取數(shu)(shu)據(ju)(ju)操(cao)作,是由其核心(xin)類(lei)JdbcCursorItemReader來實(shi)現(xian)的(de)(de)(de)。一(yi)般來說,從DB數(shu)(shu)據(ju)(ju)表中(zhong)讀取數(shu)(shu)據(ju)(ju)一(yi)般有(you)(you)以(yi)下幾個步驟。首先是DB連(lian)(lian)接(jie),這(zhe)些連(lian)(lian)接(jie)DB的(de)(de)(de)基本(ben)信息(xi)(像(xiang)DB服(fu)務器地址、用(yong)戶(hu)名、密碼(ma)等信息(xi))由dataSource屬性(xing)提供,SpringBatch沒(mei)有(you)(you)提專門供特(te)殊的(de)(de)(de)類(lei),用(yong)的(de)(de)(de)是Spring框(kuang)架的(de)(de)(de)DataSource。連(lian)(lian)接(jie)上了(le)(le)DB,下面(mian)需要關(guan)注的(de)(de)(de)就(jiu)(jiu)是對DB具(ju)體(ti)的(de)(de)(de)查(cha)詢操(cao)作了(le)(le),也(ye)就(jiu)(jiu)是SQL文(wen)(wen)的(de)(de)(de)相(xiang)關(guan)信息(xi)了(le)(le),由其sql屬性(xing)實(shi)現(xian),主要是拼(pin)接(jie)SQL文(wen)(wen)的(de)(de)(de)一(yi)個字(zi)符串。有(you)(you)了(le)(le)sql文(wen)(wen),有(you)(you)可能需要傳遞(di)參(can)數(shu)(shu),sql文(wen)(wen)參(can)數(shu)(shu)的(de)(de)(de)一(yi)些信息(xi),由preparedStatementSetter屬性(xing)來滿(man)足,具(ju)體(ti)的(de)(de)(de)實(shi)現(xian)可以(yi)由SpringBatch提供的(de)(de)(de)核心(xin)類(lei)ListPreparedStatementSetter來設置,如代碼(ma)的(de)(de)(de)16-24行(xing)。連(lian)(lian)接(jie)上了(le)(le)DB,執行(xing)了(le)(le)SQL文(wen)(wen),最后要關(guan)心(xin)的(de)(de)(de)就(jiu)(jiu)是查(cha)詢結果的(de)(de)(de)存(cun)放問題了(le)(le),這(zhe)一(yi)點由JdbcCursorItemReader的(de)(de)(de)rowMapper屬性(xing)來實(shi)現(xian),如代碼(ma)的(de)(de)(de)7-12行(xing)。這(zhe)樣就(jiu)(jiu)可以(yi)將(jiang)DB數(shu)(shu)據(ju)(ju)表中(zhong)的(de)(de)(de)數(shu)(shu)據(ju)(ju)一(yi)條條映(ying)射(she)成我們(men)的(de)(de)(de)Pojo對象了(le)(le),也(ye)就(jiu)(jiu)完成了(le)(le)讀操(cao)作。

      其次是寫操作:

 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>

       寫(xie)DB和(he)(he)讀(du)DB思路是(shi)(shi)(shi)一(yi)樣的(de)(de)(de)(de),只不過一(yi)個(ge)是(shi)(shi)(shi)從DB里讀(du),一(yi)個(ge)是(shi)(shi)(shi)往DB里寫(xie)。是(shi)(shi)(shi)由SpringBatch框架的(de)(de)(de)(de)JdbcBatchItemWriter類實(shi)現(xian)的(de)(de)(de)(de)。也有(you)(you)(you)(you)以(yi)(yi)下幾個(ge)步驟:首先是(shi)(shi)(shi)連接DB,也是(shi)(shi)(shi)由dataSource屬性(xing)提供;其(qi)次是(shi)(shi)(shi)執行的(de)(de)(de)(de)SQL文(wen)(wen),有(you)(you)(you)(you)sql屬性(xing)滿足,最后就是(shi)(shi)(shi)如何(he)傳(chuan)遞參數(shu)(shu)了。寫(xie)操作傳(chuan)遞參數(shu)(shu)的(de)(de)(de)(de)時候,跟(gen)讀(du)操作有(you)(you)(you)(you)一(yi)定區(qu)別。寫(xie)操作提供兩種(zhong)(zhong)傳(chuan)遞參數(shu)(shu)的(de)(de)(de)(de)方(fang)式(shi):一(yi)種(zhong)(zhong)是(shi)(shi)(shi)直接傳(chuan)遞一(yi)個(ge)對(dui)象進去,如上述代碼8-11行所示,itemSqlParameterSourceProvider屬性(xing)設(she)(she)置為(wei)BeanPropertyItemSqlParameterSourceProvider的(de)(de)(de)(de)實(shi)現(xian)就可(ke)以(yi)(yi)了。SQL文(wen)(wen)中的(de)(de)(de)(de)參數(shu)(shu)也是(shi)(shi)(shi)使用(yong)【:對(dui)象屬性(xing)名】的(de)(de)(de)(de)方(fang)式(shi),如上述代碼的(de)(de)(de)(de)7行所示,并且區(qu)分大(da)小寫(xie)。第(di)二種(zhong)(zhong)傳(chuan)遞參數(shu)(shu)的(de)(de)(de)(de)方(fang)式(shi)是(shi)(shi)(shi):設(she)(she)置JdbcBatchItemWriter類的(de)(de)(de)(de)itemSqlParameterSourceProvider屬性(xing)(設(she)(she)置方(fang)式(shi)與讀(du)操作的(de)(de)(de)(de)paramStatementSetter屬性(xing)的(de)(de)(de)(de)設(she)(she)置方(fang)式(shi)大(da)同小異(yi)),當然,sql也和(he)(he)第(di)一(yi)種(zhong)(zhong)方(fang)式(shi)有(you)(you)(you)(you)區(qu)別,使用(yong)如下形(xing)式(shi):insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER) values (?,?,?,?,?,?).兩種(zhong)(zhong)方(fang)式(shi)各有(you)(you)(you)(you)優(you)勢,根據實(shi)際情(qing)況自行選擇(ze)。

      至此,SpringBatch讀寫DB的簡(jian)單(dan)操作就介(jie)紹完了。下次將(jiang)和(he)大家一起討論開發中遇到的一些(xie)高(gao)級特性(xing)和(he)實際問題。

 

 



 

posted @ 2011-12-27 23:22  孤旅者  閱讀(17981)  評論(6)    收藏  舉報