Mybatis复习

161 阅读3分钟

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.二级缓存 都是默认的

    1. 二级缓存默认是开启的.
    1. 二级缓存需要标记. cache标签
    1. 如果需要使用二级缓存,则应该关闭SqlSession
    1. 多线程条件下如果需要实现数据共享,则要求数据必须序列化! 考点!!!

全局异常处理机制

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();
    }
}

详细介绍