<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 251  文章 - 504  trackbacks - 0
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    本博客系個(gè)人收集材料及學(xué)習(xí)記錄之用,各類(lèi)“大俠”勿擾!

    留言簿(14)

    隨筆分類(lèi)

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 202604
    • 排名 - 284

    最新評(píng)論

    近日在看臺(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): 閱讀筆記
    主站蜘蛛池模板: 亚洲成人动漫在线观看| 久久精品国产亚洲av四虎| 亚洲JIZZJIZZ中国少妇中文| 亚洲欧洲日本在线| 亚洲精品午夜无码电影网| 久久91亚洲精品中文字幕| 亚洲码在线中文在线观看| 9277手机在线视频观看免费| 精品国产sm捆绑最大网免费站| 日本免费网址大全在线观看| 国产又大又黑又粗免费视频| 亚洲色中文字幕无码AV| 亚洲国产精品免费在线观看| 亚洲国产欧美国产综合一区| 精品一区二区三区免费观看| 在线观看免费中文视频| 永久黄网站色视频免费直播| 亚洲综合日韩久久成人AV| 亚洲男女性高爱潮网站| 自拍偷自拍亚洲精品偷一| 免费无码又爽又刺激网站直播| 亚洲成人免费电影| 免费人成在线观看播放国产| 亚洲av无码一区二区乱子伦as| 中文无码亚洲精品字幕| 成人毛片100免费观看| 24小时免费看片| 亚洲?V无码乱码国产精品| 亚洲日本va午夜中文字幕一区| 亚洲日本在线电影| 99热在线日韩精品免费| 最近最新中文字幕完整版免费高清| 亚洲综合另类小说色区色噜噜| 亚洲视频一区二区在线观看| 国产在亚洲线视频观看| 在线观看亚洲视频| 亚欧免费无码aⅴ在线观看| 国产免费私拍一区二区三区 | 天天看片天天爽_免费播放| 久久精品国产亚洲5555| 亚洲日本久久一区二区va|