1.1 Mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射
Mysql入门实现步骤:
1.编辑mybatis-config.xml核心配置文件
1.1执行数据源配置
2.编辑POJO实体对象.要求与数据库表中的字段一一对应
3.编辑Mapper接口. 添加接口方法
4.编辑接口的实现类(配置文件方式) 要求namespace id resultType
5.mybatis加载指定的mapper映射文件
6.创建SqlSessionFactory工厂对象
7.获取SqlSession,开启数据库链接
8.获取接口对象(代理对象)
9.调用接口方法,获取返回值结果
10.关闭sqlSession链接.
2.1 ORM思想
对象关系映射,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单来说就是利用对象操作数据库
1. 对象应该与数据库中的表一一映射.
2. 对象中的属性应该与表中的字段一一映射.
3. 其中的映射应该由程序自动完成.无需人为干预.
JDBC的优缺点
弊端:
1. 无论如何执行都必须获取数据库链接. 链接池 c3p0 druid HK链接池
2. 操作sql语句时,步骤繁琐. 不便于学习记忆.
3. 资源必须手动关闭.
优点:
操作数据库最快的方式就是JDBC. 协议 TCP
mybaties
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。(mybatis在内部将JDBC封装).
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
知识整理:
1.持久化 : 计算机在计算时,数据都在内存中.如果断电则数据清空,所以要求将内存数据保存到磁盘中. 概念.
2.持久层: 程序通过Dao/Mapper 与数据库进行交互的层级代码 (Controller层 Service层 Dao/Mapper层) 具体操作.
小结: Mybatis是一个优秀的持久层框架,基于ORM设计思想,实现了以对象的方式操作数据库.
了解: Mybatis的ORM并不完全,只完成了结果集映射,但是Sql需要自己手写.所以也称之为半自动化的ORM映射框架.
2. Mybatis框架总结
2.1 ORM思想
概括: 利用对象的方式封装数据库
核心规则:
对象与表一一映射.
对象的属性与表中的字段一一映射.
2.2 Mybaits框架介绍
小结: Mybatis是一个优秀的持久层框架,基于ORM设计思想,实现了以对象的方式操作数据库.
2.3 Mybaits使用步骤
2.3.1 导入jar包
课堂使用的是springboot整合mybatis的版本.但是使用其中的依赖包 3.5.7的版本.
2). mysql的驱动版本 mysql:mysql-connector-java:8.0.22
3). 驱动的配置: com.mysql.cj.jdbc.Driver
4). 高版本应该使用高版本数据库
2.3.2 编辑核心配置文件
数据库环境的配置
Mapper接口与xml映射文件的绑定关系.
2.3.3 创建接口/xml映射文件
说明: 接口与xml映射文件 一对一映射.
2.3.3 入门案例步骤
指定mybatis-config.xml的路径
读取指定的核心配置文件.
通过SelSessionFactoryBuilder.buid方法创建SqlSessionFactory.
获取SqlSession
获取Mapper的接口
从mapper接口文件中获取业务数据.
调用xml文件的Sql语句实现数据获取.
mybatis自动封装为对象返回 交给用户处理.
2.4 简化mybatis操作
注解: @BeforeEach 在执行@Test注解之前执行.
2.5 Mybatis的参数封装
1. 封装为实体对象 user对象
2. 更为常用的方式 Map集合
3. 如果传递的数据有多个,则可以使用注解@Param("sex") String sex 封装为Map.
2.6 #号 $符用法
使用#{} 获取数据时,默认有预编译的效果.防止sql注入攻击.
mybatis使用#{}获取数据时,默认为数据添加一对""号.
当以字段名称为参数时,一般使用${},但是这样的sql慎用. 可能出现sql注入攻击问题.
小结: 一般条件下能用#{}号,不用${}
1
2.7 mybatis转义字符
xml文件中的转义字符.
> > 大于
< < 小于
& & 号
说明:如果sql中有大量的转义字符 建议使用转义标签体
语法: <![CDATA[ xxx内容 报文 ]]>
2.8 Mybatis集合写法
array
list
map
<!--
需求: 批量删除多个数据
难点: 如果使用#{集合}获取的是集合对象的整体.删除无效.
思路: 将数组拆分为单个数据. 可以通过遍历的方式操作
语法: mybatis为了参数取值方便,特意封装了遍历的标签 foreach
关于标签参数说明:
<foreach collection=""></foreach>
1.如果传递的参数是数组, 则collection="array"
2.如果传递的参数是list集合, 则collection="list"
3.如果传递的参数是Map集合, 则collection="map中的key"
标签属性说明:
1.collection 集合的名称
3.open 循环的开始标签
4.close 循环的结束标签
5.index 循环遍历下标 一般不用
6.separator 循环遍历的分割
2.9 mybatis特殊查询
模糊查询: “%” #{属性}"%" 或者 xxxx.setName("%精%")
2.10 Mybatis优化
1.指定具体的类型的别名
2.别名包
3.别名注解 一般不常用
2.11 动态Sql
if-where where去除多余的and / or
set标签 去除多余的,号
choose when otherwise 用法上和java中的switch类型.
2.12 resultMap用法
当结果集中的字段与属性名不一致时使用. 可以使用驼峰映射规则优化.
2.13 关联关系
2.13.1 一对一
逻辑: 一个员工对应一个部门
表示: 在对象中封装其他对象 对一 封装单个对象 对多封装List集合
一对一映射标签:
2.13.2 一对多
2.14 mybatis中的缓存机制
Mybatis的缓存
Mybatis中自身提供了缓存机制,可以极大的提高查询效率.
Mybatis系统中默认定义了两级缓存: 一级缓存 和 二级缓存
Mybatis默认条件下只开启一级缓存, 一级缓存是sqlSession级别的, 在同一个sqlSession中查询数据可以共享数据.
二级缓存默认开启. 二级缓存是SqlSessionFactory级别. 同一个工厂创建多个sqlSession共享数据.
Mybatis 也提供了第三方Cache接口,整合第三方缓存(了解)