Using JooqTemplate requires no code generation and no XML configuration.
Add Dependency
gradle:
implementation 'net.sf.sprtool:sprtool-jooq:1.7.0' maven:
<dependency> <groupId>net.sf.sprtool</groupId> <artifactId>sprtool-jooq</artifactId> <version>1.7.0</version> </dependency> Inject JooqTemplate
import net.sf.sprtool.jooq.JooqTemplate; @Autowired private JooqTemplate jt; Using JooqTemplate
Inserting Multiple Records with List
Pass a List<Map<String,Object>> to insert multiple records at once; the return value is the number of inserted records:
List<Map<String, Object>> productList = new ArrayList<>(); Map<String, Object> p1 = new HashMap<>(); p1.put("name", "Wireless Mouse"); p1.put("category", "Electronics"); p1.put("price", 129.00); productList.add(p1); Map<String, Object> p2 = new HashMap<>(); p2.put("name", "Mechanical Keyboard"); p2.put("category", "Electronics"); p2.put("price", 399.00); productList.add(p2); Map<String, Object> p3 = new HashMap<>(); p3.put("name", "Monitor Stand"); p3.put("category", "Office Supplies"); p3.put("price", 199.00); productList.add(p3); int result = jt.insert("product", productList); // result == 3; 3 records inserted Inserting a List with a Single Record
When the List contains only 1 Map, it inserts 1 record and returns 1:
List<Map<String, Object>> orderList = new ArrayList<>(); Map<String, Object> order = new HashMap<>(); order.put("order_no", "A20260001"); order.put("amount", 258.00); orderList.add(order); int result = jt.insert("order", orderList); // result == 1 Using a jOOQ Table Object
The first argument can also be a jOOQ Table object built with DSL.table(...); the effect is the same as passing the table name string:
Table<?> productTable = DSL.table("product"); int result = jt.insert(productTable, productList); // result == 3 Inserting in Batches with a Specified batchSize
insert(table, list, batchSize) commits in batches according to batchSize. With 5 records and batchSize=2, it splits into 3 batches (2+2+1), and all records are inserted successfully:
int result = jt.insert("product", productList, 2); // result == 5 (all 5 records inserted in batches) // batchSize equals the list size: all inserted in one batch int result2 = jt.insert("product", productList, productList.size()); // batchSize greater than the list size: still inserted only once, without affecting the result int result3 = jt.insert("product", productList, 10); The Table object version also supports batchSize:
int result = jt.insert(productTable, productList, 2); Edge Cases
Behaviors verified by unit tests:
- Empty List: no records inserted, returns 0:
int result = jt.insert("product", new ArrayList<>()); // result == 0 - null List: throws
NullPointerException/IllegalArgumentException. - batchSize of 0 or negative: no error; inserts normally.
- Nonexistent table name: throws an exception whose message contains the table name.
