Mybatis
Mybatis介绍
Mybatis在内部封装了JDBC代码,简化了用户操作步骤 Mybatis是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射,动态SQL,延迟加载和缓存等特性,
持久化:将内存中的数据储存到磁盘当中 持久层:利用Mybatis操作代码,实现数据的持久化 高级映射:对象-表,属性-字段
关于lombok常用注解
@Data lombok动态生成get/set/toString/equals/hashcode等方法
@Accessors 控制是否开启链式加载结构
@NoArgsConstructor 生成无参构造方法
@AllArgsConstructor 生成全参构造方法
配置applicayion.yml文件
#1.配置端口号 注意缩进!!!!!
server:
port: 8090
#2.配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
#yml文件 0不解析 如果字母以0开头则引号包裹
#password: "0123456"
password: root
#3.配置Mybatis
mybatis:
#定义别名包
type-aliases-package: com.jt.pojo
#将所有的映射文件全部加载
mapper-locations: classpath:/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
#4.打印Sql com.jt.mapper下的Sql日志
logging:
level:
com.jt.mapper: debug
Mapper注解详细介绍
1.将接口交给Mybatis管理,之后将mybatis交给Spring管理
2.动态代理机制 为接口创建代理对象 Map<userMapper,代理对象>
3.接口和实现类,为什么只有接口没有实现类! 所有的Sql写到映射文件中
@MapperScan注解说明
关于Mapper转义字符
转义字符:
大于 > >
小于 < <
与号 & &
万能转义标签:</![CDATA[内容]]>使用时去掉斜杠
xml流文件 报文 更加安全 解析复杂\
@Param注解用法
Mybatis中不允许直接传递多个数据,如果是多值需要转化为单值.
1.将多值数据转化为POJO对象.
2.将多值数据转化为Map集合. Mybatis为转化Map集合提供了注解@Param
动态SQL
1.if-where标签
. if标签: 如果判断为真 则拼接sql 2. where标签: 去除where后边多余1个and/or
2.set标签
set标签在修改操作中去除1个多余的,号
3.动态Sql-choose、when、otherwise
说明: 如果不想使用所有的条件可以使用choose 类似于java中的switch 语法
如果name有值,则按照name查询, if
如果age有值,则按照age查询, else-if
否则按照sex查询数据. else
4.foreach标签
Mybatis集合操作
1."集合"的类型: array/list/Map集合
2. 目的:从集合中获取其中的数据. 一个一个取值
3. 方案: Mybatis提供了循环遍历的方式
4. 语法:
4.1collection需要遍历的数据 数组: collection="array" List集合: collection="list" Map<key,array/list>集合: collection="map中的key"
4.2 open/close 开始和接收标签
4.3 item: 定义取值的变量 通过#{xx}获取数据
4.4 separator: 分割符\
一对一,一对多
1.autoMapping="true" 如果字段名称和属性名称一致,则自动映射
2.association 一对一对象
3.javaType 固定搭配 封装对象的类型
4.collection 一对多
5.ofType 一对多的属性类型
缓存机制
1.一级缓存
- 1.Mybatis 默认条件下一级缓存默认开启的.
- 2.执行重复操作时,Mybatis一级缓存生效,查询一次数据库.
- 3.如果查询期间执行更新操作,则一级缓存清空.保证数据都是新的
2.二级缓存 都是默认的
-
- 二级缓存默认是开启的.
-
- 二级缓存需要标记. cache标签
-
- 如果需要使用二级缓存,则应该关闭SqlSession
-
- 多线程条件下如果需要实现数据共享,则要求数据必须序列化! 考点!!!
全局异常处理机制
package com.jt.aop;
import com.jt.vo.SysResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//Spring专门为解决异常问题,开发了针对Controller层的注解
//注解的核心就是 Spring-AOP
@RestControllerAdvice
public class SystemException {
/**
* 拦截什么异常: 运行时异常
* 返回值: SysResult对象 --201
* @ExceptionHandler: 切入点表达式
*/
@ExceptionHandler(RuntimeException.class)
public SysResult fail(Exception e){
e.printStackTrace();
return SysResult.fail();
}
}