CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-cn-hutool--hutool-all

A comprehensive Java utility library providing static method wrappers for common operations to reduce API learning costs and improve development efficiency

Pending
Overview
Eval results
Files

database-access.mddocs/

Database Access

Database utilities through DbUtil and Db classes, providing JDBC wrapper with ActiveRecord pattern, connection management, and SQL execution utilities.

Import

import cn.hutool.db.DbUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.db.sql.SqlBuilder;

Basic Database Operations

Database Connection

// Create database instance
public static Db use();  // Uses default datasource
public static Db use(String group);  // Uses named datasource
public static Db use(DataSource ds);  // Uses specific datasource

// Connection management
public static Connection getConnection();
public static Connection getConnection(String group);
public static void close(Connection conn);

CRUD Operations

// Insert operations
public static int insert(String tableName, Entity entity);
public static Long insertForGeneratedKey(String tableName, Entity entity);

// Query operations
public static List<Entity> findAll(String tableName);
public static Entity findById(String tableName, Object id);
public static List<Entity> findBy(String tableName, String field, Object value);

// Update operations
public static int update(String tableName, Entity entity, String wherePart);
public static int updateById(String tableName, Entity entity, Object id);

// Delete operations  
public static int delete(String tableName, String wherePart);
public static int deleteById(String tableName, Object id);

Usage Examples:

// Insert new record
Entity user = Entity.create()
    .set("name", "John Doe")
    .set("email", "john@example.com")
    .set("age", 30);
Long userId = DbUtil.insertForGeneratedKey("users", user);

// Query records
List<Entity> allUsers = DbUtil.findAll("users");
Entity johnUser = DbUtil.findById("users", userId);
List<Entity> adults = DbUtil.findBy("users", "age >= ?", 18);

// Update record
Entity updates = Entity.create().set("age", 31);
DbUtil.updateById("users", updates, userId);

// Delete record
DbUtil.deleteById("users", userId);

Entity Class

Entity Operations

public class Entity extends LinkedHashMap<String, Object> {
    // Creation
    public static Entity create();
    public static Entity create(String tableName);
    
    // Value operations
    public Entity set(String key, Object value);
    public Entity setIgnoreNull(String key, Object value);
    
    // Type-safe getters
    public <T> T get(String key, Class<T> type);
    public String getStr(String key);
    public Integer getInt(String key);
    public Long getLong(String key);
    public Double getDouble(String key);
    public Boolean getBool(String key);
    public Date getDate(String key);
    
    // Table operations
    public String getTableName();
    public Entity setTableName(String tableName);
    
    // Conversion
    public <T> T toBean(Class<T> beanClass);
    public Map<String, Object> toMap();
}

Advanced Database Operations

Raw SQL Execution

// Execute queries
public static List<Entity> query(String sql, Object... params);
public static Entity queryOne(String sql, Object... params);
public static <T> T queryValue(String sql, Object... params);

// Execute updates
public static int execute(String sql, Object... params);
public static int[] executeBatch(String sql, Object[]... paramsBatch);

// Call procedures
public static Object call(String sql, Object... params);

Transaction Management

// Transaction operations
public static void tx(Runnable runnable);
public static <T> T tx(Supplier<T> supplier);
public static <T> T tx(Func0<T> func);

// Manual transaction control
public static void beginTransaction();
public static void commit();
public static void rollback();

Usage Examples:

// Raw SQL queries
List<Entity> activeUsers = DbUtil.query(
    "SELECT * FROM users WHERE active = ? AND created_date > ?",
    true, DateUtil.parse("2023-01-01")
);

String userName = DbUtil.queryValue(
    "SELECT name FROM users WHERE id = ?", 
    userId);

// Batch operations
String insertSql = "INSERT INTO logs (message, level, timestamp) VALUES (?, ?, ?)";
Object[][] batchParams = {
    {"Error occurred", "ERROR", new Date()},
    {"User login", "INFO", new Date()},
    {"Debug info", "DEBUG", new Date()}
};
int[] results = DbUtil.executeBatch(insertSql, batchParams);

// Transactions
DbUtil.tx(() -> {
    // Multiple database operations in transaction
    DbUtil.insert("orders", order);
    DbUtil.update("inventory", inventoryUpdate, "product_id = ?", productId);
    DbUtil.insert("order_items", orderItem);
});

// Transaction with return value
Long orderId = DbUtil.tx(() -> {
    Entity order = Entity.create()
        .set("customer_id", customerId)
        .set("total", orderTotal);
    return DbUtil.insertForGeneratedKey("orders", order);
});

SQL Builder

SqlBuilder Class

public class SqlBuilder {
    // Creation
    public static SqlBuilder create();
    
    // SELECT operations
    public SqlBuilder select(String... fields);
    public SqlBuilder from(String table);
    public SqlBuilder where(String condition);
    public SqlBuilder and(String condition);
    public SqlBuilder or(String condition);
    
    // JOIN operations
    public SqlBuilder join(String table, String condition);
    public SqlBuilder leftJoin(String table, String condition);
    public SqlBuilder rightJoin(String table, String condition);
    
    // ORDER and GROUP
    public SqlBuilder orderBy(String field, boolean isAsc);
    public SqlBuilder groupBy(String... fields);
    public SqlBuilder having(String condition);
    
    // LIMIT and OFFSET
    public SqlBuilder limit(int limit);
    public SqlBuilder offset(int offset);
    
    // Build SQL
    public String build();
    public String toString();
}

Usage Examples:

// Build complex SELECT query
String sql = SqlBuilder.create()
    .select("u.name", "u.email", "p.title")
    .from("users u")
    .leftJoin("profiles p", "u.id = p.user_id")
    .where("u.active = ?")
    .and("u.created_date > ?")
    .orderBy("u.name", true)
    .limit(10)
    .build();

List<Entity> results = DbUtil.query(sql, true, DateUtil.parse("2023-01-01"));

Database Metadata

Schema Information

// Get table information
public static List<String> getTables();
public static List<String> getTables(String schema);

// Get column information
public static List<String> getColumns(String tableName);
public static Map<String, String> getColumnTypes(String tableName);

// Database metadata
public static String getDatabaseProductName();
public static String getDatabaseProductVersion();
public static String getDriverName();

Connection Pool Integration

DataSource Configuration

// Configure datasources
public static void setDataSource(DataSource ds);
public static void setDataSource(String group, DataSource ds);

// Get datasource
public static DataSource getDataSource();
public static DataSource getDataSource(String group);

Usage Examples:

// Configure HikariCP datasource
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("user");
config.setPassword("password");
config.setMaximumPoolSize(10);

HikariDataSource ds = new HikariDataSource(config);
DbUtil.setDataSource(ds);

// Use multiple datasources
DbUtil.setDataSource("primary", primaryDs);
DbUtil.setDataSource("secondary", secondaryDs);

Db primaryDb = DbUtil.use("primary");
Db secondaryDb = DbUtil.use("secondary");

Db Class - Fluent API

Instance Methods

public class Db {
    // Query operations
    public List<Entity> findAll(String tableName);
    public Entity findById(String tableName, Object id);
    public List<Entity> query(String sql, Object... params);
    public Entity queryOne(String sql, Object... params);
    
    // Insert operations
    public int insert(String tableName, Entity entity);
    public Long insertForGeneratedKey(String tableName, Entity entity);
    
    // Update operations
    public int update(String tableName, Entity entity, String wherePart);
    public int updateById(String tableName, Entity entity, Object id);
    
    // Delete operations
    public int delete(String tableName, String wherePart);
    public int deleteById(String tableName, Object id);
    
    // Execute operations
    public int execute(String sql, Object... params);
    
    // Transaction operations
    public void tx(Runnable runnable);
    public <T> T tx(Supplier<T> supplier);
}

Usage Examples:

// Instance usage
Db db = DbUtil.use();

// Fluent operations
List<Entity> users = db.query("SELECT * FROM users WHERE active = ?", true);
Entity user = db.queryOne("SELECT * FROM users WHERE email = ?", "john@example.com");

// Transaction with instance
db.tx(() -> {
    Entity order = Entity.create()
        .set("customer_id", customerId)
        .set("status", "pending");
    Long orderId = db.insertForGeneratedKey("orders", order);
    
    Entity item = Entity.create()
        .set("order_id", orderId)
        .set("product_id", productId)
        .set("quantity", 2);
    db.insert("order_items", item);
});

Error Handling and Utilities

Exception Handling

Database operations throw DbRuntimeException for SQL errors, with proper exception chaining and detailed error messages.

Connection Utilities

// Connection validation
public static boolean isValidConnection(Connection conn);

// Close resources safely
public static void close(ResultSet rs, Statement stmt, Connection conn);
public static void closeQuietly(AutoCloseable... closeables);

The database utilities provide a simple yet powerful abstraction over JDBC, supporting both simple operations and complex queries while maintaining type safety and proper resource management.

Install with Tessl CLI

npx tessl i tessl/maven-cn-hutool--hutool-all

docs

additional-utilities.md

bean-object-manipulation.md

collection-utilities.md

core-string-operations.md

cryptographic-operations.md

database-access.md

date-time-handling.md

file-io-operations.md

http-client-operations.md

index.md

json-processing.md

tile.json