`
zhangrong108
  • 浏览: 206635 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Tapestry5 与Ibatis3 的整合

阅读更多
与现在最流行的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
1
0
分享到:
评论

相关推荐

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.2.1. 创建SqlMap 12.5.2.2. 使用 SqlMapTemplate 和 SqlMapDaoSupport 12.5.3. iBATIS SQL Maps 2.x 12.5.3.1. 创建SqlMapClient 12.5.3.2....

    spring doc格式

    2. **与其他框架集成**:Spring可以很好地与现有的WebWork、Struts或Tapestry等UI框架配合,通过ApplicationContext和WebApplicationContext进行业务逻辑和前端的集成,同时利用Spring的事务管理服务。 3. **远程...

    spring chm文档

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.3. iBATIS SQL Maps 2.x 12.6. JPA 12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现...

    java著名开源项目

    - **定义与作用**:Tapestry是一个基于Servlet的应用程序框架,使用组件对象模型来创建动态的、交互式的Web应用。 - **核心优势**: - **组件化**:使用组件模型,使Java代码与HTML完全分离,提高了开发效率。 - *...

    JAVA学习步骤DOC

    4. **Spring**:学习Spring的核心特性,包括IoC容器、AOP、事务管理,以及与Struts和Hibernate的整合。 5. **Log4J and JUnit**:掌握日志记录API Log4J,以及单元测试工具JUnit。 6. **SSH项目实战**:综合运用...

    Java最著名的开源项目总结.pdf

    - **SQL 映射**: iBatis 允许开发者直接编写 SQL 语句,并通过配置文件或注解与 Java 对象映射起来。 - **灵活性**: 相较于 Hibernate 等自动 ORM 工具,iBatis 更加灵活,开发者可以根据实际需求定制 SQL 查询语句...

    Java最著名的开源项目

    与Hibernate等全自动ORM框架相比,IBATIS在SQL开发工作量和数据库移植性上作出了折衷,但它为系统设计提供了更多的灵活性。 Compiere是一个具有高价值的商业应用程序,它集成了ERP和客户关系管理(CRM)功能。它...

    java相关学习资料

    从给定的文件信息中,我们可以提炼出一系列与Java学习相关的深入知识点,这些知识点涵盖了从基础到高级的各个层面,适合不同阶段的学习者。以下是对这些知识点的详细解析: ### Java基础与进阶 #### 1. Java核心...

    Spring 2.0 开发参考手册

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.3. iBATIS SQL Maps 2.x 12.6. JPA 12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现...

    创建灵活易扩展的J2EE企业应用程序框架

    表现层是用户与系统交互的界面,可以选择Struts、JSF、Tapestry、WebWork或Velocity等框架。这些框架各有优缺点,例如Struts以其简单性和广泛社区支持受到青睐,而JSF提供了更丰富的组件库和更强大的状态管理。选择...

    appfuse 学习笔记

    由Matt Raible设计,它作为一款引导性的入门级框架,演示了如何整合多个流行的技术,如Spring、Hibernate、iBatis、Struts、XDoclet、JUnit、Tapestry以及JSF等。在AppFuse中,持久层的管理借助于Hibernate对象关系...

    Spring中文帮助文档

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    Spring API

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    J2EE程序员需掌握的技术

    - Struts2:基于MVC的框架,整合了许多其他技术如OGNL和拦截器。 - Spring MVC:Spring框架的一部分,提供了强大的MVC支持。 - Tapestry:强调类型安全和组件重用。 - Wicket:基于组件的Web框架,注重开发者...

Global site tag (gtag.js) - Google Analytics