概要
今更ながら、SpringFrameworkとiBatisを連携を試してみます。applicationContextの設定から、sqlMapの設定、テストまでを大まかに説明します。
動作環境
項目 | 内容 |
---|---|
OS | Mac OS X 10.06 |
DB | MySQL 5.5 |
開発環境 | eclipse3.6 |
SpringFramework | 1.2 |
iBatis | 2.0 |
前提事項
・以下のテーブルを作成していること。- CREATE TABLE `PERSON` (
- `PER_ID` INT NOT NULL ,
- `PER_FIRST_NAME` VARCHAR(40) NOT NULL ,
- `PER_LAST_NAME` VARCHAR(40) NOT NULL ,
- PRIMARY KEY (`PER_ID`) )
- ENGINE = InnoDB;
内容
1.SpringFrameworkのライブラリを入手する。
現時点の最新バージョンは3.0.5ですが、今回は1.2系のライブラリを入手します。
以下のURLより入手できますので、入手し適当な場所に解凍して下さい。
こちら
2.iBatisのライブラリを入手する。
現時点では「iBatis」と言う名前から「MyBatis」という名前に変更になっています。
入手についてはこちらを参考にして下さい。
3.Springの定義ファイルを作成する。
Springの定義ファイル「applicationContext-ibatis.xml」を作成します。
このファイルでは、
・データソースの設定
・iBatis設定ファイルの設定
・Daoに対してデータソースの設定
を行っています。
- <!--xml version="1.0" encoding="UTF-8"?-->
- <!--DOCTYPE beans PUBLIC
- "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"-->
- <beans>
- <!-- =============== RESOURCE DEFINITIONS =============== -->
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <value>com.mysql.jdbc.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:mysql://localhost/ibatis</value>
- </property>
- <property name="username">
- <value>ibatis</value>
- </property>
- <property name="password">
- <value>ibatis</value>
- </property>
- </bean>
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource">
- <ref local="dataSource">
- </ref></property>
- </bean>
- <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="configLocation">
- <value>
- dao/sqlMapConfig.xml
- </value>
- </property>
- </bean>
- <bean id="personDao" class="jp.co.wave.common.dao.PersonDaoImpl">
- <property name="dataSource">
- <ref local="dataSource">
- </ref></property>
- <property name="sqlMapClient">
- <ref local="sqlMapClient">
- </ref></property>
- </bean>
- <!-- =============== TRANSACTION DEFINITIONS =============== -->
- </beans>
4.iBatisの定義ファイルを作成する。
iBatisで使用する定義ファイル「sqlMapConfig.xml」を以下のように作成しました。
- <!--xml version="1.0" encoding="UTF-8"?-->
- <!--DOCTYPE sqlMapConfig
- PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"-->
- <sqlmapconfig>
- <sqlmap resource="jp/co/wave/common/dao/ibatis/PersonDao.xml">
- </sqlmap></sqlmapconfig>
5.O/Rマッピングファイルを作成する。
O/Rマッピングファイル「PersonDao.xml」を以下のように作成しました。
- <!--xml version="1.0" encoding="UTF-8"?-->
- <!--DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd"-->
- <sqlmap namespace="personDao">
- <typealias alias="person" type="jp.co.wave.common.dto.Person">
- <select id="selectAll" resultclass="person">
- SELECT
- PER_ID AS id,
- PER_FIRST_NAME AS firstName,
- PER_LAST_NAME AS lastName
- FROM
- PERSON
- </select>
- </typealias></sqlmap>
Hibernateだと、確かかけないんです。SQLを。
iBatisだとSQLを書けるのでSQLを良く使用しているエンジニアだと取っ付きやすいと思います。
6.DTOを作成する。
DBからの取得した結果を格納するためのDTOを作成します。
以下のようなクラスを作成しました。
- public class Person {
- private int id;
- private String firstName;
- private String lastName;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getFirstName() {
- return firstName;
- }
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
- public String getLastName() {
- return lastName;
- }
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- }
7.Daoクラスを作成する。
今回の例では、インタフェースとその実装クラスそれぞれを作成しました。
・PersonDao
- public interface PersonDao {
- public List<person> selectAll();
- }
- </person>
- public class PersonDaoImpl extends SqlMapClientDaoSupport implements PersonDao {
- @Override
- public List<person> selectAll() {
- return (List<person>) getSqlMapClientTemplate().queryForList("selectAll");
- }
- }
- </person></person>
テスト
1〜7で使用する準備が整ったので、実際に使用できるか試してみます。- public class StartUp {
- public static void main(String[] args) {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-ibatis.xml");
- BeanFactory factory = (BeanFactory) context;
- PersonDao dao = (PersonDao) factory.getBean("personDao");
- List<person> personList = dao.selectAll();
- System.out.println(personList.size());
- }
- }
- </person>
実行すると、以下のような感じでログが表示されました。
正常に連携できました。
- 2011/03/30 22:42:27 org.springframework.context.support.AbstractApplicationContext prepareRefresh
- 情報: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@39617189: display name [org.springframework.context.support.ClassPathXmlApplicationContext@39617189]; startup date [Wed Mar 30 22:42:27 JST 2011]; root of context hierarchy
- 2011/03/30 22:42:27 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
- 情報: Loading XML bean definitions from class path resource [applicationContext-ibatis.xml]
- 2011/03/30 22:42:27 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
- 情報: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@39617189]: org.springframework.beans.factory.support.DefaultListableBeanFactory@39b8d6f7
- 2011/03/30 22:42:27 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
- 情報: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@39b8d6f7: defining beans [dataSource,transactionManager,sqlMapClient,personDao]; root of factory hierarchy
- 2011/03/30 22:42:27 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
- 情報: Loaded JDBC driver: com.mysql.jdbc.Driver
- 1
参考情報
なし最後に
説明をほとんどしませんでしたが、上記の内容をおのおのの環境に合わせて使って貰えれば動作すると思います。次回以降、トランザクションに関して試してみたいと思います。
0 件のコメント:
コメントを投稿