Hutool 官网:https://www.hutool.cn
官方参考文档:https://www.hutool.cn/docs
本节内容对应官方文档位置:概述 (hutool.cn)
Hutool 版本:5.7.1

特点

  1. 基于JDBC进行封装,使用ActiveRecord思想操作数据库
  2. 使用Entity代替Bean,减少bean代码编写,更灵活
  3. 支持Bean和Entity的转换,兼容传统ORM
  4. Entity构造where条件,会用PreparedStatement,不会出现SQL注入

配置格式

Maven项目中在src/main/resources目录下添加db.setting文件(非Maven项目添加到ClassPath中即可)
此处按照官方文档使用mysql作为例子

官方基本配置样例-db.setting

#------------------------------------------------------------------------------------------
## 基本配置信息
# JDBC URL,根据不同的数据库,使用相应的JDBC连接字符串
url = jdbc:mysql://<host>:<port>/<database_name>
# 用户名,此处也可以使用 user 代替
username = 用户名
# 密码,此处也可以使用 pass 代替
password = 密码
# JDBC驱动名,可选(Hutool会自动识别)
driver = com.mysql.jdbc.Driver

## 可选配置
# 是否在日志中显示执行的SQL
showSql = true
# 是否格式化显示的SQL
formatSql = false
# 是否显示SQL参数
showParams = true
# 打印SQL的日志等级,默认debug
sqlLevel = debug
#------------------------------------------------------------------------------------------

多数据源的配置

方法一:
  • 按照自定义配置文件的方式读取多个配置文件即可
方法二:
  • 在同一配置文件中使用分组隔离不同的数据源配置
[group_db1]
url = jdbc:mysql://<host>:<port>/<database_name>
username = 用户名
password = 密码

[group_db2]
url = jdbc:mysql://<host2>:<port>/<database_name>
username = 用户名
password = 密码

可选配置也可按需设置


应用

sql驱动jar包需要自行引入

1. 构造where条件

Entity where = Entity.create(TABLE_NAME).set(key1, value1).set(key2, value2)
相当于:
WHERE key1 = value1 and key2 = value2
.set()可多次使用
value默认以=号精准匹配,如需范围性匹配,可使用<、>、like、in等进行构造,例子:Entity.create(TABLE_NAME).set(key,"< value")

2. 基础使用

where为构造where条件,参照应用第1点,构造where条件
Db.use(Group)如果配置多源,则用group定义使用哪个数据库,Group选填,不填则使用默认配置
Db.use().insert(where)插入数据
Db.use().insertForGeneratedKey(where)插入数据并返回自增主键
Db.use().del(where)删除数据,where条件不能为空,防止全表删除,如需相关操作,需调用execute方法
Db.use().update(where1,where2)更新数据,where1为更新的数据,where2为更新条件
Db.use().findAll(TABLE_NAME)查询全字段数据
Db.use().findAll(where)按条件进行查询,含模糊查询
Db.use().findLike(TABLE_NAME, 条件,值, LikeType.Contains)模糊查询
Db.use().page(where, page)分页查询

3. 执行自定义sql语句

Db.use().query(sql)查询
Db.use().execute(sql)增删改

  • 支持?占位符,例如:
    Db.use().execute("insert into user values (?, ?, ?)", value1, value2, value3)
    相当于
    Db.use().execute("insert into user values (value1, value2,value3)")
  • 支持使用:name?name@name命名占位符
    Map<String, Object> paramMap = MapUtil.builder(name1,(Object) value1).put(name2, value2).put(name3, value3).build()
    Db.use().query("select * from table where key=@name1 and key2= @name2 and key3= @name3", paramMap)
    相当于
    Db.use().query("select * from table where key=value1 and key2=value2 and key3=value3")

4. 事务

Db.use().tx(new TxFunc() {
    @Override
    public void call(Db db) throws SQLException {
        db.insert(where);
        db.update(where));
    }
});
  • JDK8中可以用lambda表达式
Db.use().tx(db -> {
    db.insert(where);
    db.update(where);
});

5. Session

类似SqlRunner,优于Session对象只有一个Connection,便于事务操作
Session session = Session.create(DSFactory.get(Group))创建Session,DSFactory.get(Group)选填,不填则使用默认数据源,Group对应db.setting的配置
session.beginTransaction()表示事务开始,调用后每次执行语句将不被提交
session.commit()合并提交事务,恢复默认自动提交模式
session.insert(where)插入数据,where为构造where条件,参照应用第1点,构造where条件
session.update(where1, where2);更新数据,where1为更新的数据,where2为更新条件
session.del(where)删除数据

Entity entity = Entity.create(TABLE_NAME).set("字段1", "值").set("字段2", 2);
try {
    session.beginTransaction();
    // 增,生成SQL为 INSERT INTO `table_name` SET(`字段1`, `字段2`) VALUES(?,?)
    session.insert(entity);
    session.commit();
} catch (SQLException e) {
    session.quietRollback();
}

使用实例

springboot + mariadb + hutool 实例:数据库管理(Hutool-db - 简单使用增删改查)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐