<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

    本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

    留言簿(14)

    隨筆分類

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 202723
    • 排名 - 284

    最新評論

    近日在看臺灣人林信良的《Spring技術(shù)手冊》,這本書總體上簡單易懂,適合初學者。但是在聲明性JDBC事務管理這節(jié)中的例子程序?qū)懙牟粔蛟敿殹O聛砜纯床⒙约有薷牧讼隆?br />首先,在MySQL中建立一個表myuser。注意要讓MySQL支持事務,要選擇InnoDB類型的表。
    Create table myuser(
    ?id int (11) not null auto_increment primary key,
    name varchar(100) not null default '',
    age int
    )type=InnoDB;

    這里有個實體類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;
    ????}

    }
    為了面向接口編程,我們實現(xiàn)一個接口,讓DAO類實現(xiàn)這個接口。
    package?onlyfun.caterpillar;

    public?interface?IUserDAO?{
    ????
    public?void?insert(User?user);
    ????
    public?User?find(Integer?id);
    }

    具體的DAO類如下:在這個類中我們模擬事務處理。

    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)?{//在這個方法中我們執(zhí)行了數(shù)據(jù)插入和數(shù)據(jù)查詢兩個操作,用來模擬事務操作。我們故意在查詢的語句中把數(shù)據(jù)庫表寫成smyuser。
    ???????????????????????????????????
    //這樣,在insert方法執(zhí)行過程中,會由于查詢語句出錯而撤銷之前的插入語句的效果。
    ???????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;
    ????}

    }

    然后,在具體測試類中我們這樣:
    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());
    ????}

    }

    最后,我們來看配置文件:在這個文件中我們注入事務管理。
    <?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這個bean中我們配置了數(shù)據(jù)源的相關(guān)屬性。在userDAOProxy這個bean中,我們配置了target、transactionManager、transactionAttributes屬性。在transactionAttributes中,我們指定所有insert*方法中操作會注入事務管理。

    程序的運行結(jié)果是,由于在insert方法中的查詢語句出錯,會引起之前的insert語句效果被撤銷。你也可以把查詢語句先設置正確,看看效果。
    posted on 2006-12-30 11:17 matthew 閱讀(958) 評論(0)  編輯  收藏 所屬分類: 閱讀筆記
    主站蜘蛛池模板: 91亚洲视频在线观看| 歪歪漫画在线观看官网免费阅读 | 香蕉国产在线观看免费| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 99re免费99re在线视频手机版| 99视频免费在线观看| 亚洲毛片在线免费观看| 亚洲成色WWW久久网站| 久久久久免费看黄a级试看| 免费国产高清视频| 久久精品亚洲中文字幕无码网站| 两个人看的www免费视频中文| 国产亚洲婷婷香蕉久久精品 | 青青草原精品国产亚洲av| 亚洲欧美熟妇综合久久久久| 日韩在线天堂免费观看| 特级无码毛片免费视频| 久久精品国产亚洲AV嫖农村妇女| 九九精品免费视频| 国产激情免费视频在线观看| 免费大黄网站在线观| 一区二区免费电影| 国产AV无码专区亚洲精品| 日本免费人成在线网站| 亚洲国产成人久久精品大牛影视| 最近中文字幕完整免费视频ww| 一本色道久久综合亚洲精品| 猫咪免费人成网站在线观看入口 | 特级精品毛片免费观看| 亚洲综合色婷婷在线观看| 亚洲第一网站男人都懂| 国产精品免费观看调教网| 亚洲av成人一区二区三区| 免费国产成人18在线观看| 亚洲人成电影院在线观看| 国产a级特黄的片子视频免费| 在线观看片免费人成视频无码| 亚洲国产成人精品久久| 亚洲午夜福利精品久久| 国产片AV片永久免费观看 | 一级白嫩美女毛片免费|