Статьи

Использование хранимых процедур с JPA, JDBC.

В текущем выпуске журнала Java есть статья о лучших методах работы с большими данными для JDBC и JPA Джоша Джуно : http://www.javamagazine.mozaicreader.com/MayJune2016

В статье показано, как использовать хранимую процедуру с JDBC (к сожалению, обратите внимание, что ресурсы не закрыты. Об этом часто забывают даже в статьях журнала Java)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
// Using JDBC to call upon a database stored
// procedure
CallableStatement cs = null;
try {
    cs = conn.prepareCall("{call DUMMY_PROC(?,?)}");
    cs.setString(1, "This is a test");
    cs.registerOutParameter(2, Types.VARCHAR);
    cs.executeQuery();
 
    // Do something with result
    String returnStr = cs.getString(2);
} catch (SQLException ex){
    ex.printStackTrace();
}

И с JPA:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
// Utilize JPA to call a database stored procedure
// Add @NamedStoredProcedureQuery to entity class
@NamedStoredProcedureQuery(
    name="createEmp", procedureName="CREATE_EMP",
    parameters = {
        @StoredProcedureParameter(
            mode= ParameterMode.IN,
            type=String.class,
            name="first"),
        @StoredProcedureParamter(
            mode = ParameterMode.IN,
            type=String.class,
            name="last")
    })
 
// Calling upon stored procedure
StoredProcedureQuery qry =
    em.createStoredProcedureQuery("createEmp");
qry.setParameter("first", "JOSH");
qry.setParameter("last","JUNEAU");
qry.execute();

В частности, последнее также недавно обсуждалось в сообщениях блога Влада Михалча и Торбена Янссена .

Вам нравится многословие и сложность?

Нет? Мы тоже. Вот почему мы даем вам третий вариант: просто используйте jOOQ. Вот эквивалентный код JOOQ:

1
2
3
4
5
6
// JDBC example:
String returnStr = Routines.dummyProc(
    config, "This is a test");
 
// JPA example
Routines.createEmp(config, "JOSH", "JUNEAU");

Да! Вот и все. Не тратьте время на ручную настройку переменных связывания с вызовами JDBC API или аннотациями JPA. Никто не любит писать аннотации для хранимых процедур. С jOOQ и генератором кода jOOQ вызовы процедур:

  • Однострочник
  • Ежу понятно
  • Способ вернуть удовольствие от хранимых процедур

Узнайте больше об использовании хранимых процедур Oracle с вложенными коллекциями и типами объектов здесь: безболезненный доступ из Java в PL / SQL-процедуры с помощью jOOQ