首页 > 其他分享 >Mybatis入门

Mybatis入门

时间:2023-10-02 11:44:50浏览次数:30  
标签:bat 入门 st SQL Mybatis iv nt id

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 数 据 库 连 接 池 , 只 需 要 完 成 以 下 两 步 操 作 即可 :

参考 官 方地 址 : htt p s : / / g it h u b . com / ali baba / d r u id / t r ee / maste r / d r u id - s p r i n g - boot - sta r te r

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

相关文章

  • 01. Kubernetes基础入门
    目录1、前言2、Kubernetes介绍2.1、什么是Kubernetes2.2、主要功能2.3、与Docker的关系2.4、Kubernetes集群架构体系3、Kubernetes组件3.1、核心组件3.2、附加组件4、Kubernetes对象4.1、对象管理4.2、命名空间4.3、标签1、前言Docker容器技术将应用及其依赖打包到镜像中,从而很好......
  • 【C语言入门】第一天
    [例题1]输入两个正整数a和b,输出a+b的值。其中a,b<10000.#include<stdio.h>intmain(){inta,b;scanf("%d%d",&a,&b);printf("%d",(a+b));return0;}[例题2]先输入一个t(t<100),然后输入t组数据。对于每组数据,输入两个整数a和b,输出a+b值......
  • 《CTFshow-Web入门》10. Web 91~110
    @目录索引web91题解总结web92题解总结web93题解web94题解web95题解web96题解web97题解web98题解web99题解总结web100题解web101题解web102题解web103题解web104题解web105题解总结web106题解web107题解web108题解web109题解web110题解ctf-web入门索引web91:PHP特性之pre......
  • TypeScript入门到精通——TypeScript语言基础
    TypeScript语言基础 TypeScript是JavaScript的超集。更确切的说,TypeScript是ECMAScript2015(ES6)的超集。 TypeScript语言支持ECMAScript2015规范中定义的所有特性,例如类和模块等。JavaScript程序本身就是合法的TypeScript程序。JavaScript语言中的所有语法均......
  • mybatis中找不到字段问题org.apache.ibatis.binding.BindingException: Parameter ‘i
    如果参数只有一个对象,则无须显式写对象名;否则需要。使用EasyCodeMybatisCodeHelper生成代码,调用其中的queryAllByLimit时报错了,说找不到参数“id"。List<Power>queryAllByLimit(Powerpower,@Param("pageable")Pageablepageable);<!--查询指定行数据--><selectid="queryAllB......
  • SSM(Spring+SpringMVC+MyBatis)框架集成
    引言进行SSM(Spring+SpringMVC+MyBatis)集成的主要原因是为了提高开发效率和代码可维护性。SSM是一套非常流行的JavaWeb开发框架,它集成了Spring框架、SpringMVC框架和MyBatis框架,各自发挥优势,形成了一个完整的开发框架。首先,使用Spring框架可以实现组件的解耦和依赖注入,通过配置......
  • Spring与MyBatis框架集成
    引言尽管Spring本身提供了SpringJDBC作为对JDBC的抽象和简化,但与MyBatis集成可以提供更多的功能和灵活性。MyBatis是一款优秀的持久层框架,它通过XML或注解的方式将SQL语句与Java方法进行绑定,提供了更直观和便捷的方式来管理数据库操作。集成Spring和MyBatis可以发挥两者的优势,Sp......
  • TypeScript入门到精通——安装 TypeScript
    安装TypeScript一、安装TypeScript安装TypeScript语言最简单的方式是使用npm工具。如果你的计算机中还没有安装Node.js,则需要到Node.js的官网(https://nodejs.org/zh-cn/download)上下载LTS版本的安装包并安装(Windows:https://nodejs.org/dist/v18.18.0/node-v18.18.0-......
  • TypeScript入门到精通——什么是 TypeScript ?
    什么是TypeScript?https://en.wikipedia.org/wiki/TypeScript一、介绍TypeScript TypeScriptisafreeandopen-sourcehigh-levelprogramminglanguagedevelopedbyMicrosoft thataddsstatictypingwithoptionaltype annotationstoJavaScript.Itisdesig......
  • springboot整合mybatisPlus全技巧(1-整合过程)
    本文基于springboot整合mybatisPlus的各种文章早已烂大街的背景下,根据整合过程,MP开发中的常见技巧,MP开发中遇到的各种坑三个方面,来对这一专题做一个全面且实用的总结,基本上只要你吃透这篇文章,开发中关于mybatisplus你能遇到的问题都能迎刃而解了。整合过程网上对于springboot......