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.
Top comments (0)