Package | Description |
---|---|
org.dromara.hutool.db |
Hutool-db是一个在JDBC基础上封装的数据库操作工具类,通过包装,使用ActiveRecord思想操作数据库。
|
org.dromara.hutool.db.dialect |
数据库方言封装,包括数据库方言以及方言自动识别等
|
org.dromara.hutool.db.dialect.impl |
数据库方言实现,包括MySQL、Oracle、PostgreSQL、Sqlite3、H2、SqlServer2012等
|
org.dromara.hutool.db.driver |
驱动和驱动类名称相关封装
|
org.dromara.hutool.db.meta |
JDBC数据表元数据信息封装,包括表结构、列信息的封装,入口为MetaUtil
|
org.dromara.hutool.db.sql |
SQL语句和Statement构建封装
|
Modifier and Type | Method and Description |
---|---|
int |
DaoTemplate.add(Entity entity)
添加
|
Long |
DaoTemplate.addForGeneratedKey(Entity entity)
添加
|
List<Object> |
DaoTemplate.addForGeneratedKeys(Entity entity)
添加
|
int |
DaoTemplate.addOrUpdate(Entity entity)
增加或者更新实体
|
void |
Session.beginTransaction()
开始事务
|
protected void |
AbstractDb.checkTransactionSupported(Connection conn)
检查数据库是否支持事务,此项检查同一个数据源只检查一次,如果不支持抛出DbRuntimeException异常
|
void |
Session.commit()
提交事务
|
long |
AbstractDb.count(CharSequence selectSql,
Object... params)
结果的条目数
|
long |
DialectRunner.count(Connection conn,
Query query)
获取结果总数,生成类似于select count(1) from XXX wher XXX=?
|
long |
DialectRunner.count(Connection conn,
SqlBuilder sqlBuilder)
获取查询结果总数,生成类似于 SELECT count(1) from (sql) hutool_alias_count_
此方法会重新构建 SqlBuilder ,并去除末尾的order by子句 |
long |
DaoTemplate.count(Entity where)
满足条件的数据条目数量
|
long |
AbstractDb.count(Entity where)
结果的条目数
|
long |
AbstractDb.count(SqlBuilder sql)
结果的条目数
|
int |
DialectRunner.del(Connection conn,
Entity where)
删除数据
此方法不会关闭Connection |
int |
DaoTemplate.del(Entity where)
删除
|
int |
AbstractDb.del(Entity where)
删除数据
|
int |
AbstractDb.del(String tableName,
String field,
Object value)
删除数据
|
<T> int |
DaoTemplate.del(String field,
T value)
删除
|
<T> int |
DaoTemplate.del(T pk)
删除
|
int |
AbstractDb.execute(String sql,
Object... params)
执行非查询语句
语句包括 插入、更新、删除 |
int[] |
AbstractDb.executeBatch(Iterable<String> sqls)
批量执行非查询语句
|
int[] |
AbstractDb.executeBatch(String... sqls)
批量执行非查询语句
|
int[] |
AbstractDb.executeBatch(String sql,
Iterable<Object[]> paramsBatch)
批量执行非查询语句
|
Long |
AbstractDb.executeForGeneratedKey(String sql,
Object... params)
执行非查询语句
语句包括 插入、更新、删除 |
boolean |
DaoTemplate.exist(Entity where)
指定条件的数据是否存在
|
List<Entity> |
AbstractDb.find(Collection<String> fields,
Entity where)
查询
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> T |
AbstractDb.find(Collection<String> fields,
Entity where,
RsHandler<T> rsh)
查询
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> T |
DialectRunner.find(Connection conn,
Query query,
RsHandler<T> rsh)
查询
此方法不会关闭Connection |
List<Entity> |
DaoTemplate.find(Entity where)
根据某个字段值查询结果
|
List<Entity> |
AbstractDb.find(Entity where)
查询数据列表,返回字段由where参数指定
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> List<T> |
AbstractDb.find(Entity where,
Class<T> beanClass)
查询数据列表,返回字段由where参数指定
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> T |
AbstractDb.find(Entity where,
RsHandler<T> rsh,
String... fields)
查询,返回所有字段
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> T |
AbstractDb.find(Query query,
RsHandler<T> rsh)
查询
Query为查询所需数据的一个实体类,此对象中可以定义返回字段、查询条件,查询的表、分页等信息 |
<T> List<Entity> |
DaoTemplate.find(String field,
T value)
根据某个字段值查询结果
|
List<Entity> |
DaoTemplate.findAll()
查询当前表的所有记录
|
List<Entity> |
AbstractDb.findAll(Entity where)
查询数据列表,返回所有字段
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> List<T> |
AbstractDb.findAll(Entity where,
Class<T> beanClass)
查询数据列表,返回所有字段
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
List<Entity> |
AbstractDb.findAll(String tableName)
查询数据列表,返回所有字段
|
List<Entity> |
AbstractDb.findBy(String tableName,
Condition... wheres)
根据多个条件查询数据列表,返回所有字段
|
List<Entity> |
AbstractDb.findBy(String tableName,
String field,
Object value)
根据某个字段名条件查询数据列表,返回所有字段
|
List<Entity> |
DaoTemplate.findBySql(String sql,
Object... params)
根据SQL语句查询结果
SQL语句可以是非完整SQL语句,可以只提供查询的条件部分(例如WHERE部分) 此方法会自动补全SELECT * FROM [tableName] 部分,这样就无需关心表名,直接提供条件即可 |
List<Entity> |
AbstractDb.findLike(String tableName,
String field,
String value,
Condition.LikeType likeType)
根据某个字段名条件查询数据列表,返回所有字段
|
Entity |
DaoTemplate.get(Entity where)
根据条件实体查询单个记录,当有多条返回时,只显示查询到的第一条
|
Entity |
AbstractDb.get(Entity where)
根据条件实体查询单个记录,当有多条返回时,只显示查询到的第一条
|
<T> Entity |
AbstractDb.get(String tableName,
String field,
T value)
根据某个字段(最好是唯一字段)查询单个记录
当有多条返回时,只显示查询到的第一条 |
<T> Entity |
DaoTemplate.get(String field,
T value)
根据某个字段(最好是唯一字段)查询单个记录
当有多条返回时,只显示查询到的第一条 |
<T> Entity |
DaoTemplate.get(T pk)
根据主键获取单个记录
|
Connection |
DefaultConnectionHolder.getConnection() |
Connection |
ConnectionHolder.getConnection()
获得链接。
|
int[] |
AbstractDb.insert(Collection<Entity> records)
批量插入数据
需要注意的是,批量插入每一条数据结构必须一致。 |
int[] |
DialectRunner.insert(Connection conn,
Entity... records)
批量插入数据
批量插入必须严格保持Entity的结构一致,不一致会导致插入数据出现不可预知的结果 此方法不会关闭Connection |
<T> T |
DialectRunner.insert(Connection conn,
Entity record,
RsHandler<T> generatedKeysHandler)
插入数据
此方法不会关闭Connection |
int |
AbstractDb.insert(Entity record)
插入数据
|
Long |
AbstractDb.insertForGeneratedKey(Entity record)
插入数据
|
List<Object> |
AbstractDb.insertForGeneratedKeys(Entity record)
插入数据
|
int |
DialectRunner.insertOrUpdate(Connection conn,
Entity record,
String... keys)
插入或更新数据
此方法不会关闭Connection |
int |
AbstractDb.insertOrUpdate(Entity record,
String... keys)
插入或更新数据
根据给定的字段名查询数据,如果存在则更新这些数据,否则执行插入 |
PageResult<Entity> |
AbstractDb.page(CharSequence sql,
Page page,
Object... params)
分页查询
|
<T> T |
AbstractDb.page(CharSequence sql,
Page page,
RsHandler<T> rsh,
Object... params)
分页查询
|
PageResult<Entity> |
AbstractDb.page(Collection<String> fields,
Entity where,
int pageNumber,
int pageSize)
分页查询
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
PageResult<Entity> |
AbstractDb.page(Collection<String> fields,
Entity where,
Page page)
分页查询
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> T |
AbstractDb.page(Collection<String> fields,
Entity where,
Page page,
RsHandler<T> rsh)
分页查询
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
PageResult<Entity> |
DialectRunner.page(Connection conn,
Query query)
分页查询
此方法不会关闭Connection |
<T> T |
DialectRunner.page(Connection conn,
Query query,
RsHandler<T> rsh)
分页查询
此方法不会关闭Connection |
PageResult<Entity> |
DialectRunner.page(Connection conn,
SqlBuilder sqlBuilder,
Page page)
分页查询
此方法不会关闭Connection |
<T> T |
DialectRunner.page(Connection conn,
SqlBuilder sqlBuilder,
Page page,
RsHandler<T> rsh)
分页查询
此方法不会关闭Connection |
PageResult<Entity> |
DaoTemplate.page(Entity where,
Page page)
分页
|
PageResult<Entity> |
AbstractDb.page(Entity where,
Page page)
分页查询
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> T |
AbstractDb.page(Entity where,
Page page,
RsHandler<T> rsh)
分页查询
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
PageResult<Entity> |
DaoTemplate.page(Entity where,
Page page,
String... selectFields)
分页
|
<T> T |
AbstractDb.page(SqlBuilder sql,
Page page,
RsHandler<T> rsh)
分页查询
|
List<Entity> |
AbstractDb.pageForEntityList(Entity where,
Page page)
分页查询,结果为Entity列表,不计算总数
查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
<T> T |
AbstractDb.query(SerFunction<Connection,PreparedStatement> statementFunc,
RsHandler<T> rsh)
|
<T> List<T> |
AbstractDb.query(String sql,
Class<T> beanClass,
Object... params)
查询
|
List<Entity> |
AbstractDb.query(String sql,
Map<String,Object> params)
查询
|
List<Entity> |
AbstractDb.query(String sql,
Object... params)
查询
|
<T> T |
AbstractDb.query(String sql,
RsHandler<T> rsh,
Map<String,Object> paramMap)
支持占位符的查询,例如:select * from table where field1=:name1
|
<T> T |
AbstractDb.query(String sql,
RsHandler<T> rsh,
Object... params)
查询
|
Number |
AbstractDb.queryNumber(String sql,
Object... params)
查询单条单个字段记录,并将其转换为Number
|
Entity |
AbstractDb.queryOne(String sql,
Object... params)
查询单条记录
|
String |
AbstractDb.queryString(String sql,
Object... params)
查询单条单个字段记录,并将其转换为String
|
void |
Session.rollback()
回滚事务
|
void |
Session.rollback(Savepoint savepoint)
回滚到某个保存点,保存点的设置请使用setSavepoint方法
|
Savepoint |
Session.setSavepoint()
设置保存点
|
void |
Session.setTransactionIsolation(int level)
设置事务的隔离级别
Connection.TRANSACTION_NONE 驱动不支持事务 Connection.TRANSACTION_READ_UNCOMMITTED 允许脏读、不可重复读和幻读 Connection.TRANSACTION_READ_COMMITTED 禁止脏读,但允许不可重复读和幻读 Connection.TRANSACTION_REPEATABLE_READ 禁止脏读和不可重复读,单运行幻读 Connection.TRANSACTION_SERIALIZABLE 禁止脏读、不可重复读和幻读 |
void |
Session.tx(SerConsumer<Session> func)
在事务中执行操作,通过实现
SerConsumer 接口的call方法执行多条SQL语句从而完成事务 |
int |
DialectRunner.update(Connection conn,
Entity record,
Entity where)
更新数据
此方法不会关闭Connection |
int |
DaoTemplate.update(Entity entity)
更新
|
int |
DaoTemplate.update(Entity record,
Entity where)
按照条件更新
|
int |
AbstractDb.update(Entity record,
Entity where)
更新数据
更新条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 |
int |
DialectRunner.upsert(Connection conn,
Entity record,
String... keys)
更新或插入数据
此方法不会关闭Connection 如果方言未实现此方法则内部自动使用insertOrUpdate来替代功能 |
int |
AbstractDb.upsert(Entity record,
String... keys)
使用upsert语义插入或更新数据
根据给定的字段名查询数据,如果存在则更新这些数据,否则执行插入 如果方言未实现本方法,内部会自动调用insertOrUpdate来实现功能,由于upsert和insert使用有区别,为了兼容性保留原有insertOrUpdate不做变动 |
Modifier and Type | Method and Description |
---|---|
default PreparedStatement |
Dialect.psForCount(Connection conn,
Query query)
构建用于查询行数的
PreparedStatement 用户实现需按照数据库方言格式,将 Query 转换为带有占位符的SQL语句及参数列表Query 中包含了表名、查询条件等信息,可借助SqlBuilder完成SQL语句生成。 |
default PreparedStatement |
Dialect.psForCount(Connection conn,
SqlBuilder sqlBuilder)
构建用于查询行数的
PreparedStatement 用户实现需按照数据库方言格式,将 Query 转换为带有占位符的SQL语句及参数列表Query 中包含了表名、查询条件等信息,可借助SqlBuilder完成SQL语句生成。 |
PreparedStatement |
Dialect.psForDelete(Connection conn,
Query query)
构建用于删除的
PreparedStatement 用户实现需按照数据库方言格式,将 Query 转换为带有占位符的SQL语句及参数列表Query 中包含了删除所需的表名、查询条件等信息,可借助SqlBuilder完成SQL语句生成。 |
PreparedStatement |
Dialect.psForFind(Connection conn,
Query query)
构建用于获取多条记录的
PreparedStatement 用户实现需按照数据库方言格式,将 Query 转换为带有占位符的SQL语句及参数列表Query 中包含了查询所需的表名、查询条件等信息,可借助SqlBuilder完成SQL语句生成。 |
PreparedStatement |
Dialect.psForInsert(boolean returnGeneratedKey,
Connection conn,
Entity entity)
|
PreparedStatement |
Dialect.psForInsertBatch(Connection conn,
Entity... entities)
构建用于批量插入的PreparedStatement
用户实现需按照数据库方言格式,将 Entity 转换为带有占位符的SQL语句及参数列表 |
PreparedStatement |
Dialect.psForPage(Connection conn,
Query query)
构建用于分页查询的
PreparedStatement 用户实现需按照数据库方言格式,将 Query 转换为带有占位符的SQL语句及参数列表Query 中包含了分页查询所需的表名、查询条件、分页等信息,可借助SqlBuilder完成SQL语句生成。 |
PreparedStatement |
Dialect.psForPage(Connection conn,
SqlBuilder sqlBuilder,
Page page)
|
PreparedStatement |
Dialect.psForUpdate(Connection conn,
Entity entity,
Query query)
构建用于更新的
PreparedStatement 用户实现需按照数据库方言格式,将 Entity 配合Query 转换为带有占位符的SQL语句及参数列表其中 Entity 中包含需要更新的数据信息,Query 包含更新的查找条件信息。 |
PreparedStatement |
Dialect.psForUpsert(Connection conn,
Entity entity,
String... keys)
|
Modifier and Type | Method and Description |
---|---|
PreparedStatement |
AnsiSqlDialect.psForDelete(Connection conn,
Query query) |
PreparedStatement |
PhoenixDialect.psForUpdate(Connection conn,
Entity entity,
Query query) |
PreparedStatement |
AnsiSqlDialect.psForUpdate(Connection conn,
Entity entity,
Query query) |
PreparedStatement |
PhoenixDialect.psForUpsert(Connection conn,
Entity entity,
String... keys) |
PreparedStatement |
AnsiSqlDialect.psForUpsert(Connection conn,
Entity entity,
String... keys) |
Modifier and Type | Method and Description |
---|---|
static String |
DriverUtil.identifyDriver(Connection conn)
识别JDBC驱动名
|
Modifier and Type | Method and Description |
---|---|
static String[] |
MetaUtil.getColumnNames(ResultSet rs)
获得结果集的所有列名
|
static String[] |
MetaUtil.getColumnNames(ResultSetMetaData metaData)
获得结果集的所有列名
|
static boolean |
MetaUtil.isOracle(DatabaseMetaData metaData)
判断当前数据库是否为Oracle。
|
Constructor and Description |
---|
ResultColumn(ResultSetMetaData metaData,
int columnIndexBase1)
构造
|
Modifier and Type | Method and Description |
---|---|
StatementWrapper |
StatementBuilder.buildForBatch()
创建批量操作的
StatementWrapper |
boolean |
SqlExecutor.call(String sql,
Object... params)
执行调用存储过程
此方法不会关闭Connection |
ResultSet |
SqlExecutor.callQuery(String sql,
Object... params)
执行调用存储过程
此方法不会关闭Connection |
int |
SqlExecutor.execute(String sql,
Map<String,Object> paramMap)
执行非查询语句
语句包括 插入、更新、删除 此方法不会关闭Connection |
int |
SqlExecutor.execute(String sql,
Object... params)
执行非查询语句
语句包括 插入、更新、删除 此方法不会关闭Connection |
int[] |
SqlExecutor.executeBatch(Iterable<String> sqls)
批量执行非查询语句
语句包括 插入、更新、删除 此方法不会关闭Connection |
int[] |
SqlExecutor.executeBatch(String... sqls)
批量执行非查询语句
语句包括 插入、更新、删除 此方法不会关闭Connection |
int[] |
SqlExecutor.executeBatch(String sql,
Iterable<Object[]> paramsBatch)
批量执行非查询语句
语句包括 插入、更新、删除 此方法不会关闭Connection |
Long |
SqlExecutor.executeForGeneratedKey(String sql,
Map<String,Object> paramMap)
执行非查询语句,返回主键
发查询语句包括 插入、更新、删除 此方法不会关闭Connection |
Long |
SqlExecutor.executeForGeneratedKey(String sql,
Object... params)
执行非查询语句,返回主键
发查询语句包括 插入、更新、删除 此方法不会关闭Connection |
static <T> T |
StatementUtil.executeQuery(PreparedStatement ps,
RsHandler<T> rsh)
执行查询
|
static int |
StatementUtil.executeUpdate(PreparedStatement ps,
Object... params)
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
|
String |
Query.getFirstTableName()
获得第一个表名
|
<T> T |
SqlExecutor.query(SerFunction<Connection,PreparedStatement> statementFunc,
RsHandler<T> rsh)
|
<T> T |
SqlExecutor.query(SqlBuilder sqlBuilder,
RsHandler<T> rsh)
执行查询语句
此方法不会关闭Connection |
<T> T |
SqlExecutor.query(String sql,
RsHandler<T> rsh,
Map<String,Object> paramMap)
执行查询语句,例如:select * from table where field1=:name1
此方法不会关闭Connection |
<T> T |
SqlExecutor.query(String sql,
RsHandler<T> rsh,
Object... params)
执行查询语句
此方法不会关闭Connection |
static void |
SqlBuilder.validateEntity(Entity entity)
验证实体类对象的有效性
|
Copyright © 2025. All rights reserved.