An open API service indexing awesome lists of open source software.

https://github.com/sky0621/work-dbrecordgentool

DBレコードの自動生成ツール
https://github.com/sky0621/work-dbrecordgentool

Last synced: 11 months ago
JSON representation

DBレコードの自動生成ツール

Awesome Lists containing this project

README

          

# DBレコード自動投入ツール(というかEclipseプロジェクト)
## ■言語・ツール・開発環境
###### Java/Eclipse/S2JDBC-Gen/DBSetup
## ■修正履歴
###### 2016/08/01 公開
## ■紹介
###### なにかしら動作確認するのにDBへのデータ投入は必須。(特に自分用のお店やら、それに関連するデータの用意やら)
###### Excelとかで投入データを作っても、1回作ったら終わりでなく、どれかのテーブル定義が変わったら(カラム増えたり減ったり)つど、Excel修正が必要。(そもそもテーブル定義変わったかどうか、Excelで作ったデータを投入しようとしてエラーになってはじめてわかる。。。)
###### できれば、テーブル定義変わったら、それに合わせて投入するデータも変わるようなのが欲しい。ということで作りました。
###### ※例によって、そもそも動かないみたいなバグもあるかもです・・・。
######  _◇テーブル定義変わったかどうか_
######       ・・・S2JDBC-GENの機能を使えば接続先DBのカタログテーブル見て最新化してくれる。
######          ※生成物を git 管理しておけばテーブル単位で何が変わったか差分として見れる。
######  _◇テーブルごとにデータと抱き合わせてINSERTしたい(ついでに自分がINSERTしたデータは削除してから入れなおしたい)_
######       ・・・DBSetUpというモジュール使えば、わりと楽に書ける。
######          http://dbsetup.ninja-squad.com/
######          http://qiita.com/ikemo/items/a27ece72fe2af3683ff6
######  _◇もともとExcelで管理してた投入用データも生かしたい_
######       ・・・INSERT時のテーブル名、カラム名はS2JDBC-GENの機能で最新をゲットし、投入するデフォルト値は型に応じて勝手に決めるが、別途、Excelで投入用データを与えた場合はそっちを生かすようにした。(POI使用)
## ■ツールの使い方
###### ツールというかEclipseプロジェクトとして使うので、ソースをチェックアウトしてください。
###### 1. 既存Mavenプロジェクトとして取り込む。
###### 2. プロジェクト直下の「src/main/resources/jdbc.dicon」を開いて、カタログ情報を見たいDBの接続先情報に直す。
###### 3. プロジェクト直下の「s2jdbc-gen-build.xml」を開いて、「tableNamePattern="CM_S.*"」と書いてあるところを自分がデータ投入したいテーブルに直す。
######  ※そもそも tableNamePattern 属性削れば全テーブルつくりにいくのですが、1000を超えるテーブル分のカタログ情報に属したデータをつくるのに・・・途方もない時間がかかりそう(私がローカルで100テーブルほどやろうとしたら10分くらいかかりました) なので、せいぜい 100 テーブル分くらいがヒットする程度にした方がいいと思います。★正規表現使えます★
######  ※ちなみに、「overwrite="false"」とあるように、同じ名前の生成物がある場合は上書きしない設定にしているので、同じテーブルのカタログ情報を作り直したい時は「overwrite="true"」に直してください。
###### 4. Antの機能を使って「s2jdbc-gen-build.xml」のタスクを実行する。 ※コンソールにだらだら流れます。
###### 5. 上記 4 が終わったら、プロジェクト直下の「src/main/java/xyz/skycat/work/dbrecordgentool/entity」を F5 最新化して、自分が想定したテーブル名を表すエンティティができているか確認する。
###### 6. プロジェクト直下の「src/main/resources/config/targettables.txt」を開いて、データ投入したいテーブル名を表すエンティティクラス名を1行ごと列挙する。
###### 7. プロジェクト直下の「src/main/resources/insertdata/data.xls」を開いて、テーブル名を表すエンティティクラス名ごとにシートを作成して、テーブルごとの投入したいデータを記載する。
######  ※理論上、シート名とカラム名が合っていれば、既存のExcelなどが流用できるはず。
######  ※NotNullカラムであっても、必ずExcel内に何かしらデータを記載する必要はない(※そこはツールが型に応じてデフォルト値を埋めるので)が、業務的に必要な値は当然入れる必要がある。
######   特に、Varcharなんだけど〇〇DATEとか付いているやつなど、ツール的には型がVarcharだからVarcharとしてデフォルト値入れるので。
######  ※投入先DBにあるレコードとPK重複するようなのがあると当然落ちる。
###### 8. プロジェクト直下の「src/main/java/xyz/skycat/work/dbrecordgentool/Main.java」を実行する。
######  ※ただし、引数1個必ず求められるので、「実行の構成」でプログラムの引数として下記を指定してください。
######   ★接続先DBへのデータ投入時に他のレコードと差別するため、INS_MODULE_ID カラムにここで指定した引数をセットします。★
######   ★つまり、ここでセットした値が他のレコードと重複していると、このツールを使った結果、他の人のデータを入れ替えてしまうことになります。★
######   ★自分にしか振られない、影響しないIDのような値を指定してください。プラグインIDみたいな。★
###### 9. 接続先DBにデータが投入されているか確認する。
## ■備考
###### S2JDBC-GENがタスク実行時に統計情報にアクセスするようで、Oracleの場合、統計情報へのロックがかかっていると落ちる。
###### 【ORA-38029: オブジェクト統計はロックされています】
###### ロックされているかどうかは、select table_name, stattype_locked from dba_tab_statistics where owner = 'owner'; でわかる。ALL だとロックされてる。
######  exec DBMS_STATS.UNLOCK_TABLE_STATS('owner','tablename'); でロック解除できるけど、全テーブル分やる必要がある・・・。