Mybatis入门
前言
在 前 面 我 们 学 习 MySQL 数 据 库 时 , 都 是 利 用 图 形 化 客 户 端 工 具 ( 如 : id ea 、 data g rip ) , 来操作数据库的 。
在 客 户 端 工 具 中 , 编 写 增删 改 查 的 SQL 语 句 , 发 给M y SQL 数据 库 管 理 系 统 , 由 数据 库
管 理 系 统执 行 SQL 语 句 并 返 回执 行 结 果。
增删改操作: 返回受影响行数
查 询 操 作: 返 回 结 果 集 ( 查 询 的 结 果 )
我 们 做 为 后 端 程 序 开 发 人 员 , 通 常 会 使 用 Java程 序 来 完 成 对 数 据 库 的 操 作 。 Java程 序 操 作 数 据 库 , 现 在 主 流 的 方 式 是 : My bat i s 。
什 么 是 My Bat i s ?
· My Bat i s 是 一 款 优 秀 的 持 久 层 框 架 , 用 于 简 化 JD BC 的 开 发 。
· My Bat i s 本 是 Apa ch e 的 一 个 开 源 项 目 iBat i s , 2 0 1 0 年 这 个 项 目 由a pa ch e 迁 移 到 了 g o o gl e c o d e , 并 且 改 名 为 My Bat i s 。 2 0 1 3 年 1 1 月 迁 移 到 Git h u b 。
官 网 : h t t p s : / / m y b a t i s . o r g / m y b a t i s - 3 / z h / i n d e x . h t m l
在上面我们提到了两个词 : 一个是持久层 , 另一个是框架 。
· 持 久 层 : 指 的 是 就 是 数 据 访 问 层 ( da o) , 是 用 来 操 作 数 据 库 的 。
· 框 架 : 是 一 个 半 成 品 软 件 , 是 一 套 可 重 用 的 、 通 用 的 、 软 件 基 础 代 码 模 型 。 在 框 架 的 基础上进行软件开发更加高效 、 规范 、 通用 、 可拓展 。
My bat i s 课 程 安 排 :
· My bat i s 入 门
· My bat i s 基 础 增 删 改 查
· My bat i s 动 态 SQL
接 下 来 , 我 们 就 通 过 一 个 入 门 程 序 , 让 大 家 快 速 感 受 一 下 通 过 My bat i s 如 何 来 操 作 数 据 库 。
1 . 快速入门
需 求 : 使 用 My bat i s 查 询 所 有 用 户 数 据 。
1 . 1 入 门 程 序 分 析
以 前 我 们 是 在 图 形 化 客 户 端 工 具 中 编 写 SQL 查 询 代 码 , 发 送 给 数 据 库 执 行 , 数 据 库 执 行 后 返回操作结果 。
图形化工具会把数据库执行的查询结果 , 使用表格的形式展现出来
现 在 使 用 My bat i s 操 作 数 据 库 , 就 是 在 My bat i s 中 编 写 SQL 查 询 代 码 , 发 送 给 数 据 库 执 行 , 数据库执行后返回结果 。
My bat i s 会 把 数 据 库 执 行 的 查 询 结 果 , 使 用 实 体 类 封 装 起 来 ( 一 行 记 录 对 应 一 个 实 体 类 对 象 )
My bat i s 操 作 数 据 库 的 步 骤 :
1 . 准 备 工 作 ( 创 建s p ri n g bo ot 工 程 、 数 据 库 表 u s e r 、 实 体 类 U s e r) 2 . 引 入 My bat i s 的 相 关 依 赖 , 配 置 My bat i s ( 数 据 库 连 接 信 息 ) 3 . 编 写 SQL 语 句 ( 注 解 /XML) |
| 1 . 2 入 门 程 序 实 现
1 . 2 . 1 准 备 工 作
1 . 2 . 1 . 1 创 建s p ri ngboot 工 程
创 建s p ri n g bo ot 工 程 , 并 导 入 my bat i s 的 起 步 依 赖 、 my s ql 的 驱 动 包 。
项 目 工程创 建 完 成 后 , 自 动在p om . xml 文件 中 , 导入M y bat is 依赖 和M y SQL 驱 动 依赖
<!- - 仅供参考:只粘贴了pom. xml中部分内容 - - >
< d e p e nd e n c i e s >
<!- - mybatis起步依赖 - - >
< d e p e nd e n cy >
< g r o u p Id > o r g . my b at i s . s p r i n g . b o ot </ g r o u p Id >
< a r tifa ct Id > my b at i s - s p r i n g - b o ot - st a r t e r </ a r tifa ct Id > < v e r s i o n > 2 . 3 . 0 </ v e r s i o n >
< / de p e nd e n cy >
<!- - mysql驱动包依赖 - - >
< d e p e nd e n cy >
< g r o u p Id > c o m . my s ql < / g r o u p Id >
< a r tifa ct Id > my s ql - c o n n e ct o r -j < / a r tifa ct Id >
< s c o p e > r u nti m e </ s c o p e >
< / de p e nd e n cy >
<!- - spring单元测试 (集成了junit) - - >
< d e p e nd e n cy >
< g r o u p Id > o r g . s p r i n g f r a m ew o r k . b o ot </ g r o u p Id >
< a r tifa ct Id > s p r i n g - b o ot - st a r t e r - t e st </ a r tifa ct Id >
< s c o p e > t e st </ s c o p e >
< / de p e nd e n cy >
< / de p e nd e n c i e s >
1 . 2 . 1 . 2 数 据 准 备
创建用户表user , 并创建对应的实体类User 。
用 户 表 :
- - 用户表
c r e at e t a bl e u s e r (
i d i nt u n s ig n e d p r i m a r y key a ut o _ i n c r e m e nt c o m m e nt 'ID ',
n a m e v a r c h a r ( 1 0 0) c o m m e nt '姓名 ',
a g e ti ny i n t u n s ig n e d c o m m e nt '年龄 ',
g e n d e r ti ny i n t u n s ig n e d c o m m e nt '性别, 1:男, 2:女 ',
ph o n e v a r c h a r ( 1 1) c o m m e nt '手机号 '
) c o m m e nt '用户表 ';
- - 测试数据
i n s e r t i nt o u s e r ( id , n a m e , a g e , g e n d e r, ph o n e ) VA LU ES ( n u ll , '白眉鹰 王 ', 5 5 , '1 ', '18800000000 ') ;
i n s e r t i nt o u s e r ( id , n a m e , a g e , g e n d e r, ph o n e ) VA LU ES ( n u ll , '金毛狮 王 ', 4 5 , '1 ', '18800000001 ') ;
i n s e r t i nt o u s e r ( id , n a m e , a g e , g e n d e r, ph o n e ) VA LU ES ( n u ll , '青翼蝠 王 ', 3 8 , '1 ', '18800000002 ') ;
i n s e r t i nt o u s e r ( id , n a m e , a g e , g e n d e r, ph o n e ) VA LU ES ( n u ll , '紫衫龙 王 ', 4 2 , '2 ', '18800000003 ') ;
i n s e r t i nt o u s e r ( id , n a m e , a g e , g e n d e r, ph o n e ) VA LU ES ( n u ll , '光明左 使 ', 3 7 , '1 ', '18800000004 ') ;
i n s e r t i nt o u s e r ( id , n a m e , a g e , g e n d e r, ph o n e ) VA LU ES ( n u ll , '光明右 使 ', 4 8 , '1 ', '18800000005 ') ;
实 体 类
实 体 类 的 属 性 名 与 表 中 的 字 段 名 一 一 对 应 。
p u bli c c l a s s U s e r {
p r iv at e I nt e g e r id; //id(主键)
p r iv at e St r i n g n a m e ; //姓名
p r iv at e Sh o r t a g e ; //年龄
p r iv at e Sh o r t g e n d e r ; //性别
p r iv at e St r i n g ph o n e ; //手机号
//省略GET, SET方法
}
1 . 2 . 2 配 置 Mybat is
在 之 前 使 用 图 形 化 客 户 端 工 具 , 连接M y SQL 数据 库 时 , 需 要配置:
连接数据库的四大参数:
M y SQL 驱 动类
登 录 名
密码
数据 库 连接 字 符 串
基 于 上 述 分 析 , 在 My bat i s 中 要 连 接 数 据 库 , 同 样 也 需 要 以 上 4 个 参 数 配 置 。
在 s p ri n g bo ot 项 目 中 , 可 以 编 写 a pplicati o n . p ro p e r ti e s 文 件 , 配 置 数 据 库 连 接 信 息 。 我 们 要 连 接 数 据 库 , 就 需 要 配 置 数 据 库 连 接 的 基 本 信 息 , 包 括 : d r iv e r - c la s s -
n a m e 、 u r l 、 u s e r n a m e , pa s sw o rd 。
在入门程序中 , 大家可以直接这么配置 , 后面会介绍什么是驱动。
a ppli cati o n . p ro p e r ti e s :
#驱动类名称
s p r i n g . d at a s o u r c e . d r iv e r - c l a s s - n a m e = c o m . my s ql. cj.jd b c . D r iv e r
#数据库连接的url
s p r i n g . d at a s o u r c e . u r l =jd b c : my s ql : / / l o c a l h o st : 3 3 0 6/ my b at i s
#连接数据库的用户名
s p r i n g . d at a s o u r c e . u s e r n a m e = r o ot
#连接数据库的密码
s p r i n g . d at a s o u r c e . p a s sw o r d = 1 2 3 4
上述的配置 , 可以直接复制过去 , 不要敲错了 。 全部都是
s p r i n g . data so u r ce . xxxx 开 头。
1 . 2 . 3 编 写 SQL 语 句
在 创 建 出 来 的s p ri n g bo ot 工 程 中 , 在 引 导 类 所 在 包 下 , 在 创 建 一 个 包 m a pp e r 。 在
m a pp e r包 下 创 建 一 个 接 口 U s e r Ma pp e r , 这 是 一 个 持 久 层 接 口 ( My bat i s 的 持 久 层 接 口 规 范 一 般 都 叫 Xxx Ma pp e r) 。
U s e r Ma pp e r :
i m p o r t c o m . it h e i m a . p oj o . U s e r ;
i m p o r t o r g . a p a c h e .i b at i s . a n n ot ati o n s . M a pp e r ;
i m p o r t o r g . a p a c h e .i b at i s . a n n ot ati o n s . S e l e ct ;
i m p o r t j av a . util. Li st ;
@ M a pp e r
p u bli c i nt e r f a c e U s e r M a pp e r {
//查询所有用户数据
@ S e l e ct ( "select id, name, age, gender, phone from user ")
p u bli c Li st < U s e r > li st ( ) ;
}
@ Ma p p e r 注解 : 表 示 是m y bat is 中 的Ma p p e r 接 口
程序运 行 时: 框 架会 自 动 生 成接 口 的 实 现类对 象 ( 代 理对 象 ) , 并 给 交 S p ri n g 的 IOC 容器 管 理
@ S elect 注解 : 代表 的 就 是 select 查询 , 用 于 书 写 select 查询语 句
1 . 2 . 4 单 元 测 试
在 创 建 出 来 的 Sp ri n g B o ot 工 程 中 , 在 s rc 下 的 te st 目 录 下 , 已 经 自 动 帮 我 们 创 建 好 了 测 试
类 , 并 且 在 测 试 类 上 已 经 添 加 了 注 解 @Sp ri n g B o ot Te st , 代 表 该 测 试 类 已 经 与 Sp r i n g B o ot 整 合 。
该 测 试 类 在 运 行 时 , 会 自 动 通 过 引 导 类 加 载 Sp ri n g 的 环 境 ( IOC 容 器 ) 。 我 们 要 测 试 那 个 b ea n对 象 , 就 可 以 直 接 通 过 @A uto wi re d 注 解 直 接 将 其 注 入 进 行 , 然 后 就 可 以 测 试 了 。
测试类代码如下 :
@ Sp r i n g B o ot Te st
p u bli c c l a s s My b at i s Q u i c k st a r t Appli c ati o n Te st s {
@ A ut o wi r e d
p r iv at e U s e r M a pp e r u s e r M a pp e r ;
@ Te st
p u bli c v o id t e st Li st ( ) {
Li st < U s e r > u s e r Li st = u s e r M a pp e r . li st ( ) ;
f o r ( U s e r u s e r : u s e r Li st ) {
Sy st e m . o ut . p r i nt l n ( u s e r ) ;
}
}
}
运行结果:
U s e r { id = 1 , n a m e = ' 白 眉 鹰 王 ' , a g e = 5 5 , g e n d e r = 1 , ph o n e = ' 1 8 8 0 0 0 0 0 0 0 0 ' } U s e r { id = 2 , n a m e = ' 金 毛 狮 王 ' , a g e = 4 5 , g e n d e r = 1 , ph o n e = ' 1 8 8 0 0 0 0 0 0 0 1 ' } U s e r { id = 3 , n a m e = ' 青 翼 蝠 王 ' , a g e = 3 8 , g e n d e r = 1 , ph o n e = ' 1 8 8 0 0 0 0 0 0 0 2 ' } U s e r { id = 4 , n a m e = ' 紫 衫 龙 王 ' , a g e = 4 2 , g e n d e r = 2 , ph o n e = ' 1 8 8 0 0 0 0 0 0 0 3 ' } U s e r { id = 5 , n a m e = ' 光 明 左 使 ' , a g e = 3 7 , g e n d e r = 1 , ph o n e = ' 1 8 8 0 0 0 0 0 0 0 4 ' } U s e r { id = 6 , n a m e = ' 光 明 右 使 ' , a g e = 4 8 , g e n d e r = 1 , ph o n e = ' 1 8 8 0 0 0 0 0 0 0 5 ' }
1 . 3 解 决 SQL 警 告 与 提 示
默 认 我 们 在 U s e r Ma pp e r接 口 上 加 的 @S e l e ct 注 解 中 编 写 SQL 语 句 是 没 有 提 示 的 。 如 果 想 让 id ea给 我 们 提 示 对 应 的 SQL 语 句 , 我 们 需 要 在 IDEA 中 配 置 与 MySQL 数 据 库 的 链 接 。
默 认 我 们 在 U s e r Ma pp e r接 口 上 的 @S e l e ct 注 解 中 编 写 SQL 语 句 是 没 有 提 示 的 。 如 果 想 让 id ea给 出 提 示 , 可 以 做 如 下 配 置 :
配 置 完 成 之 后 , 发 现 SQL 语 句 中 的 关 键 字 有 提 示 了 , 但 还 存 在 不 识 别 表 名 ( 列 名 ) 的 情 况 :
产 生 原 因: I dea 和 数据 库 没 有 建立 连接 , 不 识 别表信 息
解 决 方 案 : 在 I dea 中配置M y SQL 数据 库 连接
在配置 的 时 候 指 定 连接那个 数据 库 , 如 上 图所 示 连接 的 就 是m y bat is 数据 库。
2 . JDBC介绍(了解)
2 . 1 介 绍
通 过 My bat i s 的 快 速 入 门 , 我 们 明 白 了 , 通 过 My bat i s 可 以 很 方 便 的 进 行 数 据 库 的 访 问 操 作 。 但 是 大 家 要 明 白 , 其 实java语 言 操 作 数 据 库 呢 , 只 能 通 过 一 种 方 式 : 使 用 s u n公 司 提 供 的 JD BC 规 范 。
M y bat is 框 架 , 就 是对 原 始 的JD BC 程序 的封装。
那 到 底 什 么 是 JD BC 呢 , 接 下 来 , 我 们 就 来 介 绍 一 下 。
JD BC : ( Java Data Ba s e C o n n e ctiv ity ) , 就 是 使 用 Java语 言 操 作 关 系 型 数 据 库 的 一
套 API 。
本质:
s u n 公 司 官 方 定 义 的 一 套操 作所 有 关 系 型 数据 库 的 规 范 , 即接 口。
各个 数据 库 厂 商 去 实 现 这 套接 口 , 提供 数据 库 驱 动 ja r 包。
我们 可 以 使 用 这 套接 口 ( JD BC ) 编程 , 真 正执 行 的代码 是 驱 动 ja r 包 中 的 实 现类。
2 . 2 代 码
下 面 我 们 看 看 原 始 的 JD BC 程 序 是 如 何 操 作 数 据 库 的 。 操 作 步 骤 如 下 :
1 . 注 册 驱 动
2 . 获 取 连 接 对 象
3 . 执 行 SQL 语 句 , 返 回 执 行 结 果
4 . 处 理 执 行 结 果
5 . 释 放 资 源
在p om . xml 文件 中 已 引入M y SQL 驱 动 依赖 , 我们 直接 编 写JD BC 代码 即 可
JD BC 具 体 代 码 实 现 :
i m p o r t i m p o r t i m p o r t i m p o r t i m p o r t i m p o r t i m p o r t i m p o r t | c o m . it h e i m a . p oj o . U s e r ; o r g .j u n it .j u pit e r . a pi. Te st ; j av a . s ql. C o n n e cti o n ; j av a . s ql. D r iv e r M a n a g e r ; j av a . s ql. Re s u lt S et ; j av a . s ql. St at e m e nt ; j av a . util. A r r ay Li st ; j av a . util. Li st ; |
p u bli c c l a s s Jd b c Te st {
@ Te st
p u bli c v o id t e st Jd b c ( ) t h r ow s Ex c e pti o n {
//1. 注册驱动
Cl a s s . f o r N a m e ( "com. mysql. cj.jdbc. Driver ") ;
//2. 获取数据库连接
St r i n g u r l = "jdbc:mysql://127. 0. 0. 1:3306/mybatis "; St r i n g u s e r n a m e = "root ";
St r i n g p a s sw o r d = "1234 ";
C o n n e cti o n c o n n e cti o n = D r iv e r M a n a g e r . g et C o n n e cti o n ( u r l , u s e r n a m e , p a s sw o r d ) ;
//3. 执行SQL
St at e m e nt st at e m e nt = c o n n e cti o n . c r e at e St at e m e nt ( ); //操作SQL的对 象
St r i n g s ql = "select id, name, age, gender, phone from user ";
Re s u lt S et r s = st at e m e nt . ex e c ut e Q u e r y ( s ql );//SQL查询结果会封装在 Result Set对象中
Li st < U s e r > u s e r Li st = n ew A r r ay Li st < > ( );//集合对象(用于存储User对 象)
//4. 处理SQL执行结果
w hil e ( r s . n ex t ( ) ) {
//取出一行记录中id、 name、 age、 gender、 phone下的数据 i n t id = r s . g et I n t ( "id ") ;
St r i n g n a m e = r s . g et St r i n g ( "name ") ;
s h o r t a g e = r s . g et Sh o r t ( "age ") ;
s h o r t g e n d e r = r s . g et Sh o r t ( "gender ") ;
St r i n g ph o n e = r s . g et St r i n g ( "phone ") ;
//把一行记录中的数据,封装到User对象中
U s e r u s e r = n ew U s e r ( id , n a m e , a g e , g e n d e r, ph o n e ) ;
u s e r Li st . a dd ( u s e r ) ;//User对象添加到集合
}
//5. 释放资源
st at e m e nt . c l o s e ( ) ;
c o n n e cti o n . c l o s e ( ) ;
r s . c l o s e ( ) ;
//遍历集合
f o r ( U s e r u s e r : u s e r Li st ) {
Sy st e m . o ut . p r i nt l n ( u s e r ) ;
}
}
}
D r iver Ma n a g e r ( 类 ) : 数据 库 驱 动 管 理类。
作 用:
1 . 注册 驱 动 2 . 创 建 java 代码 和 数据 库 之 间 的 连接 , 即 获 取Co n n ectio n 对 象 |
Co n n ectio n ( 接 口 ) : 建立 数据 库 连接 的对 象
· 作 用: 用 于 建立 java 程序 和 数据 库 之 间 的 连接
S tateme n t ( 接 口 ) : 数据 库操 作对 象 ( 执 行 SQL 语 句 的对 象 ) 。
作 用: 用 于 向 数据 库 发送 s q l 语 句
R es u lt S et ( 接 口 ) : 结 果集对 象( 一 张 虚拟表)
作 用: s q l 查询语 句 的执 行 结 果会封装在R es u lt S et 中
通 过 上 述 代 码 , 我 们 看 到 直 接 基 于 JD BC 程 序 来 操 作 数 据 库 , 代 码 实 现 非 常 繁 琐 , 所 以 在 项 目 开 发 中 , 我 们 很 少 使 用 。 在 项 目 开 发 中 , 通 常 会 使 用 My bat i s 这 类 的 高 级 技 术 来 操 作 数据库 , 从而简化数据库操作 、 提高开发效率 。
2 . 3 问 题 分 析
原 始 的 JD BC 程 序 , 存 在 以 下 几 点 问 题 :
1 . 数 据 库 链 接 的 四 要 素 ( 驱 动 、 链 接 、 用 户 名 、 密 码 ) 全 部 硬 编 码 在java代 码 中
2 . 查 询 结 果 的 解 析 及 封 装 非 常 繁 琐
3 . 每 一 次 查 询 数 据 库 都 需 要 获 取 连 接 , 操 作 完 毕 后 释 放 连 接 , 资 源 浪 费 , 性 能 降 低
2 . 4 技 术 对 比
分 析 了 JD BC 的 缺 点 之 后 , 我 们 再 来 看 一 下 在my bat i s 中 , 是 如 何 解 决 这 些 问 题 的 :
1 . 数 据 库 连 接 四 要 素 ( 驱 动 、 链 接 、 用 户 名 、 密 码 ) , 都 配 置 在s p ri n g bo ot 默 认 的 配 置 文 件 a ppli cati o n . p ro p e r ti e s 中 2 . 查 询 结 果 的 解 析 及 封 装 , 由 my bat i s 自 动 完 成 映 射 封 装 , 我 们 无 需 关 注 3 . 在 my bat i s 中 使 用 了 数 据 库 连 接 池 技 术 , 从 而 避 免 了 频 繁 的 创 建 连 接 、 销 毁 连 接 而 带 来的资源浪费 。 |
使 用 S p r i n g B oot + M y bat is 的 方 式操 作 数据 库 , 能够 提 升 开 发 效 率 、 降低 资源 浪 费
而 对 于 My bat i s 来 说 , 我 们 在 开 发 持 久 层 程 序 操 作 数 据 库 时 , 需 要 重 点 关 注 以 下 两 个 方 面 :
1 . a ppli cati o n . p ro p e r ti e s #驱动类名称 s p r i n g . d at a s o u r c e . d r iv e r - c l a s s - n a m e = c o m . my s ql. cj.jd b c . D r iv e r #数据库连接的url s p r i n g . d at a s o u r c e . u r l =jd b c : my s ql : / / l o c a l h o st : 3 3 0 6/ my b at i s #连接数据库的用户名 s p r i n g . d at a s o u r c e . u s e r n a m e = r o ot #连接数据库的密码 s p r i n g . d at a s o u r c e . p a s sw o r d = 1 2 3 4 |
2 . Ma pp e r接 口 (编 写 SQL 语 句 ) @ M a pp e r p u bli c i nt e r f a c e U s e r M a pp e r { @ S e l e ct ( "select id, name, age, gender, phone from user ") p u bli c Li st < U s e r > li st ( ) ; } |
3 . 数据库连接池
在 前 面 我 们 所 讲 解 的my bat i s 中 , 使 用 了 数 据 库 连 接 池 技 术 , 避 免 频 繁 的 创 建 连 接 、 销 毁 连接而带来的资源浪费 。
下面我们就具体的了解下数据库连接池 。
3 . 1 介 绍
没有使用数据库连接池:
客 户 端执 行 SQL 语 句: 要 先创 建 一个 新 的 连接对 象 , 然 后执 行 SQL 语 句 , SQL 语 句 执 行 后 又 需 要 关 闭 连接对 象 从 而释放 资源 , 每 次执 行 SQL 时 都 需 要创 建 连接 、 销 毁链接 , 这种频繁的重复创建销毁的过程是比较耗费计算机的性能。
数 据 库 连 接 池 是 个 容 器 , 负 责 分 配 、 管 理 数 据 库 连 接 (C o n n e cti o n)
程 序 在 启 动 时 , 会 在 数 据 库 连 接 池 ( 容 器 ) 中 , 创 建 一 定 数 量 的 C o n n e cti o n对 象
允许应用程序重复使用一个现有的数据库连接 , 而不是再重新建立一个
客 户 端 在 执 行 SQL 时 , 先 从 连 接 池 中 获 取 一 个 C o n n e cti o n对 象 , 然 后 在 执 行 SQL 语 句 , SQL 语 句 执 行 完 之 后 , 释 放 C o n n e cti o n 时 就 会 把 C o n n e cti o n对 象 归 还 给 连 接 池 ( C o n n e cti o n对 象 可 以 复 用 )
释放空闲时间超过最大空闲时间的连接 , 来避免因为没有释放连接而引起的数据库连接遗 漏
客 户 端 获 取 到 C o n n e cti o n对 象 了 , 但 是 C o n n e cti o n对 象 并 没 有 去 访 问 数 据 库 ( 处 于 空 闲 ) , 数 据 库 连 接 池 发 现 C o n n e cti o n对 象 的 空 闲 时 间 > 连 接 池 中 预 设 的 最 大 空 闲
时间 , 此时数据库连接池就会自动释放掉这个连接对象
数据库连接池的好处 :
1 . 资 源 重 用 2 . 提 升 系 统 响 应 速 度 3 . 避 免 数 据 库 连 接 遗 漏 |
| 3 . 2 产 品
要怎么样实现数据库连接池呢 ?
· 官 方 ( s u n) 提 供 了 数 据 库 连 接 池 标 准 (java x . s ql. Data S o u rc e接 口 )
○ 功 能 : 获 取 连 接
p u bli c C o n n e cti o n g et C o n n e cti o n ( ) t h r ow s SQL Ex c e pti o n ;
○ 第 三 方 组 织 必 须 按 照 Data S o u rc e接 口 实 现
常见的数据库连接池 :
C 3 P 0
D B C P
· D r u id
· Hika r i ( s p r i n g b o ot 默 认 )
现 在 使 用 更 多 的 是 : Hika r i 、 D r uid (性 能 更 优 越 )
· Hika r i (追 光 者 ) [ 默 认 的 连 接 池 ]
· D r uid (德 鲁 伊 )
D r uid 连 接 池 是 阿 里 巴 巴 开 源 的 数 据 库 连 接 池 项 目
○ 功 能 强 大 , 性 能 优 秀 , 是 Java语 言 最 好 的 数 据 库 连 接 池 之 一
如 果 我 们 想 把 默 认 的 数 据 库 连 接 池 切 换 为 D r uid 数 据 库 连 接 池 , 只 需 要 完 成 以 下 两 步 操 作 即可 :
1 . 在 p o m . x m l 文 件 中 引 入 依 赖
< d e p e nd e n cy >
<!- - Druid连接池依赖 - - >
< g r o u p Id > c o m . a li b a b a </ g r o u p Id >
< a r tifa ct Id > d r u id - s p r i n g - b o ot - st a r t e r </ a r tifa ct Id >
< v e r s i o n > 1 . 2 . 8 </ v e r s i o n >
< / de p e nd e n cy >
2 . 在 a pplicati o n . p ro p e r ti e s 中 引 入 数 据 库 连 接 配 置
方式1 :
s p r i n g . d at a s o u r c e . d r u id. d r iv e r - c l a s s - n a m e = c o m . my s ql. cj.jd b c . D r iv e r s p r i n g . d at a s o u r c e . d r u id. u r l =jd b c : my s ql : / / l o c a l h o st : 3 3 0 6/ my b at i s
s p r i n g . d at a s o u r c e . d r u id. u s e r n a m e = r o ot
s p r i n g . d at a s o u r c e . d r u id. p a s sw o r d = 1 2 3 4
方式2 :
s p r i n g . d at a s o u r c e . d r iv e r - c l a s s - n a m e = c o m . my s ql. cj.jd b c . D r iv e r s p r i n g . d at a s o u r c e . u r l =jd b c : my s ql : / / l o c a l h o st : 3 3 0 6/ my b at i s
s p r i n g . d at a s o u r c e . u s e r n a m e = r o ot
s p r i n g . d at a s o u r c e . p a s sw o r d = 1 2 3 4
4 . lombok
4 . 1 介 绍
L o m b o k 是 一 个 实 用 的 Java类 库 , 可 以 通 过 简 单 的 注 解 来 简 化 和 消 除 一 些 必 须 有 但 显 得 很 臃 肿 的 Java代 码 。
通 过注解 的 形 式 自 动 生 成 构造器 、 g et te r / sette r 、 e q u als 、 hash code、 to S t r i n g 等 方 法 , 并 可 以 自 动 化 生 成 日 志变量 , 简 化 java 开 发 、 提 高 效 率。
注解 | 作用 |
@ G et te r/ @ S ette r | 为 所 有 的 属 性 提 供 g et/ s et 方 法 |
@ To St r i n g | 会 给 类 自 动 生 成 易 阅 读 的 to St ri n g 方 法 |
@ Eq u a l s A nd Ha s h C od e | 根 据 类 所 拥 有 的 非 静 态 字 段 自 动 重 写 e q u al s 方 法 和 ha s h C od e 方 法 |
@ Data | 提 供 了 更 综 合 的 生 成 代 码 功 能 (@G et te r + @ S ette r + @ To St r i n g + @ Eq u a l s A nd Ha s h C od e ) |
@ N o A rg s C o n st r u cto r | 为实体类生成无参的构造器方法 |
@ Al lA rg s C o n st r u cto r | 为 实 体 类 生 成 除 了 stati c 修 饰 的 字 段 之 外 带 有 各 参 数 的 构造器方法 。 |
4 . 2 使 用
第 1 步 : 在 p o m . x m l 文 件 中 引 入 依 赖
<!- - 在spring boot的父工程中, 已经集成了lombok并指定了版本号,故当前引入依赖时 不需要指定version - - >
< d e p e nd e n cy >
< g r o u p Id > o r g . p r oj e ct l o m b o k < / g r o u p Id >
< a r tifa ct Id > l o m b o k < / a r tifa ct Id >
< / de p e nd e n cy >
第2步 : 在实体类上添加注解
i m p o r t l o m b o k . D at a ;
@ D at a
p u bli c c l a s s U s e r {
p r iv at e I nt e g e r id ;
p r iv at e St r i n g n a m e ;
p r iv at e Sh o r t a g e ;
p r iv at e Sh o r t g e n d e r ;
p r iv at e St r i n g ph o n e ;
}
在 实体类 上 添加 了@ Data 注解 , 那 么 这个类在 编 译 时 期 , 就会 生 成
g et te r / sette r 、 e q u als 、 hash code 、 to S t r i n g 等 方 法。
说 明 : @ Data注 解 中 不 包 含 全 参 构 造 方 法 , 通 常 在 实 体 类 上 , 还 会 添 加 上 : 全 参 构 造 、 无 参构造
i m p o r t l o m b o k . D at a ;
@ D at a //get ter方法、 setter方法、 to String方法、 hashCode方法、 equals方法
@ N o A r g s C o n st r u ct o r //无参构造
@ Al lA r g s C o n st r u ct o r//全参构造
p u bli c c l a s s U s e r {
p r iv at e I nt e g e r id ;
p r iv at e St r i n g n a m e ;
p r iv at e Sh o r t a g e ;
p r iv at e Sh o r t g e n d e r ;
p r iv at e St r i n g ph o n e ;
}
Lombok的注意事项 :
· L o m b o k 会 在 编 译 时 , 会 自 动 生 成 对 应 的java代 码
· 在 使 用 l o m b o k 时 , 还 需 要 安 装 一 个 l o m b o k 的 插 件 (新 版 本 的 IDEA 中 自 带 )
标签:bat,入门,st,SQL,Mybatis,iv,nt,id From: https://www.cnblogs.com/yccx1/p/17739819.html