目录
MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发;
使用MyBatis 查询所有用户数据的过程
Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码
注解:
引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
编写SQL语句(注解/XML)使用注解的方式编写SQL语句 使用XML映射文件编写SQL语句
使用注解的方式编写SQL语句
1. 编写SQL语句的类 注解
2.测试类 注解
数据库连接池重复使用 一个现有的 数据库连接
预编译 SQL语句
使用XML映射文件编写SQL语句
规范
MyBatisX是一款基于IDEA的快速开发MyBatis 的插件,为效率而生,
使用过程可以通过点击红蓝小鸟实现两个文件之间的切换
动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。
抽取重复的SQL片段
-
MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发;
MyBatis官网 : https://mybatis.org/mybatis-3/zh/index.html
JDBC:Java语言操作关系型数据库的一套 API,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动数据库jar包中的实现类-
使用MyBatis 查询所有用户数据的过程
- 准备工作(创建springboot工程、数据库表user、JavaBean类 User)
简化JavaBean的代码——Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码-
Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码
注意事项:Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea自带)
-
注解:
- 为了方便,系统将常用的注解合并在一起 ——> @Data —>Data
包含的注解
@Getter —> getXxx、@Setter—>setXxx 、@ToString —> tostring()、@EqualsAndHashCode —>equals() + hashcode()
- @NoArgsConstructor —>无参构造 @AllArgsConstructor —>全参构造
- 为了方便,系统将常用的注解合并在一起 ——> @Data —>Data
-
-
-
引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
application.properties文件配置数据库连接信息
-
编写SQL语句(注解/XML)
使用注解的方式编写SQL语句 使用XML映射文件编写SQL语句-
使用注解的方式编写SQL语句
-
1. 编写SQL语句的类 注解
- 类名前——@Mapper
- SQL语句——@Select(查找)、@delect(删除)、@update(修改);
-
2.测试类 注解
- 类名前——@SpringBootTest
告诉程序这个是测试类
- 依赖注入——@Autowired
得到IOC容器中的对应实现类
- 测试方法——@Test
告诉程序这个是测试方法
- 类名前——@SpringBootTest
-
数据库连接池
重复使用 一个现有的 数据库连接- 特点:
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
- 它允许应用程序重复使用 一个现有的 数据库连接,而不是 再重新建立一个
- 释放空闲时间 超过最大空闲时间 的 连接,来避免 因为没有释放连接 而引起的数据库 连接遗漏
- 数据库连接池和普通连接的区别
- 1.普通连接:使用时创建,不用时销毁
- 2.数据库连接池(相当于线程池):使用时,从连接池中获取,用完了再放回连接池; 当用户获得连接,却不使用时,连接池会去检测这个连接,当空闲时间超过最大空闲时间,就会直接释放。
- 优势:资源重用、 提升系统响应速度、 避免数据库连接遗漏。
- 标准接口 :DataSource ,由第三方组织实现此接口——Hikari 、Druid
Hikari (追光者): Springtboot默认使用的数据库连接项目
Druid (德鲁伊): 阿里巴巴开源的数据库连接项目- IDEA中新建Springboot工程,默认使用的是Hikari 数据库连接池,如果要使用Druid,需要切换
- 特点:
-
预编译 SQL语句
- 1. 设置 SQL中的 参数—— #{...}
- 参数占位符——#{...}、concat(#{...})、${...}
常用 #{...} 需要字符串拼接时候使用: concat(#{...}) ${...}:用于参数拼接,但是会存在SQL注入问题,不常用- #{...} : 执行SQL时,会将#{...)替换为?,生成预编译SQL,会自动设置参数值。
使用时机:参数传递,都使用#{...}
- concat(#{...}):执行SQL时,会将#{...)替换为?,concat()方法,将参数输入的值作为字符串和左右拼接到一起
- ${...} : 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。
使用时机:如果对表名、列表进行动态设置时使用,
- #{...} : 执行SQL时,会将#{...)替换为?,生成预编译SQL,会自动设置参数值。
- 如果mapper接口方法形参只有一个普通类型的参数,{#..}里面的属性名可以随便写,如: #{id)、#{value}。
可以在application.properties中,配置“打开mybatis的日志”的代码,并指定输出到控制台,在控制台查看本次数据的转换- 优势:性能更高、更安全(防止SQL注入)
如果不用参数,每一次都需要创建新的删除语句;使用参数只需要创建一次删除语句- 缓存:SQL语法解析检查+优化SQL+编译SQL 三合一
执行过程:
1.执行第一条语句,按顺序依次执行;
2.执行第二条时候,会先检查 缓存 里面是否包含这条语句,
2.1如果包含,直接执行;
2.2如果不包含,再次按顺序依次执行
- SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。
- 缓存:SQL语法解析检查+优化SQL+编译SQL 三合一
- 优势:性能更高、更安全(防止SQL注入)
- 如果mapper接口方法形参 有多个普通类型的 参数,{#..}里面的属性名需要一一对应,一般会封装成一个JavaBean对象,这就需要参数跟JavaBean中的变量名一一对应。
属性值也是针对数据库中数据表的命名进行定义,将带下划线的写成小驼峰形式
- 主键返回——@Options(keyProperty="id",useGeneratedkeys = true);
会自动生成主键值,并赋值给 emp对象的 id变量
- 参数占位符——#{...}、concat(#{...})、${...}
- 2.数据封装——判断JavaBean类中的变量名和数据库是否一致,一致就将数据赋值到数据库(也叫映射)。
这也是为什么要将JavaBean类中的变量和数据库表头变量名一致,但是多个单词语句,在SQL语句通过“_”下划线连接,java中设置为小驼峰模式。所以两个变量名不一样,这就需要在 application.properties配置文件中 开启 mybatis的驼峰命名自动映射开关- 实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装
- 如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装,
- 开启mybatis的驼峰命名自动映射开关a_column —>aCloumn
application.properties文件中:mybatis.configuration.map-underscore-to-camel-case-true
- 1. 设置 SQL中的 参数—— #{...}
-
-
使用XML映射文件编写SQL语句
-
规范
- XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
- XML映射文件的namespace属性为Mapper接口全限定名一致。
- XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
-
MyBatisX是一款基于IDEA的快速开发MyBatis 的插件,为效率而生,
-
使用过程
可以通过点击红蓝小鸟实现两个文件之间的切换- 第一步:在java文件中设置 方法,传递参数,确定返回值
- 第一步:创建同包同名的xml文件。
- 第二步:设置namespace属性
- 第三步:设置sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。
id 设为方法名 list; resultType设置为 方法的返回值——单条记录所封装的类型
-
动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。
- if : 判断条件,成立就会拼接SQL语句
- <where> 标签:子元素有内容情况下,在行首插入 where语句,自动去除 子句的开头 and 或者 or
where 语句 替换成 <where> 标签
- <set> 标签:子元素有内容情况下,在行首插入 set语句,自动省略额外的 符号(例如 “ ,”),用于update 语句中
set语句 替换成 <set> 标签
- <foreach>标签 : 遍历集合。
collection :集合名称; item :遍历出来的元素/项; separator:元素之间的分隔符 open:遍历开始前拼接 close:遍历结束后拼接
-
抽取重复的SQL片段
相当于java中抽取重复的代码定义一个方法一样- <sql>:定义可重用的 SQL片段。
- <include>:通过属性refid,指定包含的sql片段。
-
-
-
- 准备工作(创建springboot工程、数据库表user、JavaBean类 User)
-