Tapestry最新版5.1.0.5チュートリアル(7):IBatis 3との統合
現在最も流行しているSSHと比較して、TapestryはStruts 2とSpringに完全に代わることができますが、ORMのフレームワークが必要です.IBatisは比較的低い学習曲線のため、多くの人に愛されている.特にIBatis 3には多くの新しい概念と考え方が導入されており,より安全で便利に使用できる.
この記事では、Tapestry 5について説明します.1とIBatis 3を統合します.
簡単な手順:
1.準備
2.データベースの構築
3.POJOの設立
4.IBatis関連プロファイルの作成
5.Tapestry関連コードの完成
概要:
1、準備.この部分は比較的簡単で、Eclipseのような開発環境が必要です.Tapestry5.1、IBatis 3(現在はBeta 7)、データベース(MySqlを使用しています)のダウンロードインストール.
2、データベースの創立、例であるため、データベースの創立も非常に簡単で、1枚のUser表だけあって、3つのフィールド、Id、Name、Password
3、com.sample.Userクラス、データベーステーブルの3フィールドに対応し、Userクラスを生成
4、IBatisプロファイル:Configuration.xml,UserMapper.xml,jdbc.propertiesの生成は、最初の2つが必要で、最後の2つが選択可能である.
5、AppModuleでは、buildメソッドを使用して、サービスを追加してIBatis 3の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 :
3、
4、私はコンフィギュレーションをします.xmlとUserMapper.xmlはsrcディレクトリの下に配置され、配置時にclasses、すなわちクラスパスのルートディレクトリの下に生成されます.
Configuration.xml:
UserMapper.xml:
jdbc.properties:
5、
AppModule .java :
UserMapper.java
Layout.java
いくつかの注意事項:
1、私のIBatisのプロファイルのため.xmlはクラスパスのルートディレクトリの下に置かれているので、SqlSessionFactoryを初期化するときはString resource="Configuration.xml";いいですよ.そうしないと、コンフィギュレーションなどのパスを追加する必要があります.xmlはUserクラスと一緒に置く、すなわちcom.sample.modelというpackageでは、String resource=「com/sample/model/Clonfiguration.xml」と書きます.
同様にコンフィギュレーションではxmlでは、UserMapperを指定します.xmlのルールもそうです.
2、UserMapperの使用.Mapperの使用はIBatis 3ならではの新機能であり、IBatisユーザーズガイドで推奨されている方法でもあります.このように使うと、タイプの強制変換を完全に回避し、タイプセキュリティを実現します.
UserMapperはインタフェースにすぎないことに注意してください.このインタフェースの具体的な実装を提供する必要はありません.IBatis 3は、自動的に特定のインスタンスを生成します.
メソッド名はUserMapperでなければなりません.xmlのselect文のidは同じです.私の例ではselectUserです.
また、このメソッドの戻り値のタイプは、UserMapperとする必要がある.xmlで構成されているreturnTypeは一致しています.
最後に注意したいのはUserMapperです.xml中のnamespaceはUserMapperの全クラス名である必要があり、この例ではcomである.sample.model.UserMapper.
原文住所:http://www.blogjava.net/usherlight/archive/2010/01/06/308415.html
この記事では、Tapestry 5について説明します.1とIBatis 3を統合します.
簡単な手順:
1.準備
2.データベースの構築
3.POJOの設立
4.IBatis関連プロファイルの作成
5.Tapestry関連コードの完成
概要:
1、準備.この部分は比較的簡単で、Eclipseのような開発環境が必要です.Tapestry5.1、IBatis 3(現在はBeta 7)、データベース(MySqlを使用しています)のダウンロードインストール.
2、データベースの創立、例であるため、データベースの創立も非常に簡単で、1枚のUser表だけあって、3つのフィールド、Id、Name、Password
3、com.sample.Userクラス、データベーステーブルの3フィールドに対応し、Userクラスを生成
4、IBatisプロファイル:Configuration.xml,UserMapper.xml,jdbc.propertiesの生成は、最初の2つが必要で、最後の2つが選択可能である.
5、AppModuleでは、buildメソッドを使用して、サービスを追加してIBatis 3の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、私はコンフィギュレーションをします.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:
// java , 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、
AppModule .java :
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);
}
UserMapper.java
package com.sample.model;
public interface UserMapper {
public User selectUser(int id);
}
Layout.java
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のプロファイルのため.xmlはクラスパスのルートディレクトリの下に置かれているので、SqlSessionFactoryを初期化するときはString resource="Configuration.xml";いいですよ.そうしないと、コンフィギュレーションなどのパスを追加する必要があります.xmlはUserクラスと一緒に置く、すなわちcom.sample.modelというpackageでは、String resource=「com/sample/model/Clonfiguration.xml」と書きます.
同様にコンフィギュレーションではxmlでは、UserMapperを指定します.xmlのルールもそうです.
2、UserMapperの使用.Mapperの使用はIBatis 3ならではの新機能であり、IBatisユーザーズガイドで推奨されている方法でもあります.このように使うと、タイプの強制変換を完全に回避し、タイプセキュリティを実現します.
UserMapperはインタフェースにすぎないことに注意してください.このインタフェースの具体的な実装を提供する必要はありません.IBatis 3は、自動的に特定のインスタンスを生成します.
メソッド名はUserMapperでなければなりません.xmlのselect文のidは同じです.私の例ではselectUserです.
また、このメソッドの戻り値のタイプは、UserMapperとする必要がある.xmlで構成されているreturnTypeは一致しています.
最後に注意したいのはUserMapperです.xml中のnamespaceはUserMapperの全クラス名である必要があり、この例ではcomである.sample.model.UserMapper.
原文住所:http://www.blogjava.net/usherlight/archive/2010/01/06/308415.html