springmvc ---- mybaits基础

mybatis

这里只是理论,具体使用会在本人后面的项目中体现

MyBatis:ORM 框架。

ORM:object relation mapping。对象关系映射。
ORM: MyBatis,Hibernate,JPA…

MyBatis:倾向于更加自由的数据库操作,由开发人员自行编写sql,方便sql的优化。更加灵活。缺点:必须掌握sql。

Hibernate:纯面向对象的数据库操作,无须编写sql,直接以面向对象的方式操作数据库,缺点:重量级,性能差,sql难以优化。
推出hql语言。

引入MyBatis,借助于spring引入

  1. 引入依赖。
  2. 在spring的配置文件中,配置mybatis。
  3. .在mapper.xml中配置对象关系映射,以及配置sql。

先在maven的配置文件pom.xml内引入mybatis依赖
在这里插入图片描述
在spring的配置文件applicationContext.xml文件内配置mybatis文件
在这里插入图片描述
在mybatis配置文件内配置mybatis
在这里插入图片描述
配置mybatis的sql语句文件
在这里插入图片描述

mybatis的执行顺序:

1.controller接受前端请求
2.controller将实现交给service层
3.service将实现交给serviceImpl层
4.serviceImpl调用mapper接口
5.当执行数据库操作时,项目就会检查对应依赖是否完整,检查对应配置是否正确
6.配置文件都正确,@Mapper注解 和 @Service注解也正确,都能被扫描到
7.通过mapper接口内的抽象方法名在mabatis的sql语句文件内找到id与抽象方法名一样的sql语句执行
8.结果依次向上返回,最终controller将结果返回或者处理结果返回前端

mybatis参数:

基本数据类型,或封装类型作为参数:在mapper.xml中可直接使用,写任意名称都可
以。
#{id,javaType=java.lang.Integer}
#{id,jdbcType=INTEGER}

使用 Map作参数:
在mapp.xml中指定的属性名即map中的key。

使用注解的场景:@Param。mybatis只有在声明@param注解的情况下,才可以支持多个参数。
1.使用多个参数:需要使用@Param注解,来指定在mapper.xml中的属性名称和方法参数名称之间的对应关系。
2.使用List,或Set,或数组作为参数:也需要使用注解。mybatis默认不支持list、set和数组作为参数。

update、insert、delete无须指定resultType属性。
增删改是相似的。
在不使用@Param注解的情况下,mybatis只支持单个参数,且参数必须是javabean,或者Map,或者基本数据类型。

insert:可以返回自动创建的主键
useGeneratedKeys=“true” keyProperty=“id” keyColumn=“id”

MyBatis的关联查询:

查询多个表的数据,或多个查询结果集的数据。
1.使用表连接:
缺点:当关联字段较多的时候,对原模型有一定的代码侵入,破坏单一职责原则。
2. 一对一关联:
典型的N+1问题。会导致性能下降。
解决方案:使用缓存技术,或懒加载(延迟加载)技术。
3.一对多关联:
colleciton标签。在模型中,使用集合类来实现一对多的关系。
4.多对多关联:
在数据库中,可以通过中间表来实现。相当于双向的两个一对多。
mybatis会自动判断关联对象的加载情况,若已加载,则不再继续进行关联查询。
mybatis中:不存在直接的多对多处理,而是将多对多处理成双向的一对多。

延迟加载与缓存:

避免N+1问题。查询性能下降。解决方案:

  1. 多个ResultMap,根据不同的场景或需要,选择使用不同的ResultMap
  2. 延迟加载(懒加载):将关联的模型数据,延迟到需要的时候再查询加载。
<setting name="lazyLoadingEnabled" value="true" />
<!-- 是否完整加载(不按需加载)。当启用时,对任意延迟属性的访问都会使所有延迟
加载属性同时加载;
反之,每种属性将会按需加载,访问哪一个属性,则加载哪一个属性。默认值为false,
即不完整加载(按需加载),如果值为true,表示完整加载 -->
<setting name="aggressiveLazyLoading" value="false" />

一级缓存和二级缓存:

mybatis支持一级缓存和二级缓存,用以提升查询性能。但,mybatis的主要设计是用于处理对
象关系映射,在缓存方面并不擅长。
一级缓存:SqlSession级别的缓存,每次会话都会进行缓存。相同的查询及参数只会查询一
次。
二级缓存是表级别(查询级别的缓存):当mybatsi判断查询操作名称及参数一致时,则自动优
先从缓存中获取,如果获取不到,再到数据库查询。

开启二级缓存:

1.pom文件中引入mybatis二级缓存的依赖包。
2.开启全局二级缓存开关,表示所有查询都支持二级缓存。
3.在mapper.xml中,声明cache标记,指定二级缓存的实现类。必须。
4.指定哪一个查询,开启二级缓存,使用useCache来指定使用二级缓存,useCache的默认值是
true,表示使用二级缓存。如果设置为false,表示关闭二级缓存。
在mapper.xml中,对于增删改操作,有一个flushCache属性,其值默认为true,表示当进行此
操作后,清空缓存。表示此mapper.xml配置文件中的所有声明了useCache=true的查询缓存都
失效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A little sea pig

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值