Hakkobun Javaバッチ開発支援

---DBアクセスJavaバッチ開発生産性向上---

近年来Javaによるバッチ処理が注目されてきており、商用やオープンソースのJavaバッチ処理用のソフトウェアが登場しつつある。特にDBアクセスをメインとするJavaバッチは、O/RマッピングツールとしてMyBatis(旧iBatis)を利用することで、CRUD部品の自動生成、柔軟なSQL記述を行いつつ、JavaBeanへのマッピング処理を簡略化しています。
それでいて、高い性能と品質、開発期間短縮とコスト削減がより求められる現状は、Javaを使おうと従来通りであり、開発者は対応に苦慮しています。
そのような悩みに応えるJavaバッチシステム開発自動化ツールが「Hakkobun」(はっこうぶん)(Java開発支援チール)です。コード自動生成機能を軸に、高い性能と品質を備えたJavaバッチプログラムが、短期間で効率よく開発できます。
特徴:
1.使い慣れたEclipseのプラグインとしてとして動作
2.中流工程の開発期間・コストを半減

EclipseにJavaバッチのプロジェクトを準備

では早速ですが、DBを利用したバッチアプリケーション作成の準備をしていきましょう。なお、開発環境の構築の際に必要となるEclipseやJDKのセットアップについては、割愛します。

プラグインの導入

プラグインサイト(http://soho.btsol.jp/file-cabinet)から、今回のアプリケーション開発の基となるプラグインをダウンロードします。こちらからjarファイルをダウンロードし、Eclipseのpluginフォルダー配下にコピーしてください。
jp.btsol.products.hakkobun.plugins.batch_1.0.0.201308041813.jar
jp.btsol.products.hakkobun.plugins.mybatis_1.0.0.201308041813.jar
jp.btsol.products.hakkobun.plugins.utils_1.0.0.201308041813.jar
※バージョン番号と日付は、変わる可能性がある

バッチプロジェクトの作成

Eclipseを起動して、Ctrl+N(ファイル>新規>その他...)で新規ウィザードを起動します。
Hakkobun Templates配下にあるHakkobun Batch Projectを選択し、「次へ」ボタンをクリックします。新規Hakkobunバッチプロジェクトウィザードページが表示されます。

プロジェクト名に”first”を入力し、それ以外は、デフォルトままで、「完了」ボタンをクリックします。

生成されたプロジェクトは以下のようです。
Empは、確認のため、あらかじめ用意してあるEntityです。
※プロジェクト名はパッケージになります。jp.btsol.batchような名前も入力できます。最後の単語は、バッチ処理メインクラスの名前とします。

接続するDBの起動・確認

次に、DB(MySQL)接続情報を確認します。

/first/src/main/resources/config.propertiesファイルを開いて、下記の内容を確認します。


jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/jpetstore

jdbc.username=root

jdbc.password=admin


必要に応じて、値を修正してください。

テスト用テーブルとデータの作成

CREATE TABLE EMP (

    EMPNO       NUMERIC(4) NOT NULL,

    ENAME       VARCHAR(10),

    JOB         VARCHAR(9),

    MANAGER         NUMERIC(4),

    HIREDATE    DATE,

    SALARY         NUMERIC(7,2),

    COMMISSION        NUMERIC(7,2),

    DEPTNO      NUMERIC(2) NOT NULL,

    CONSTRAINT PK_EMP PRIMARY KEY (EMPNO)

);


insert into emp (

empno, 

ename, 

job,      

manager, 

hiredate, 

salary, 

commission,      

deptno)    

values (

1001, 

'Yamata', 

'Manger',      

2001, 

'2001/01/01', 

90000, 

3000,      

2);


単体テストの実施

/first/src/test/java/first/mapper/EmpMapperTest.java

/first/src/test/java/first/FirstTest.java

の単体テストを実行し、問題ない事を確認できます。


Hakkobunテーブルアクセス部品の作成開始!

コーディングレスで対象テーブルアクセルCRUD部品を作成

Ctrl+N(ファイル>新規>その他...)で新規ウィザードを開きます。

Hakkobun Templates配下にあるMyBatis SQL Mapperを選択し、「次へ」ボタンをクリックします。下記のフォルダー、パッケージ指定ページが表示されます。

ソースフォルダー、テストフォルダー、パッケージ名を指定します。
フォルダー、パッケージの入力は、「参照」ボタンで選択できます。
フォルダーの選択ダイアログ:
パッケージの選択ダイアログ:

入力完了のイメージ:

入力を完了したら、「次へ」ボタンをクリックします。テーブル選択ページまで進みます。

対象テーブル、マッパータイプ(CRUD)をチェックし、「完了」ボタンをクリックします。
※複数テーブル、複数マッパータイプを一括作成できます。既に作成してある場合は、確認の上「既存のマッパーファイルを上書き」のチェックボックスをチェックしてください。

テーブルにプライマリーキーを定義されていない場合は、選択用項目選択ダイアログが表示されます。

※プライマリーキーの定義があるまたは選択用項目を選択した場合は、プライマリーキーよりEntityの取得、更新、削除メソッドが生成されます。
選択用項目(プライマリーキーを含む)がない場合は、自動生成した取得、更新、削除SQLは、テーブルデータ全件対象とします。
useridを選択用項目としする場合は、

生成されたマッパーファイル:

マッパー

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="first.mapper.AccountMapper" >


 <insert id="insert" parameterType="first.entity.Account" >

   insert into account (

   userid,

   email,

   firstname,

   lastname,

   status,

   addr1,

   addr2,

   city,

   state,

   zip,

   country,

   phone

   )

   values (

   #{userid},

   #{email},

   #{firstname},

   #{lastname},

   #{status},

   #{addr1},

   #{addr2},

   #{city},

   #{state},

   #{zip},

   #{country},

   #{phone}

   )

 </insert>


 <select id="getAccount" resultType="first.entity.Account">

   select 

userid,

email,

firstname,

lastname,

status,

addr1,

addr2,

city,

state,

zip,

country,

phone

   from account

   where 

userid = #{userid}

   order by 

userid

 </select>

 <select id="all" resultType="first.entity.Account">

   select 

userid,

email,

firstname,

lastname,

status,

addr1,

addr2,

city,

state,

zip,

country,

phone

   from account

   order by 

userid

 </select>


 <update id="updateAccount" parameterType="first.entity.Account">

   update account set

userid = #{userid},

email = #{email},

firstname = #{firstname},

lastname = #{lastname},

status = #{status},

addr1 = #{addr1},

addr2 = #{addr2},

city = #{city},

state = #{state},

zip = #{zip},

country = #{country},

phone = #{phone}

   where 

userid = #{userid}   

 </update>


 <delete id="deleteAccount">

   delete from account

   where 

userid = #{userid}

 </delete>

</mapper>


単体テストソースの修正(テンプレータイズの威力)

あれ、テストケースにコンパイルエラーがあるじゃないですか?
これじゃコンパイルできないじゃ!Velocityの変数定義が足りてないじゃないの?
魔法の杖で変身!
メニューのHakkobun>Templatizeを選択します。

TABキーで編集変数の間に自由に移動したり、編集したりできます。長々便利でしょうか。

単体テストの実施

早速単体テストを実施してみましょう。
テーブルを作成します。
CREATE TABLE  DEPT (
  DEPTNO decimal(2,0) NOT NULL,
  DNAME varchar(14) DEFAULT NULL,
  LOC varchar(13) DEFAULT NULL,
  PRIMARY KEY (DEPTNO)
); 
データがないのままで、/first/src/test/java/first/mapper/DEPTMapperTest.javaをJUnit Testとして実行したら、下記の結果になります。
JUnit Testが成功させるように、好きなように修正してください。
※デフォルトは、tearDown()メソッドのsession.commit();がコメントアウトされています。
次回の予定:Excelテスト仕様書ベースに、テストケースの作成を行いたいです。ご期待ください。

トラブルシューティング

1.バッチプロジェクトを作成されて、下記のエラーが出る場合の対処方法を説明します。
対処方法:
1.1 Mavenをダウンロード、解凍します。。
1.2 EclipseにMavenのディレクトリーを指定します。
 ・Window>Preferences>Maven>Installations
 ・Add…
でMavenを追加します。
1.3 プロジェクトエクスプローラーからプロジェクトを右クリックし、Maven>Update Project...します。
で、問題解消されます。

2.テーブル一覧に何も表示されない
 データベースのアクセス権限を確認してください。

Comments