Skip to content

数据访问 API 参考

数据访问模块的 API 参考文档。

DataSource

DataSourceBuilder

数据源构建器。

java
DataSource dataSource = DataSourceBuilder.create()
    .url("jdbc:mysql://localhost:3306/db")
    .username("root")
    .password("password")
    .maxPoolSize(20)
    .minPoolSize(5)
    .build();

方法

  • url(String): 设置数据库 URL
  • username(String): 设置用户名
  • password(String): 设置密码
  • driverClassName(String): 设置驱动类名
  • maxPoolSize(int): 设置最大连接数
  • minPoolSize(int): 设置最小连接数
  • maxWait(long): 设置最大等待时间
  • testQuery(String): 设置测试查询
  • build(): 构建数据源

JdbcTemplate

JDBC 操作模板类。

java
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

查询操作

java
// 查询单个对象
User user = jdbcTemplate.queryForObject(
    "SELECT * FROM users WHERE id = ?",
    User.class,
    1L
);

// 查询列表
List<User> users = jdbcTemplate.queryForList(
    "SELECT * FROM users",
    User.class
);

// 查询单个值
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM users");
long total = jdbcTemplate.queryForLong("SELECT COUNT(*) FROM users");
String name = jdbcTemplate.queryForString("SELECT name FROM users WHERE id = ?", 1L);

// 查询 Optional
Optional<User> optUser = jdbcTemplate.queryForOptional(
    "SELECT * FROM users WHERE id = ?",
    User.class,
    1L
);

方法

  • queryForObject(String, Class<T>, Object...): 查询单个对象
  • queryForList(String, Class<T>, Object...): 查询列表
  • queryForInt(String, Object...): 查询整数
  • queryForLong(String, Object...): 查询长整数
  • queryForString(String, Object...): 查询字符串
  • queryForOptional(String, Class<T>, Object...): 查询 Optional

更新操作

java
// 插入
Long id = jdbcTemplate.insert(
    "INSERT INTO users (name, email) VALUES (?, ?)",
    "John",
    "john@example.com"
);

// 更新
int rows = jdbcTemplate.update(
    "UPDATE users SET name = ? WHERE id = ?",
    "Jane",
    1L
);

// 删除
int rows = jdbcTemplate.update(
    "DELETE FROM users WHERE id = ?",
    1L
);

方法

  • insert(String, Object...): 插入并返回自增 ID
  • update(String, Object...): 更新/删除,返回影响行数

批处理

java
// 批量插入
List<Object[]> batchArgs = List.of(
    new Object[]{"John", "john@example.com"},
    new Object[]{"Jane", "jane@example.com"}
);

int[] rows = jdbcTemplate.batchUpdate(
    "INSERT INTO users (name, email) VALUES (?, ?)",
    batchArgs
);

// 批量更新(带回调)
jdbcTemplate.batchUpdate(
    "INSERT INTO users (name, email) VALUES (?, ?)",
    users,
    100,
    (ps, user) -> {
        ps.setString(1, user.getName());
        ps.setString(2, user.getEmail());
    }
);

方法

  • batchUpdate(String, List<Object[]>): 批量更新
  • batchUpdate(String, List<T>, int, BiConsumer): 批量更新(带回调)

事务管理

@Transactional

声明式事务注解。

java
@Transactional
public void transferMoney(Long fromId, Long toId, BigDecimal amount) {
    // 事务操作
}

@Transactional(
    propagation = Propagation.REQUIRES_NEW,
    isolation = Isolation.READ_COMMITTED,
    rollbackFor = Exception.class
)
public void complexOperation() {
    // 复杂事务操作
}

参数

  • propagation: 事务传播行为

    • REQUIRED: 默认,如果存在事务则加入,否则创建新事务
    • REQUIRES_NEW: 创建新事务,挂起当前事务
    • NESTED: 嵌套事务
    • SUPPORTS: 支持事务,如果存在则加入
    • NOT_SUPPORTED: 不支持事务,挂起当前事务
    • NEVER: 不允许事务,如果存在则抛异常
    • MANDATORY: 必须在事务中,否则抛异常
  • isolation: 事务隔离级别

    • DEFAULT: 使用数据库默认隔离级别
    • READ_UNCOMMITTED: 读未提交
    • READ_COMMITTED: 读已提交
    • REPEATABLE_READ: 可重复读
    • SERIALIZABLE: 串行化
  • readOnly: 是否只读事务,默认 false

  • rollbackFor: 回滚异常类型

  • noRollbackFor: 不回滚异常类型

TransactionTemplate

编程式事务模板。

java
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);

// 执行事务
transactionTemplate.execute(status -> {
    try {
        // 业务逻辑
        userRepository.save(user);
        orderRepository.save(order);
        return true;
    } catch (Exception e) {
        status.setRollbackOnly();
        throw e;
    }
});

方法

  • execute(TransactionCallback): 执行事务
  • executeWithoutResult(Consumer<TransactionStatus>): 执行无返回值事务

TransactionManager

事务管理器。

java
TransactionManager transactionManager = new TransactionManager(dataSource);

// 开启事务
transactionManager.begin();

try {
    // 业务逻辑
    userRepository.save(user);
    
    // 提交事务
    transactionManager.commit();
} catch (Exception e) {
    // 回滚事务
    transactionManager.rollback();
    throw e;
}

方法

  • begin(): 开启事务
  • commit(): 提交事务
  • rollback(): 回滚事务
  • getConnection(): 获取当前事务连接

RowMapper

结果集映射器。

java
public class UserRowMapper implements RowMapper<User> {
    
    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setId(rs.getLong("id"));
        user.setName(rs.getString("name"));
        user.setEmail(rs.getString("email"));
        return user;
    }
}

// 使用
List<User> users = jdbcTemplate.query(
    "SELECT * FROM users",
    new UserRowMapper()
);

下一步

Released under the Apache License 2.0