Skip to content

Beangle JDBC API 调用说明 ​

模块总览 ​

模块包名功能说明
Coreorg.beangle.jdbc核心接口和类型定义
Queryorg.beangle.jdbc.querySQL 查询和执行
Metaorg.beangle.jdbc.meta数据库元数据
Engineorg.beangle.jdbc.engine数据库引擎和方言
DSorg.beangle.jdbc.ds数据源管理
Scriptorg.beangle.jdbc.scriptSQL 脚本处理

Query 模块 ​

org.beangle.jdbc.query - 提供 SQL 查询和执行功能。

功能说明 提供 SQL 查询、更新、批量操作等功能,支持参数化查询和结果集处理。

主要 API

API功能描述使用示例
JdbcExecutorJDBC 执行器new JdbcExecutor(dataSource)
StatementSQL 语句构建器executor.statement(sql)
ResultSetIterator结果集迭代器new ResultSetIterator(rs, engine)
ParamSetter参数设置器ParamSetter.setParam(engine, stmt, index, value, type)
ParamValue参数值包装new ParamValue(value, sqlType)

常用场景示例

基本查询 ​

scala
import org.beangle.jdbc.query.JdbcExecutor

val executor = new JdbcExecutor(dataSource)

val users = executor.query("SELECT id, name FROM users")
users.foreach { row =>
  val id = row(0).asInstanceOf[Int]
  val name = row(1).asInstanceOf[String]
  println(s"User: $id - $name")
}

参数化查询 ​

scala
val user = executor.query("SELECT * FROM users WHERE id = ?", 1)
val usersByName = executor.query("SELECT * FROM users WHERE name LIKE ?", "%John%")

唯一结果查询 ​

scala
val user = executor.unique[User]("SELECT * FROM users WHERE id = ?", 1)
val userName = executor.unique[String]("SELECT name FROM users WHERE id = ?", 1)

查询单个值 ​

scala
val count = executor.queryForInt("SELECT COUNT(*) FROM users")
val maxId = executor.queryForLong("SELECT MAX(id) FROM users")

分页查询 ​

scala
import org.beangle.commons.collection.page.PageLimit

val limit = PageLimit(1, 10)
val users = executor.fetch("SELECT * FROM users ORDER BY id", limit)

更新操作 ​

scala
val rows = executor.update("UPDATE users SET name = ? WHERE id = ?", "John", 1)
val deleted = executor.update("DELETE FROM users WHERE id = ?", 1)

批量操作 ​

scala
val datas = Seq(
  Array(1, "Alice", 25),
  Array(2, "Bob", 30),
  Array(3, "Charlie", 28)
)
val types = Seq(Types.INTEGER, Types.VARCHAR, Types.INTEGER)
executor.batchInsert("INSERT INTO users (id, name, age) VALUES (?, ?, ?)", datas, types)

使用 Statement 构建器 ​

scala
val stmt = executor.statement("SELECT * FROM users WHERE name = :name AND age > :age")
stmt.params(Map("name" -> "John", "age" -> 25))
val users = stmt.list()

流式查询 ​

scala
val iterator = executor.iterate("SELECT * FROM large_table")
iterator.foreach { row =>
  processRow(row)
}
iterator.close()

Meta 模块 ​

org.beangle.jdbc.meta - 提供数据库元数据查询功能。

功能说明 提供数据库元数据的查询、导出和比较功能。

主要 API

API功能描述使用示例
Database数据库元数据new Database(name, schema)
Schema模式元数据new Schema(name)
Table表元数据new Table(name, schema)
Column列元数据new Column(name, sqlType)
PrimaryKey主键元数据new PrimaryKey(name, columns)
ForeignKey外键元数据new ForeignKey(name, columns, refTable, refColumns)
Index索引元数据new Index(name, columns)
Sequence序列元数据new Sequence(name)
MetadataLoader元数据加载器new MetadataLoader(dataSource)
Serializer元数据序列化器new Serializer()

常用场景示例

加载数据库元数据 ​

scala
import org.beangle.jdbc.meta.MetadataLoader

val loader = new MetadataLoader(dataSource)
val database = loader.load()

println(s"Database: ${database.name}")
database.schemas.foreach { schema =>
  println(s"Schema: ${schema.name}")
  schema.tables.foreach { table =>
    println(s"  Table: ${table.name}")
  }
}

查询表结构 ​

scala
val table = database.getTable("users")
table.columns.foreach { column =>
  println(s"  Column: ${column.name} - ${column.sqlType.typeName}")
}

查询主键 ​

scala
val table = database.getTable("users")
table.primaryKey.foreach { pk =>
  println(s"Primary Key: ${pk.name}")
  pk.columns.foreach { column =>
    println(s"  Column: ${column.name}")
  }
}

查询外键 ​

scala
val table = database.getTable("orders")
table.foreignKeys.foreach { fk =>
  println(s"Foreign Key: ${fk.name}")
  println(s"  References: ${fk.refTable.name}")
}

查询索引 ​

scala
val table = database.getTable("users")
table.indexes.foreach { index =>
  println(s"Index: ${index.name}")
  index.columns.foreach { column =>
    println(s"  Column: ${column.name}")
  }
}

导出元数据 ​

scala
import org.beangle.jdbc.meta.Serializer

val serializer = new Serializer()
val xml = serializer.toXml(database)
println(xml)

比较数据库结构 ​

scala
val db1 = loader1.load()
val db2 = loader2.load()

val diff = Diff.compare(db1, db2)
diff.changes.foreach { change =>
  println(s"Change: ${change.description}")
}

Engine 模块 ​

org.beangle.jdbc.engine - 提供数据库引擎和方言支持。

功能说明 提供多种数据库的方言支持,包括类型映射、SQL 语法转换等。

主要 API

API功能描述使用示例
Engine数据库引擎接口Engines.forDataSource(dataSource)
Dialect数据库方言engine.dialect
AbstractEngine抽象数据库引擎class MyEngine extends AbstractEngine
Engines引擎工厂Engines.forDataSource(dataSource)

支持的数据库

数据库引擎类方言类
MySQLMySQLMySQLDialect
PostgreSQLPostgreSQLPostgreSQLDialect
OracleOracleOracleDialect
SQL ServerSQLServerSQLServerDialect
H2H2H2Dialect
DB2DB2DB2Dialect
DerbyDerbyDerbyDialect

常用场景示例

获取数据库引擎 ​

scala
import org.beangle.jdbc.engine.Engines

val engine = Engines.forDataSource(dataSource)
println(s"Database: ${engine.name}")
println(s"Version: ${engine.version}")

使用方言功能 ​

scala
val dialect = engine.dialect

val limitSql = dialect.limit("SELECT * FROM users", 0, 10)
val quotedName = dialect.quote("user_name")
val sequenceSql = dialect.sequenceSql("user_seq")

类型映射 ​

scala
val sqlType = engine.resolveCode(Types.VARCHAR, Some(255), None, None)
println(s"SQL Type: ${sqlType.typeName}")

DS 模块 ​

org.beangle.jdbc.ds - 提供数据源管理功能。

功能说明 提供数据源的创建、配置和加密功能。

主要 API

API功能描述使用示例
DataSourceFactory数据源工厂DataSourceFactory.build(config)
DataSourceUtils数据源工具DataSourceUtils.getDataSource(config)
DatasourceConfig数据源配置new DatasourceConfig()
DatasourceEncryptor数据源加密器new AesEncryptor(key)

常用场景示例

创建数据源 ​

scala
import org.beangle.jdbc.ds.DataSourceFactory

val config = Map(
  "driver" -> "org.postgresql.Driver",
  "url" -> "jdbc:postgresql://localhost:5432/mydb",
  "username" -> "user",
  "password" -> "password",
  "maxPoolSize" -> "10"
)

val dataSource = DataSourceFactory.build(config)

使用加密数据源 ​

scala
import org.beangle.jdbc.ds.AesEncryptor

val encryptor = new AesEncryptor("my-secret-key")
val encryptedPassword = encryptor.encrypt("password")

val config = Map(
  "driver" -> "org.postgresql.Driver",
  "url" -> "jdbc:postgresql://localhost:5432/mydb",
  "username" -> "user",
  "password" -> encryptedPassword,
  "passwordEncrypted" -> "true"
)

val dataSource = DataSourceFactory.build(config)

Script 模块 ​

org.beangle.jdbc.script - 提供 SQL 脚本处理功能。

功能说明 提供 SQL 脚本的解析、执行和管理功能。

主要 API

API功能描述使用示例
SqlSQL 脚本new Sql(content)
runnerSQL 脚本执行器runner.execute(dataSource, script)
parserSQL 脚本解析器parser.parse(content)

常用场景示例

执行 SQL 脚本 ​

scala
import org.beangle.jdbc.script.runner

val script = """
  CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT
  );
  
  INSERT INTO users VALUES (1, 'John', 30);
"""

runner.execute(dataSource, script)

最佳实践 ​

连接管理 ​

  • 使用连接池提高性能
  • 合理设置连接池大小
  • 及时释放连接
  • 监控连接池状态

SQL 执行 ​

  • 使用参数化查询防止 SQL 注入
  • 合理设置 fetchSize
  • 使用批量操作提高性能
  • 及时关闭结果集

事务管理 ​

  • 使用事务保证数据一致性
  • 合理设置事务隔离级别
  • 及时提交或回滚事务
  • 避免长事务

错误处理 ​

  • 捕获 SQL 异常
  • 记录错误日志
  • 提供友好的错误信息
  • 实现重试机制

性能优化 ​

  • 使用预编译语句
  • 合理使用索引
  • 避免 SELECT *
  • 使用分页查询