いくつかの簡単なシェルスクリプトを記述し、IDEAと協力して、oracleテーブル作成ステートメントをJavaBeanとmybatisのマッパー構成に簡単に変換します。

バックグラウンド

少し前に、私は要求に遭遇しました。要求は非常に一般的です。つまり、oracleテーブルのCRUDです。

ワークロードは少し重いです。いくつかのSQLスクリプトを指定しました。60を超えるテーブルがあり、各テーブルには通常20または30フィールド、または40または50フィールドがあります。

Mybatisが使用されます。この場合、対応するJava Beanクラスと対応するマッパーファイルをテーブルごとに作成し、関連するクエリと挿入ステートメントを提供する必要があります。

考えてみたら、強くノックすると夢中になる。

Mybatisにはリバースツールがあり、聞いたことはありますが、使用したことはありません。しかし、これらのテーブル作成ステートメントがすべて同じであることがわかったらすぐに、対応するBeanまたはマッパーに変換するための簡単なスクリプトをいくつか作成しました。

私が最近学んだことは少し深く、ブログには適していません。私が書いたスクリプトを共有するだけです。これらのSQLスクリプトをpl / sqlでエクスポートすると、基本的に次のようになります。

脚本

たとえば、これはテーブル作成ステートメントです。実際のテーブルフィールドはたくさんあります。例としていくつかのフィールドを記述しただけです。フィールド名はこのように名前が付けられ、大文字と小文字はアンダースコアで接続されています。

create table example_table  (
   user_name            VARCHAR2(200)                   not null,
   str1                 VARCHAR2(200)                   not null,
   str2                 VARCHAR2(200)                   not null,
   str3                 VARCHAR2(200),
   ONE_FLAG             VARCHAR2(1)                    default 'N' not null,
   time5                TIMESTAMP,
   str6                 VARCHAR2(1)                    default 'N' not null,
   reserved1            VARCHAR2(200),
   reserved2            VARCHAR2(200)
);

comment on table example_table is
'样例表';

comment on column example_table.user_name is
'名';

comment on column example_table.str1 is
'这是一个字符串1';

comment on column example_table.str2 is
'这是一个字符串2';

comment on column example_table.str3 is
'这是一个字符串3';

comment on column example_table.ONE_FLAG is
'这是一个标记字符串';

comment on column example_table.time5 is
'时间';

comment on column example_table.str6 is
'又来一个字符串';

comment on column example_table.reserved1 is
'预留字段1';

comment on column example_table.reserved2 is
'预留字段2';

以下に記述するスクリプトが配置されているディレクトリにtxtという名前のファイルを作成し、上記のテーブル作成ステートメントをそのファイルにコピーします。

JavaBeanを生成する

1. awkスクリプト(generate_bean.awk)を記述します。テーブルフィールドを変数定義構文に変換し、コメントを追加します

#! /usr/bin/awk -f

BEGIN {
        i = 1;
}
{
        comment="";
        if ( NR != 1 && i > 0 && $1 != "(" ) {
                if ( $1  == ");" ) {
                        i = -1;
                } else {
                        if ( NF == 1 ) {
                                print "// "$1;

                        }
                        else {
                                "grep -A 1 comment "FILENAME" | grep -i  -A 1  "$1" | grep -i -v "$1 | getline comment;
                                print "// "comment;
                                ". to_lower_word.sh " $1 | getline lower_word;
                                print "private String "lower_word";";
                        }
                }

                i++;
        }

}

実行して効果を確認できます:./ generate_bean.awk txt

その中で、to_lower_word.shはstr1_str2という名前の変数であり、次のような小さなキャメルケースに変換されます。

#! /bin/bash

echo $1 | tr [:upper:] [:lower:] | sed 's/_[a-z]\{1\}/\U&/g' | sed 's/_//g'

2.別のスクリプト(gen_ben.sh)を記述して、generate_bean.awkを呼び出し、コメント内の不純物を削除します

#! /bin/bash

sed -i 's/^$//g' txt;

if [ ! -e tmp_txt ]; then
        touch tmp_txt;
fi

generate_bean.awk txt > tmp_txt;
sed "s/';//g" tmp_txt | sed "s/'//g"

rm tmp_txt

実装効果を見てみましょう。

3. IDEAを開き、新しいクラスを作成して、にコピーします。

Alt + Insertで、get、set、toStringメソッドをすばやく生成します。

ここに問題があります。急いでスクリプトを書くためには、書き込みが比較的少なく、場所によっては調整が必要です。たとえば、ここではすべてデフォルトで文字列タイプに変換され、他のタイプは変更する必要があります。手動で。

mytatisResultMapを生成する

1. awkスクリプト(generate_result.awk)を記述します。フィールドを小さなこぶに変換してから、スプライシング処理を行います。

#! /usr/bin/awk -f


BEGIN {
        i = 1;
        print "<resultMap type=\"\" id=\"\">";
}
{
        file = FILENAME;
        if ( NR != 1 && i > 0 && $1 != "(" ) {
                if ( $1  == ");" ) {
                        i = -1;
                } else {
                        if ( NF > 1 ) {

                                ". to_lower_word.sh " $1 | getline lower_word;
                                print "\t<result column=\""$1"\"\tproperty=\""lower_word"\"/>";
                        }
                }

                i++;
        }

}
END {
        print "</resultMap>"
}

2.このスクリプトを呼び出す別のスクリプト(gen_result.sh)を記述します。

#! /bin/bash
generate_result.awk txt

3.効果を確認するために実行します

マッパーのxmlファイルにコピーします

selectSQLを生成します

1. awkスクリプト(generate_fields.awk)を記述して、データベーステーブルフィールドを小さなキャメルケース形式の2列のデータに変換します。最初の行はテーブル名です。

#! /usr/bin/awk -f

BEGIN {
        i = 1;
}
{
        if ( NR == 1 ) {
                print $3;
        }
        if ( NR != 1 && i > 0 && $1 != "(" ) {
                if ( $1  == ");" ) {
                        i = -1;
                } else {
                        ". to_lower_word.sh " $1 | getline lower_word;
                        print $1,lower_word;
                }

                i++;
        }

}

効果を見てみましょう:

2.別のスクリプト(gen_select.sh)を記述して、これをselectsqlに接続します

#! /bin/bash

generate_fields.awk txt > fields_tmp.txt

table_name=`head -1 fields_tmp.txt`
lines=`wc -l fields_tmp.txt | awk '{print $1}'`
awk -v total=$lines 'BEGIN {print "select";}{ if (NR > 1 && NR < total && NF > 1) {print "\t"$1",";}} END {print "\t"$1;}' fields_tmp.txt;

echo "from $table_name"
echo "<where>"

awk '{if ( NR > 1 ) { print "\t""<if test=\""$2" != null and "$2" != ""\x27\x27""\">" "\n\t\t AND " $1" = #{" $2 "}" "\n\t</if>" }}' fields_tmp.txt;

echo "</where>"

rm fields_tmp.txt

3.実行中に、mapper.xmlにコピーして、効果を確認します。

その中にいくつかのフィールドがあり、必要に応じて削除する必要があり、調整を行う必要があります

挿入を生成する

1.スクリプト(gen_insert.sh)

#! /bin/bash

generate_fields.awk txt > fields_tmp.txt

table_name=`head -1 fields_tmp.txt`
lines=`wc -l fields_tmp.txt | awk '{print $1}'`
awk -v total=$lines -v table_name=$table_name 'BEGIN {print "insert into "table_name"(";}{ if (NR > 1 && NR < total && NF > 1) {print "\t"$1",";}} END {print "\t"$1")";}' fields_tmp.txt;

echo "values("

awk -v total=$lines '{if ( NR > 1 && NR < total ) { print "\t#{" $2 ", jdbcType=VARCHAR},"  }} END {print "\t#{"$1 ", jdbcType=VARCHAR}"}' fields_tmp.txt;

echo ")"

rm fields_tmp.txt

2.実行し、mapper.xmlにコピーします。効果は次のとおりです。

追記

その日を今でも覚えています。正午には眠らず、このスクリプトをいじくり回す前に2時間過ごしました。

翌朝、私のクレイジーな手のスピードで、数万行のコードを送信するのに2時間半日もかかりませんでした。

おすすめ

転載: blog.csdn.net/x763795151/article/details/108349532
おすすめ