You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importcom.dotmarketing.common.db.DotConnect;
importcom.dotmarketing.exception.DotDataException;
publicclassMyDataAccess {
publicList<Map<String, Object>> findByStatus(Stringstatus) throwsDotDataException {
DotConnectdotConnect = newDotConnect();
returndotConnect
.setSQL("SELECT id, name, status FROM my_table WHERE status = ?")
.addParam(status)
.loadResults();
}
publicOptional<Map<String, Object>> findById(Stringid) throwsDotDataException {
DotConnectdotConnect = newDotConnect();
List<Map<String, Object>> results = dotConnect
.setSQL("SELECT * FROM my_table WHERE id = ?")
.addParam(id)
.loadResults();
returnresults.isEmpty() ? Optional.empty() : Optional.of(results.get(0));
}
}
Transaction Pattern (Required)
importcom.dotmarketing.common.db.DotConnect;
importcom.dotmarketing.db.LocalTransaction;
publicclassMyTransactionalService {
publicMyEntitycreateEntity(MyEntityFormform) throwsDotDataException {
returnLocalTransaction.wrapReturn(() -> {
// Insert main entityDotConnectdotConnect = newDotConnect();
Stringid = UUIDGenerator.generateUuid();
dotConnect
.setSQL("INSERT INTO my_table (id, name, description, created_date) VALUES (?, ?, ?, ?)")
.addParam(id)
.addParam(form.getName())
.addParam(form.getDescription())
.addParam(newDate())
.executeUpdate();
// Insert related datafor (Stringtag : form.getTags()) {
dotConnect
.setSQL("INSERT INTO my_table_tags (entity_id, tag) VALUES (?, ?)")
.addParam(id)
.addParam(tag)
.executeUpdate();
}
returnfindById(id);
});
}
publicvoiddeleteEntity(Stringid) throwsDotDataException {
LocalTransaction.wrapReturnWithListeners(() -> {
DotConnectdotConnect = newDotConnect();
// Delete related data firstdotConnect
.setSQL("DELETE FROM my_table_tags WHERE entity_id = ?")
.addParam(id)
.executeUpdate();
// Delete main entityintdeletedRows = dotConnect
.setSQL("DELETE FROM my_table WHERE id = ?")
.addParam(id)
.executeUpdate();
if (deletedRows == 0) {
thrownewDotDataException("Entity not found: " + id);
}
returnnull;
});
}
}
Parameter Binding (Critical)
Safe Parameter Binding
// ✅ ALWAYS use parameterized queriesDotConnectdotConnect = newDotConnect();
List<Map<String, Object>> results = dotConnect
.setSQL("SELECT * FROM my_table WHERE name = ? AND status = ?")
.addParam(name)
.addParam(status)
.loadResults();
// ✅ Handle null parametersdotConnect
.setSQL("SELECT * FROM my_table WHERE (? IS NULL OR category = ?)")
.addParam(category)
.addParam(category)
.loadResults();
// ❌ NEVER use string concatenation (SQL injection risk)Stringsql = "SELECT * FROM my_table WHERE name = '" + name + "'";
// Get single string valueStringname = dotConnect
.setSQL("SELECT name FROM my_table WHERE id = ?")
.addParam(id)
.getString("name");
// Get single integer valueintcount = dotConnect
.setSQL("SELECT COUNT(*) as total FROM my_table")
.getInt("total");
// Get single boolean valuebooleanexists = dotConnect
.setSQL("SELECT COUNT(*) > 0 as exists FROM my_table WHERE id = ?")
.addParam(id)
.getBoolean("exists");
Connection Management
Database Configuration
// Database properties (in dotmarketing-config.properties)db.driver=org.postgresql.Driverdb.url=jdbc:postgresql://localhost:5432/dotcmsdb.username=dotcmsdb.password=dotcmsdb.max.connections=60db.min.connections=5
Connection Pool Usage
// DotConnect automatically manages connections// No need to manually open/close connectionsDotConnectdotConnect = newDotConnect();
// Connection is automatically returned to pool after operation
Performance Patterns
Query Optimization
// Use indexes effectivelydotConnect
.setSQL("SELECT * FROM my_table WHERE indexed_column = ? AND status = ?")
.addParam(value)
.addParam(status)
.loadResults();
// Limit result setsdotConnect
.setSQL("SELECT * FROM my_table WHERE status = ? LIMIT 100")
.addParam(status)
.loadResults();
// Use EXISTS instead of COUNT when checking existencebooleanexists = dotConnect
.setSQL("SELECT EXISTS(SELECT 1 FROM my_table WHERE id = ?) as exists")
.addParam(id)
.getBoolean("exists");