09_JavaWeb_Mybatis

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #把SQL语句执行日志打印到控制台;
    map-underscore-to-camel-case: true #开始驼峰式命名

--回顾

三层架构

控制层 SpringMVC解决控制层支持领域问题

业务层 spring解决了业务层领域的问题

持久层 MyBatis解决了持久层领域问题

java中,框架给我们每一层都有一个有效解决方案

MyBatis 是一个半orm映射型框架 Apache下的子项目 另有一个名字叫 IBatis

框架的定义:

半成品的工具,解放生产力

ORM映射型:

O(对象) R(关系) M(映射) 对象关系映射

JDBC(Java DATEBASE CONNECTION):Java操作数据库技术,他是JDK提供的接口,没有提供任何实现,JDBC的实现是由各大数据库厂商实现的

JDBC是操作数据库的唯一技术

JDBC和MyBatis的关联和区别

1.JDBC是操作数据库的唯一技术,所有框架都是基于JDBC实现的

2.JDBC操作麻烦,但是性能更高(因为SQL语句,封装都是自己手动),Mybatis他虽然SQL语句自己写,但是相 较于JDBC来说。性能还是会更慢一点,操作更简单 串

----数据库连接池

切换数据库连接池:

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid-spring-boot-starter</artifactId>
     <version>1.2.8</version>
</dependency>

lombok

注解

使用前需要依赖引入:

<!--Lombok引入-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

错误示例!

namespace:命名空间 必须是mapper接口的全限定名
parameterType :表示参数类型
useGeneratedKeys : 是否得到主键id的值 true 是  [默认]false不
keyColumn="id"  : 列
keyProperty="id":属性
keyColumn="id" keyProperty="id" 把keyColumn id的值 赋给keyProperty id

在使用MyBatisXML方式的时候parameterType可以省略


Mybatis的使用步骤:

一、导入Mybatis的依赖包

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

二、导入MySQL的依赖包

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

编写连接数据库的四大要素

MyBatis命名规范

dao包 以mapper命名包

接口以xxxxMapper命名

给接口加上@Mapper注解

@MyBatis注解的作用:告诉MyBatis,接口的实现类是由Mybatis来实现,并且myBatis创建的实现类,交给Spring管控

yml的配置

引用SQL


# 和 $ 取值区别

预编译执行:

SQL语句执行之前,数据库要做很多事

0.根据SQL语句在缓存中查找,如果有直接返回数据如果没有就走下面流程

1.检查SQL语法

2.解析SQL语句

3.翻译成二进制

4.执行

5.把执行完的SQL语句和数据放到内部缓存中(数据库)

注意:把1,2,3看成预编译执行(会不会走预编译,其实就是看SQL语句在缓存中是否存在)

SQL注入:前端传参,把SQL语句作为参数进行传递就叫做SQL注入

$的使用场景 一般用于动态排序,#一般用于取值

注解@Param可以给参数取名


批量插入数据

自动映射方式:


开启驼峰式命名的方法:

自定义映射:

设置公共别名包:

太多重复的时候就可以用这个


mysql最大连接量为16000左右

连接池:简单理解它就是一个容器,专门用来存储连接对象的

作用:创建连接对象起到缓冲作用


关联关系

1.多对一 2.一对多

多对一/一对多 外键永远在多方

3.多对多

4.一对一

表设计有两种方式:

1.共享主键 两张表共享同一个ID

2.唯一主键

自定义映射


MyBatis缓存

真实开发使用Redis来代替MyBatis缓存

缓存的概念:简单理解以空间换时间

缓存的数据是放在内存

缺点:一旦断电,数据丢失

优点:查询性能非常快

MyBatis缓存

SqlSessionFactory是一个工厂对象,是MyBatis内部的核心对象SqlSessionFactory是专门用来创建SqlSession对象的(SqlSession在做CRUD的时候,离不开SqlSession对象因为SqlSession对象内部包含了一个连接对象

一级缓存:SqlSession级别

在做查询的时候,它会在一级缓存中进行查找

如果找到了,直接返回对应的数据,如果没有找到则发送sql语句到数据库中进行查询,把查询到的数据放到一级缓存中(key:sql value:查询的数据)

命中条件:同一个SqlSessionFactory,同一个SqlSession,同一个SQL,同一个条件

SqlSession用完后,一定要记得关闭,不关会一直占用连接对象

二级缓存:SqlSessionFactory级别的(重量级对象【创建一次不容易--->因为SqlSessionFactory包含了连接池对象,包含了XML基本信息】)

SqlSessionFactory不能关闭,因为创建非常消耗性能,生命周期是随着TomCat启动而创建TomCat销毁SqlSessionFactory才会销毁

二级缓存命中条件是:

当你发送sql语句的时候,他会现在一级缓存进行查询,如果没有找到,则去二级缓存中查找,二级缓存依然没有找到,就会发送sql语句到数据库中进行查找,把查找的数据分别放到一级缓存和二级缓存各一份


什么数据适合放缓存,什么数据不适合放缓存?

常年累月数据不做修改的适合放缓存

改动频繁的数据,要求数据实时性较高的也不适合放缓存

MyBatis一级和二级缓存执行顺序:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值