一、mybatis的关联查询与子查询
1.关联查询
1.1 resultMap规则:
1.如果映射的字段与对象属性一致,则可以省略不写
2.最好保留主键的字段信息 <id/>
3.关联封装中 - - - > 单独封装则使用 association
4.如果遇到关联封装,必须配置全部映射关系 (但是属性名和字段一致)可以自动映射
自动映射 autoMapping = “true”
自动映射的前提条件:关联查询,属性名和字段一致
<association property="在pojo中配置的一对一对象的属性" javaType="指定属性的类型 即 pojo类的路径">
<id property="指定类型的主键属性" column="数据库中的字段"/>
<result column="指定类型的其他属性" property="数据库中的字段"/>
</association>
1.2步骤如下:
2.子查询(一对一)
2.1思路如图:
2.2步骤如下:
3.子查询(一对多)
4.驼峰规则映射
驼峰规则映射:
说明:因为字段名和属性经常不一样,通过驼峰映射,自动映射
全局配置 在核心配置文件中
1.如果开启驼峰命名规则 可以简化赋值过程
<!--Mybatis的核心配置-->
<settings>
<!-- 开启驼峰映射规则 dept_id自动映射到deptId -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
二、mybatis的缓存机制
1.什么是缓存机制?
说明:有效的降低访问服务器的次数,即问过的回答过的答案,存在缓存里,下次再问就不用访问服务器
扩展:
1.mybatis自身缓存:一级缓存/二级缓存
2.Redis缓存(现在主流) 存入了大量的数据,读取10万次/秒,写8.6万次/秒
1.1一级缓存(sql语句执行一次)
概念说明:mybatis默认开启一级缓存,一级缓存可以在**同一个sqlsession(会话)**对象中查询相同的数据,可以实现数据共享的
1.2二级缓存
说明:二级缓存mybatis默认是开启的,但是需要手动标识是否需要缓存,在同一个sqlsessionfactory内部有效,sqlsessionfactory是sqlsession(会话)的爸爸,即一级缓存的上级,范围更广
配置:全局配置和局部配置
二级缓存说明:sqlsession查询数据之后,会把查询后的数据保存到一级缓存中,但不会立即将缓存交给二级缓存sqlsessionfactory。此时作用域还在一级,所以解决办法是:必须将一级缓存执行成功之后,关闭一级缓存(表示会话正常执行用完且关闭)
三、mybatis框架小结
1.orm思想 :
对象关系映射,用于实现不同类型系统的数据库之间的转换
用对象操作数据库–封装对象操作数据库
- 对象与数据库对应–映射
- 对象的属性与表中的字段对应–映射
1.1JDBC弊端 :
巴拉巴拉
1.2JDBC优点 :
操作数据库最快的玩意
2.mybatis是啥:
是基于orm思想的持久层框架,半自动orm
3.mybatis使用步骤:
3.1 导入jar包
课堂使用的是springboot整合mybatis版本,所以在pom.xml 导入俩包,mybatis和JDBC
3.2 mysql的驱动版本
驱动的配置巴拉巴拉 数据库的value是com.mysql.cj.jdbc.Driver (高版本多了个cj)
3.3 高版本数据库要搭载高版本maria
3.4 编辑核心文件
- 数据库环境的配置
- Mapper接口与映射文件的配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>
<!--Mybatis的核心配置-->
<settings>
<!-- 开启驼峰映射规则 dept_id自动映射到deptId -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<!-- package name="指定包路径 配置了包路径,映射对象时会自动拼接" -->
<package name="com.jt.pojo"