<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    與現在最流行的SSH相比較,Tapestry能夠完全替代其中Struts2和Spring,但是他還是需要一個ORM的框架。IBatis由于比較低的學習曲線,也受到很多人的喜愛。尤其是在IBatis3中引入了許多新的概念和想法,使用更加安全和便利。
    本文主要介紹如何將Tapestry5.1和IBatis3進行整合。
    簡要步驟:
    1. 準備工作
    2. 數據庫的建立
    3. POJO的建立
    4. IBatis相關配置文件的創建
    5. Tapestry相關代碼的完成
    概要說明:
    1、準備工作。這一部分是比較簡單的,Eclipse之類的開發環境是必需的。Tapestry5.1、IBatis3(目前還是Beta7)、數據庫(我使用的是MySql)的下載安裝。
    2、數據庫的建立,由于是示例,所以數據庫的建立也非常簡單,只有一張User表,3個字段,Id,Name,Password
    3、com.sample.User類,對應數據庫表的3個字段,生成User類
    4、IBatis配置文件:Configuration.xml,UserMapper.xml,jdbc.properties的生成, 前兩個必需,最后一個可選.
    5、在AppModule里,使用build方法, 添加服務生成IBatis3的SqlSessionFactory, 在需要使用SqlSessionFactory的地方,使用@InjectService注入即可
    詳細說明:
    1、大家到各自的網站上下載相應的包好了。我只羅列一下我所用到的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目錄下,這樣在部署的時候,就是生成在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();
            }
        }
    }

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

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



    評論

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

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

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

    2010-03-04 06:20 by usherlight
    @idreamer
    Tapestry-IoC的便利的還在于其強大的Configuration的Contribute功能。
    這是Tapestry重做IoC容器而不是使用Spring和Juice的原因。
    主站蜘蛛池模板: 亚洲视频免费播放| 亚洲字幕在线观看| 亚洲爽爽一区二区三区| 亚洲国产午夜福利在线播放| 亚洲一本大道无码av天堂| 国产大陆亚洲精品国产| 免费一级全黄少妇性色生活片| 大地影院MV在线观看视频免费| 99久久精品免费精品国产| 成人免费在线视频| 免费成人午夜视频| 亚洲视频一区调教| 亚洲精品国产日韩| 中文字幕免费观看视频| 免费福利视频导航| 亚洲精品国自产拍在线观看| 添bbb免费观看高清视频| 久久亚洲免费视频| 亚洲精品无码成人片在线观看| 全黄A免费一级毛片| 亚洲综合网站色欲色欲| 亚洲色偷精品一区二区三区| 国产午夜无码精品免费看动漫| 日本视频免费在线| 亚洲天堂男人天堂| 国产精品免费精品自在线观看| 亚洲乱码一区二区三区在线观看| 亚洲妇女熟BBW| 免费一级一片一毛片| 精品免费tv久久久久久久| 亚洲色欲www综合网| 日本黄色动图免费在线观看| 97亚洲熟妇自偷自拍另类图片| 一区二区三区免费电影| 国产成人精品123区免费视频| 亚洲婷婷综合色高清在线| 日本特黄a级高清免费大片| 成人无码区免费A∨直播| 亚洲国产美女视频| 亚洲欧洲中文日韩av乱码| 18禁成人网站免费观看|