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

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

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

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    與現(xiàn)在最流行的SSH相比較,Tapestry能夠完全替代其中Struts2和Spring,但是他還是需要一個(gè)ORM的框架。IBatis由于比較低的學(xué)習(xí)曲線,也受到很多人的喜愛。尤其是在IBatis3中引入了許多新的概念和想法,使用更加安全和便利。
    本文主要介紹如何將Tapestry5.1和IBatis3進(jìn)行整合。
    簡要步驟:
    1. 準(zhǔn)備工作
    2. 數(shù)據(jù)庫的建立
    3. POJO的建立
    4. IBatis相關(guān)配置文件的創(chuàng)建
    5. Tapestry相關(guān)代碼的完成
    概要說明:
    1、準(zhǔn)備工作。這一部分是比較簡單的,Eclipse之類的開發(fā)環(huán)境是必需的。Tapestry5.1、IBatis3(目前還是Beta7)、數(shù)據(jù)庫(我使用的是MySql)的下載安裝。
    2、數(shù)據(jù)庫的建立,由于是示例,所以數(shù)據(jù)庫的建立也非常簡單,只有一張User表,3個(gè)字段,Id,Name,Password
    3、com.sample.User類,對應(yīng)數(shù)據(jù)庫表的3個(gè)字段,生成User類
    4、IBatis配置文件:Configuration.xml,UserMapper.xml,jdbc.properties的生成, 前兩個(gè)必需,最后一個(gè)可選.
    5、在AppModule里,使用build方法, 添加服務(wù)生成IBatis3的SqlSessionFactory, 在需要使用SqlSessionFactory的地方,使用@InjectService注入即可
    詳細(xì)說明:
    1、大家到各自的網(wǎng)站上下載相應(yīng)的包好了。我只羅列一下我所用到的Lib:
        antlr-runtime-3.1.1.jar
        commons-codec-1.3.jar
        commons-lang-2.4.jar
        ibatis-3-core-3.0.0.216.jar
        javassist.jar
        log4j-1.2.14.jar
        mysql-connector-java-5.0.5.jar
        slf4j-api-1.5.10.jar
        slf4j-log4j12-1.5.10.jar
        stax2-api-3.0.1.jar
        tapestry-core-5.1.0.5.jar
        tapestry-ioc-5.1.0.5.jar
        tapestry5-annotations-5.1.0.5.jar
        woodstox-core-lgpl-4.0.7.jar
    2、Create Table
    DROP TABLE IF EXISTS `test`.`user`;
    CREATE TABLE  `test`.`user` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(45) NOT NULL,
      `password` varchar(45) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;

    3、
    package com.sample.model;
    public class User {
        private long id;
        private String name;
        private String password;
        // getter and setter    ....
    }

    4、我把Configuration.xml和UserMapper.xml都放在src目錄下,這樣在部署的時(shí)候,就是生成在classes,也就是類路徑的根目錄下。
    Configuration.xml:
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
      "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> 
    <configuration>
        <properties resource="jdbc.properties">
        </properties>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                    <property name="poolPingEnabled" value="${pingenable}"/>           
                    <property name="poolPingQuery" value="${pingquery}"/>           
                    <property name="poolPingConnectionsNotUsedFor" value="${pingnotusetime}"/>           
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="UserMapper.xml"/>
        </mappers>
    </configuration>


    UserMapper.xml:
    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE mapper 
        PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
        "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
       
    <mapper namespace="com.sample.model.UserMapper">
        <select id="selectUser" parameterType="int" resultType="com.sample.model.User"> 
            select * from user where id = #{id} 
        </select>
    </mapper>



    jdbc.properties:
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost/test?autoReconnect=true
    jdbc.username=root
    jdbc.password=root
    pingenable=true
    pingquery=SELECT 1
    pingoldertime=0
    pingnotusetime=3600000

    5、
    package com.sample.web.services;
    public class AppModule {
        public static SqlSessionFactory buildSqlSessionFactory() {
            try {
                String resource = "Configuration.xml";
                Reader reader = Resources.getResourceAsReader(resource);
                return new SqlSessionFactoryBuilder().build(reader);
            } catch (Exception e) {
                logger.warn("failed to build SqlSessionFactory: ", e);
                return null;
            }
        }

        private static Logger logger = LoggerFactory.getLogger(AppModule.class);
    }


    package com.sample.model;
    public interface UserMapper {
        public User selectUser(int id);
    }


    package com.pc.sample.web.pages;
    public class Layout {
        @InjectService("SqlSessionFactory")
        private SqlSessionFactory sqlMapper;
        public String getUserName() {
            if ( sqlMapper == null ) {
                return "null-mapper";
            }
            SqlSession session = sqlMapper.openSession();
            try {
                UserMapper userMapper = session.getMapper(UserMapper.class);
                if ( userMapper == null ) {
                    return "null-userMapper";
                }
                User user = userMapper.selectUser(1);
                if ( user == null ) {
                    return "null-user";
                }
                return user.getName();
            } catch (Exception e) {
                return "exception-" + e.getMessage();
            } finally {
                session.close();
            }
        }
    }

    幾個(gè)注意事項(xiàng):
    1, 因?yàn)槲业腎Batis的配置文件Configuration.xml是放在類路徑的根目錄下,所以在初始化SqlSessionFactory的時(shí)候,直 接用String resource = "Configuration.xml";就行了,否則需要添加相應(yīng)的路徑,比如:把Configuration.xml與User類放在一起,也就是在 com.sample.model這個(gè)package中,那么就要寫成:String resource = "com/sample/model/Configuration.xml";
    同樣,在Configuration.xml中,指定UserMapper.xml的規(guī)則也是這樣的。
    2,UserMapper的使用。Mapper的使用是IBatis3中才有的新功能,也是IBatis用戶指南中推薦使用的方式。因?yàn)檫@樣使用的話,就完全避免了類型的強(qiáng)制轉(zhuǎn)換,實(shí)現(xiàn)了類型安全。
    需要注意的是UserMapper只是一個(gè)接口。我們不需要提供這個(gè)接口的具體實(shí)現(xiàn)。IBatis3會自動生成一個(gè)具體的實(shí)例。

    其中的方法名必須與UserMapper.xml中的select語句的id一樣。在我的例子中是selectUser.
    另外,此方法的返回值的類型必須與UserMapper.xml中配置的returnType一致。
    最后要提醒的是UserMapper.xml中的namespace必須是UserMapper的全類名,在本例中就是com.sample.model.UserMapper



    評論

    # re: Tapestry最新版5.1.0.5教程(七):與IBatis3的整合  回復(fù)  更多評論   

    2010-03-03 01:32 by idreamer
    完美注入mysql-hibernate-jpa-ejb-tapestry。恩一路注入過來,看來tapestry的build方法真的很好。

    # re: Tapestry最新版5.1.0.5教程(七):與IBatis3的整合  回復(fù)  更多評論   

    2010-03-04 06:20 by usherlight
    @idreamer
    Tapestry-IoC的便利的還在于其強(qiáng)大的Configuration的Contribute功能。
    這是Tapestry重做IoC容器而不是使用Spring和Juice的原因。
    主站蜘蛛池模板: 亚洲成人免费网站| 四虎www免费人成| 亚洲熟妇AV日韩熟妇在线| 最近免费中文字幕4| 一级做a爱过程免费视| 亚洲精品午夜在线观看| 免费观看毛片视频| 国产成人免费ā片在线观看老同学| 91久久亚洲国产成人精品性色| 韩国免费三片在线视频| 免费毛片在线看不用播放器| 亚洲人成网站在线在线观看| 欧洲亚洲国产清在高| 国产成人啪精品视频免费网| 亚洲视频在线免费观看| 99亚洲乱人伦aⅴ精品| 自怕偷自怕亚洲精品| 亚洲精品高清在线| 黄色成人网站免费无码av| 免费无码又爽又刺激网站直播 | 亚洲成av人片一区二区三区| 久久久久国产精品免费看| 亚洲精品国产首次亮相| 久久亚洲精品成人| 亚洲av无码成人精品区在线播放 | 九一在线完整视频免费观看| 亚洲国产成人手机在线电影bd | 日韩毛片无码永久免费看| 日韩精品内射视频免费观看| 成年大片免费高清在线看黄| 亚洲国产视频久久| 亚洲精品自拍视频| 亚洲精品成人片在线播放| 四虎影视永久免费观看地址| 四虎永久在线精品免费观看视频| 中文字幕在线免费视频| 野花视频在线官网免费1| 国产精品亚洲综合久久| 亚洲福利视频网站| 亚洲AV无码一区二区三区DV| 国产亚洲精品看片在线观看|