top / index / prev / next / target / source

2008-12-09 diary: Java: サンプル: iBatis: sqlMap 設定ファイルの読み込みサンプル

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

Java: サンプル: iBatis: sqlMap 設定ファイルの読み込みサンプル

Apache iBatis の sqlMap.xml 設定ファイルを読み込んで内容を表示するシンプルなサンプルを作成しました。

Java: サンプル: iBatis: sqlMap 設定ファイルの読み込みサンプル

Apache iBatis の sqlMap.xml 設定ファイルを読み込んで内容を表示するシンプルなサンプルを作成しました。 ParseSqlMap.java

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Iterator;

import com.ibatis.sqlmap.engine.builder.xml.SqlMapParser;
import com.ibatis.sqlmap.engine.builder.xml.XmlParserState;
import com.ibatis.sqlmap.engine.mapping.parameter.ParameterMapping;
import com.ibatis.sqlmap.engine.mapping.statement.MappedStatement;
import com.ibatis.sqlmap.engine.mapping.statement.StatementType;
import com.ibatis.sqlmap.engine.scope.SessionScope;
import com.ibatis.sqlmap.engine.scope.StatementScope;

/**
 * sqlMap のSQL記述をパースして表示するサンプル。
 * 
 * ibatis-2.3.4.726.jar で動作確認を実施。
 */
public class ParseSqlMap {
    @SuppressWarnings("unchecked")
    public static void main(final String[] args) throws Exception {
        final XmlParserState parserState = new XmlParserState();

        // sqlMap をパース。
        final InputStream inStream = new BufferedInputStream(
                new FileInputStream(new File("./test/data/Account.xml")));
        try {
            final SqlMapParser parser = new SqlMapParser(parserState);
            parser.parse(inStream);
        } finally {
            inStream.close();
        }

        // パース結果を表示。
        for (Iterator<String> iteSqlMapId = parserState.getConfig()
                .getDelegate().getMappedStatementNames(); iteSqlMapId.hasNext();) {
            final MappedStatement mStmt = parserState.getConfig().getDelegate()
                    .getMappedStatement(iteSqlMapId.next());

            // sqlMap 上の id。
            System.out.println("sqlMap: id: [" + mStmt.getId() + "]");

            // SQLのタイプの調べ方。
            if (mStmt.getStatementType() == StatementType.SELECT) {
                System.out.println("  タイプ: [SELECT]");
            }

            // SQLを表示。
            final String sql = mStmt.getSql().getSql(
                    new StatementScope(new SessionScope()), null);
            System.out.println("  SQL: [" + sql + "]");

            // パラメータを表示。
            for (int indexParam = 0; indexParam < mStmt.getParameterMap()
                    .getParameterCount(); indexParam++) {
                final ParameterMapping mapping = mStmt.getParameterMap()
                        .getParameterMappings()[indexParam];
                System.out.println("  入力パラメータ: [" + mapping.getPropertyName()
                        + "]");
            }
        }
    }
}

ここまで辿り着くのに、意外に手間がかかりました…。


この日記について