Hutool学习 —— 数据库 - db (一)Db简单操作

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 - 简单使用增删改查) - 简书 (jianshu.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容