ブログ名

TERASOLUNA Mybatis拡張について

1. Mybatisで拡張可能なクラス

Mybatisでは、いくつかのタイミングで処理をインターセプトすることができます。

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • StatementHandler (prepare, parameterize, batch, update, query)
  • ParameterHandler (getParameterObject, setParameters)

前回の記事にある、アプリケーション構成についてのインフラストラクチャ層にて、 DBへパラメータを渡す前や、受け取った後に独自の処理を追加拡張することができます。

図1-1 Mybatis内の処理順序と拡張可能クラスの実行タイミング


f:id:shizuuuka0202:20200319213238j:plain

2. 使用例

DBのVARCHAR等にNULLのデータがあった場合に
サーバサイド側で扱う際に、インフラストラクチャ層側で
NULLの場合に特定の文字(0 byte文字等)を常に設定することで、 NullPointerException を防ぐことができます。

実装例

public class OriginalStringTypeHandler extends BaseTypeHandler<String> {

    /**
     * <pre>
     * DBから取得した値の変換処理です。
     * </pre>
     *
     * @param rs
     *            リザルトセット
     * @param columnName
     *            カラム名
     * @return カラムデータ
     */
    @Override
    public String getNullableResult(ResultSet rs, String columnName)
            throws SQLException {
        return this.convertNullString(rs.getString(columnName));
    }

    /**
     * <pre>
     * null の変換処理です。
     * </pre>
     *
     * @param data
     *            取得文字列
     * @return 変換後文字列
     */
    private String convertNullString(String data) {
        String result = "";
        if (StringUtils.isNotEmpty(data)) {
            result = data;
        }
        return result;
    }

次の記事へ

前の記事へ 目次に戻る