翠湖月色
No Buddha tree at all,And bright mirror nor.Now nothing at all,How dusts any more ?
首頁(yè)
新隨筆
聯(lián)系
聚合
管理
隨筆 - 251 文章 - 504 trackbacks - 0
<
2006年12月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
本博客系個(gè)人收集材料及學(xué)習(xí)記錄之用,各類(lèi)“大俠”勿擾!
留言簿
(14)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類(lèi)
JavaEE(36)
Linux與Unix(6)
Web Services and SOA(16)
WordPress或PHP(1)
人文歷史(17)
名詞解釋(2)
品讀英語(yǔ)(18)
基礎(chǔ)編程篇(9)
所感所悟(25)
報(bào)表設(shè)計(jì)與開(kāi)發(fā)(12)
數(shù)據(jù)庫(kù)(Sql server,My sql)(3)
數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)(9)
有關(guān)網(wǎng)絡(luò)(5)
雜錄(29)
經(jīng)典視聽(tīng)(12)
網(wǎng)站應(yīng)用(6)
腳本語(yǔ)言及頁(yè)面設(shè)計(jì)(8)
軟件測(cè)試技術(shù)(8)
閱讀筆記(9)
收藏夾
開(kāi)源項(xiàng)目(2)
編程開(kāi)發(fā)(3)
網(wǎng)絡(luò)應(yīng)用(2)
My Favorite Web Sites
CSDN Java 頻道
IBM developerWorks中國(guó)
Java開(kāi)源大全
J道:Java解決之道
SpringFramwork中文論壇
中國(guó)萬(wàn)維網(wǎng)聯(lián)盟論壇
中文Java學(xué)習(xí)網(wǎng)站-孫衛(wèi)琴版主
中文Java技術(shù)主力站點(diǎn)-JR論壇
綠色軟件下載-霏凡軟件站
蝙蝠英語(yǔ)學(xué)習(xí)網(wǎng)
名Bloger
Martin Fowler's blog
No1
算法研究、C/C++
月光博客
非著名Bloger
willing的Blog
德賢Blog
放水老倌
搜索
積分與排名
積分 - 202604
排名 - 284
最新評(píng)論
1.?re: Jasperreport連續(xù)打印多個(gè)報(bào)表模板-原創(chuàng)
您好博主,多個(gè)jasper報(bào)表文件合并輸出pdf文件了,請(qǐng)問(wèn)頁(yè)碼和總頁(yè)數(shù)怎么設(shè)置?謝謝!
--飛燕
2.?re: FckEditor上傳音頻視頻[未登錄](méi)
樓主可以將此代碼共享出來(lái)呀 既然這么多人要!
--hello
3.?re: FckEditor上傳音頻視頻
能不能發(fā)一份fck支持上傳,播放視頻的給我,我急用!
--張德強(qiáng)
4.?re: Struts2 select標(biāo)簽值從數(shù)據(jù)庫(kù)讀取,再提交給action
公司打個(gè)
--飛灑地方
5.?re: Jasperreport連續(xù)打印多個(gè)報(bào)表模板-原創(chuàng)
多謝,解決了我的問(wèn)題
--黃曉潔
學(xué)習(xí)筆記-Springs聲明性JDBC事務(wù)管理
近日在看臺(tái)灣人林信良的《Spring技術(shù)手冊(cè)》,這本書(shū)總體上簡(jiǎn)單易懂,適合初學(xué)者。但是在聲明性JDBC事務(wù)管理這節(jié)中的例子程序?qū)懙牟粔蛟敿?xì)。下來(lái)看看并略加修改了下。
首先,在MySQL中建立一個(gè)表myuser。注意要讓MySQL支持事務(wù),要選擇InnoDB類(lèi)型的表。
Create table myuser(
?id int (11) not null auto_increment primary key,
name varchar(100) not null default '',
age int
)type=InnoDB;
這里有個(gè)實(shí)體類(lèi)user.java:
package
?onlyfun.caterpillar;
public
?
class
?User?
{
????
private
?Integer?id;
????
private
?String?name;
????
private
?Integer?age;
????
public
?Integer?getId()?
{
????????
return
?id;
????}
????
public
?
void
?setId(Integer?id)?
{
????????
this
.id?
=
?id;
????}
????
public
?String?getName()?
{
????????
return
?name;
????}
????
public
?
void
?setName(String?name)?
{
????????
this
.name?
=
?name;
????}
????
????
public
?Integer?getAge()?
{
????????
return
?age;
????}
????
public
?
void
?setAge(Integer?age)?
{
????????
this
.age?
=
?age;
????}
}
為了面向接口編程,我們實(shí)現(xiàn)一個(gè)接口,讓DAO類(lèi)實(shí)現(xiàn)這個(gè)接口。
package
?onlyfun.caterpillar;
public
?
interface
?IUserDAO?
{
????
public
?
void
?insert(User?user);
????
public
?User?find(Integer?id);
}
具體的DAO類(lèi)如下:在這個(gè)類(lèi)中我們模擬事務(wù)處理。
package
?onlyfun.caterpillar;
import
?java.util.Iterator;
import
?java.util.List;
import
?java.util.Map;
import
?javax.sql.DataSource;
import
?org.springframework.jdbc.core.JdbcTemplate;
public
?
class
?UserDAO?
implements
?IUserDAO?
{
????
private
?JdbcTemplate?jdbcTemplate;
????
????
public
?
void
?setDataSource(DataSource?dataSource)?
{
????????jdbcTemplate?
=
?
new
?JdbcTemplate(dataSource);
????}
????
????
public
?
void
?insert(User?user)?
{
//
在這個(gè)方法中我們執(zhí)行了數(shù)據(jù)插入和數(shù)據(jù)查詢兩個(gè)操作,用來(lái)模擬事務(wù)操作。我們故意在查詢的語(yǔ)句中把數(shù)據(jù)庫(kù)表寫(xiě)成smyuser。
???????????????????????????????????
//
這樣,在insert方法執(zhí)行過(guò)程中,會(huì)由于查詢語(yǔ)句出錯(cuò)而撤銷(xiāo)之前的插入語(yǔ)句的效果。
???????String?name?
=
?user.getName();
???????
int
?age?
=
?user.getAge().intValue();
???????
???????jdbcTemplate.update(
"
INSERT?INTO?myuser?(name,age)?
"
?
???????????????
+
?
"
VALUES('
"
?
+
?name?
+
?
"
',
"
?
+
?age?
+
?
"
)
"
);
???????
???????
???????List?rows?
=
?jdbcTemplate.queryForList(
?????????
"
SELECT?*?FROM?smyuser?WHERE?id=4
"
);
???????
???????Iterator?it?
=
?rows.iterator();
???????
if
(it.hasNext())?
{
???????????Map?userMap?
=
?(Map)?it.next();
???????????Integer?i?
=
?
new
?Integer(userMap.get(
"
id
"
).toString());
???????????String?names?
=
?userMap.get(
"
name
"
).toString();
???????????Integer?ages?
=
?
new
?Integer(userMap.get(
"
age
"
).toString());
???????????User?users?
=
?
new
?User();
???????????
???????????users.setId(i);
???????????users.setName(name);
???????????users.setAge(age);
???????????System.out.println(
"
names:?
"
?
+
?users.getName());
??????????
???????}
?????
??
????}
????
public
?User?find(Integer?id)?
{
????????
????????
?????????
????????List?rows?
=
?jdbcTemplate.queryForList(
??????????
"
SELECT?*?FROM?myuser?WHERE?id=
"
?
+
?id.intValue());
????????
????????Iterator?it?
=
?rows.iterator();
????????
if
(it.hasNext())?
{
????????????Map?userMap?
=
?(Map)?it.next();
????????????Integer?i?
=
?
new
?Integer(userMap.get(
"
id
"
).toString());
????????????String?name?
=
?userMap.get(
"
name
"
).toString();
????????????Integer?age?
=
?
new
?Integer(userMap.get(
"
age
"
).toString());
????????????User?user?
=
?
new
?User();
????????????
????????????user.setId(i);
????????????user.setName(name);
????????????user.setAge(age);
????????????
????????????
return
?user;
????????}
????????
return
?
null
;
????}
}
然后,在具體測(cè)試類(lèi)中我們這樣:
package
?onlyfun.caterpillar;
import
?org.springframework.context.ApplicationContext;
import
?org.springframework.context.
??????????????support.FileSystemXmlApplicationContext;
public
?
class
?SpringDAODemo?
{
????
public
?
static
?
void
?main(String[]?args)?
{
????????ApplicationContext?context?
=
?
????????????
new
?FileSystemXmlApplicationContext(
????????????????????
"
beans-config.xml
"
);
????????
????????User?user?
=
?
new
?User();
????????
????????user.setName(
"
1matthew
"
);
????????user.setAge(
new
?Integer(
30
));
????????
????????IUserDAO?userDAO?
=
?
????????????(IUserDAO)?context.getBean(
"
userDAOProxy
"
);
????????
????????userDAO.insert(user);
????????
????????user?
=
?userDAO.find(
new
?Integer(
16
));
????????
????????System.out.println(
"
name:?
"
?
+
?user.getName());
????}
}
最后,我們來(lái)看配置文件:在這個(gè)文件中我們注入事務(wù)管理。
<?
xml?version="1.0"?encoding="UTF-8"
?>
<!
DOCTYPE?beans?PUBLIC?"-//SPRING/DTD?BEAN/EN"?
??"http://www.springframework.org/dtd/spring-beans.dtd"
>
<
beans
>
????
<
bean?
id
="dataSource"
?class
="org.apache.commons.dbcp.BasicDataSource"
?destroy-method
="close"
>
????????
<
property?
name
="driverClassName"
>
????????????
<
value
>
com.mysql.jdbc.Driver
</
value
>
????????
</
property
>
????????
<
property?
name
="url"
>
????????????
<
value
>
jdbc:mysql://localhost:3306/test
</
value
>
????????
</
property
>
????????
<
property?
name
="username"
>
????????????
<
value
>
root
</
value
>
????????
</
property
>
????????
<
property?
name
="password"
>
????????????
<
value
>
131421
</
value
>
????????
</
property
>
????
</
bean
>
????
<
bean?
id
="transactionManager"
?class
="org.springframework.jdbc.datasource.DataSourceTransactionManager"
>
????????
<
property?
name
="dataSource"
>
????????????
<
ref?
bean
="dataSource"
?
/>
????????
</
property
>
????
</
bean
>
????
<
bean?
id
="userDAO"
?class
="onlyfun.caterpillar.UserDAO"
>
????????
<
property?
name
="dataSource"
>
????????????
<
ref?
bean
="dataSource"
?
/>
????????
</
property
>
????
</
bean
>
????
<
bean?
id
="userDAOProxy"
?class
="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
>
????????
<
property?
name
="proxyInterfaces"
>
????????????
<
list
>
????????????????
<
value
>
onlyfun.caterpillar.IUserDAO
</
value
>
????????????
</
list
>
????????
</
property
>
????????
<
property?
name
="target"
>
????????????
<
ref?
bean
="userDAO"
?
/>
????????
</
property
>
????????
<
property?
name
="transactionManager"
>
????????????
<
ref?
bean
="transactionManager"
?
/>
????????
</
property
>
????????
<
property?
name
="transactionAttributes"
>
????????????
<
props
>
????????????????
<
prop?
key
="insert*"
>
PROPAGATION_REQUIRED
</
prop
>
????????????
</
props
>
????????????
????????
</
property
>
????
</
bean
>
</
beans
>
datasource這個(gè)bean中我們配置了數(shù)據(jù)源的相關(guān)屬性。在userDAOProxy這個(gè)bean中,我們配置了target、transactionManager、transactionAttributes屬性。在transactionAttributes中,我們指定所有insert*方法中操作會(huì)注入事務(wù)管理。
程序的運(yùn)行結(jié)果是,由于在insert方法中的查詢語(yǔ)句出錯(cuò),會(huì)引起之前的insert語(yǔ)句效果被撤銷(xiāo)。你也可以把查詢語(yǔ)句先設(shè)置正確,看看效果。
posted on 2006-12-30 11:17
matthew
閱讀(958)
評(píng)論(0)
編輯
收藏
所屬分類(lèi):
閱讀筆記
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
A Gentle Transition from XML to RDF—部分翻譯
reading paper系列2
reading paper系列1
學(xué)習(xí)筆記-Springs聲明性JDBC事務(wù)管理
Void類(lèi)型的指針-C語(yǔ)言
《Core Java》中的一個(gè)例子程序-日歷
《C Primer Plus》-在結(jié)構(gòu)中使用字符數(shù)組還是字符指針?
《C Primer Plus》-指向結(jié)構(gòu)的指針
《Understanding SOA With Web Services》-編制與編排規(guī)范
Copyright ©2025 matthew Powered by:
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲成人动漫在线观看
|
久久精品国产亚洲av四虎
|
亚洲JIZZJIZZ中国少妇中文
|
亚洲欧洲日本在线
|
亚洲精品午夜无码电影网
|
久久91亚洲精品中文字幕
|
亚洲码在线中文在线观看
|
9277手机在线视频观看免费
|
精品国产sm捆绑最大网免费站
|
日本免费网址大全在线观看
|
国产又大又黑又粗免费视频
|
亚洲色中文字幕无码AV
|
亚洲国产精品免费在线观看
|
亚洲国产欧美国产综合一区
|
精品一区二区三区免费观看
|
在线观看免费中文视频
|
永久黄网站色视频免费直播
|
亚洲综合日韩久久成人AV
|
亚洲男女性高爱潮网站
|
自拍偷自拍亚洲精品偷一
|
免费无码又爽又刺激网站直播
|
亚洲成人免费电影
|
免费人成在线观看播放国产
|
亚洲av无码一区二区乱子伦as
|
中文无码亚洲精品字幕
|
成人毛片100免费观看
|
24小时免费看片
|
亚洲?V无码乱码国产精品
|
亚洲日本va午夜中文字幕一区
|
亚洲日本在线电影
|
99热在线日韩精品免费
|
最近最新中文字幕完整版免费高清
|
亚洲综合另类小说色区色噜噜
|
亚洲视频一区二区在线观看
|
国产在亚洲线视频观看
|
在线观看亚洲视频
|
亚欧免费无码aⅴ在线观看
|
国产免费私拍一区二区三区
|
天天看片天天爽_免费播放
|
久久精品国产亚洲5555
|
亚洲日本久久一区二区va
|