Using Stored Procedures With JPA, JDBC. Meh, Just Use jOOQ
The current edition of the Java magazine has an article about Big Data Best Practices for JDBC and JPA by Josh Juneau: http://www.javamagazine.mozaicreader.com/MayJune2016
The article shows how to use a stored procedure with JDBC (notice how resources aren’t closed, unfortunately. This is commonly forgotten, even in Java Magazine articles)
// 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(); }
And with JPA:
// 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();
Specifically the latter was also recently discussed in blog posts by Vlad Mihalcea and Thorben Janssen.
Do you like verbosity and complexity?
No? We neither. This is why we give you a third option instead: Just use jOOQ. Here’s the equivalent jOOQ code:
// JDBC example: String returnStr = Routines.dummyProc( config, "This is a test"); // JPA example Routines.createEmp(config, "JOSH", "JUNEAU");
Yes! That’s it. Don’t waste time manually configuring your bind variables with JDBC API calls, or JPA annotations. No one likes writing annotations for stored procedures. With jOOQ and jOOQ’s code generator, procedure calls are:
- A one-liner
- A no-brainer
- A way to bring back the fun to stored procedures
Learn more about using Oracle stored procedures with nested collections and object types here: Painless Access from Java to PL/SQL Procedures with jOOQ
Reference: | Using Stored Procedures With JPA, JDBC. Meh, Just Use jOOQ from our JCG partner Lukas Eder at the JAVA, SQL, AND JOOQ blog. |