4

Spring JDBC の SimpleJdbcCall を使用しています。私は非常に役に立ちますが、それでも私にとっては単純で滑らかではありません。理想的には、JDBC 呼び出しが通常の Java メソッド呼び出しと区別できないと想像します。

最近、多くの軽量な ORM フレームワークが Java に登場しているのを見て (Ebean など)、ストアド プロシージャの方向に類似した開発があるかどうか尋ねたいと思いました。

4

2 に答える 2

2

JPA 2.1 の使用

Java から JDBC または JPA を介してストアド プロシージャを呼び出すのは、非常に面倒で冗長な場合があります。EclipseLink で提供されている例を見ると、JPA 2.1 ではそれほど単純にはなっていません。

@NamedStoredProcedureQuery(
    name="ReadUsingMultipleResultSetMappings",
    procedureName="Read_Multiple_Result_Sets",
    resultSetMappings = {
        "EmployeeResultSetMapping", 
        "AddressResultSetMapping",  
        "ProjectResultSetMapping", 
        "EmployeeConstructorResultSetMapping" 
    }
)

@SqlResultSetMappings({
    @SqlResultSetMapping(
        name = "EmployeeResultSetMapping",
        entities = {
            @EntityResult(entityClass = Employee.class)
        }
    ),
    @SqlResultSetMapping(
        name = "EmployeeConstructorResultSetMapping",
        classes = { 
            @ConstructorResult(
                targetClass = EmployeeDetails.class,
                columns = {
                    @ColumnResult(name="EMP_ID", type=Integer.class),
                    @ColumnResult(name="F_NAME", type=String.class),
                    @ColumnResult(name="L_NAME", type=String.class),
                    @ColumnResult(name="R_COUNT", type=Integer.class)
                }
            )
        }
    )
})

jOOQの使用

良いオプションは、 jOOQなどのコード ジェネレーターを活用することです(私は jOOQ ベンダーで働いているため、この回答は偏っています)。次の手順を想定します。

-- Check whether there is an author in AUTHOR by that name and get his ID
CREATE OR REPLACE PROCEDURE author_exists (
    author_name VARCHAR2, 
    result OUT NUMBER, 
    id OUT NUMBER
);

生成されたコードを使用すると、次のように簡単に呼び出すことができます。

AuthorExists result = Routines.authorExists(configuration, "Paulo");
assertEquals(new BigDecimal("1"), result.getResult());
assertEquals(new BigDecimal("2"), result.getId();

詳細については、jOOQ マニュアルも参照してください。

他のコード ジェネレーターの使用

他のコード ジェネレーターが存在し、面倒な JDBC または JPA コードを生成するために利用できます。

于 2013-11-20T10:43:13.137 に答える
0

@NamedStoredProcedureQueryなどを使用してJPAからストアドプロシージャを呼び出す可能性があります。たとえば、eclipselinkを使用できます。http://wiki.eclipse.org/EclipseLink/Examples/JPA/StoredProcedures

それが役に立てば幸い。

于 2012-05-29T10:37:19.180 に答える