簡體   English   中英

從Java調用存儲過程-Spring JDBC的現代替代品?

[英]Calling stored procedures from Java - modern alternatives to Spring JDBC?

我一直在使用Spring JDBC的SimpleJdbcCall。 我覺得很有幫助,但對我來說仍然不夠簡單和滑膩。 理想情況下,我想象一個JDBC調用與普通的Java方法調用沒有區別。

鑒於最近在Java中出現了許多輕量級的ORM框架(例如Ebean),我想問一下在存儲過程方向上是否有類似的開發?

使用JPA 2.1

通過JDBC或JPA從Java調用存儲過程可能非常繁瑣且冗長。 如果您看一下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代碼。

可以使用@NamedStoredProcedureQuery等從JPA調用存儲過程。 您可以使用eclipselink為例。 http://wiki.eclipse.org/EclipseLink/Examples/JPA/StoredProcedures

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM