<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永久无码精品久久| 亚洲日本天堂在线| 三年片在线观看免费大全| 亚洲欧洲日产国产最新| 9277手机在线视频观看免费| 亚洲第一福利网站| 最近中文字幕mv免费高清视频8| 久久精品国产亚洲av麻豆小说| 日韩中文字幕免费视频| 亚洲爱情岛论坛永久| 最近中文字幕大全免费视频| 亚洲精品mv在线观看| 日韩亚洲国产高清免费视频| 亚洲综合在线一区二区三区| 毛片免费vip会员在线看| 亚洲妇女无套内射精| 亚洲AV无码成H人在线观看| 国产免费黄色无码视频| 亚洲福利视频导航| 在线看片免费不卡人成视频| 久久久久亚洲精品无码网址色欲| 免费女人18毛片a级毛片视频| 免费无码午夜福利片69| 亚洲大尺度无码专区尤物| 亚洲免费视频播放| 亚洲精品无码mⅴ在线观看| 免费a在线观看播放| 久久久精品免费国产四虎| 亚洲欧洲日韩在线电影| 国产免费拔擦拔擦8x| 国产在线观a免费观看| 亚洲制服中文字幕第一区| 成年女人喷潮毛片免费播放| 伊人久久国产免费观看视频| 亚洲大尺度无码无码专区| 久久精品网站免费观看| 两个人的视频www免费| 亚洲视频在线观看2018| 国产亚洲精品看片在线观看| 57pao一国产成永久免费|