mybatis

今天是2021年4月19号,学习和了解Mybatis框架;

 学习一个新东西,尽量要做到三点:是什么?是用来干什么的?有什么用?

学习框架可以使用对比学习,使用这个框架和不使用这个框架有什么区别?

mybatis  Spring SpringMVC SpringBoot

mybatis--中文文档

mybatis---GitHub

maven---仓库

1.是什么?

持久层框架

数据持久化:将数据保存到数据库中,以便用户下次再运行时可以再次使用到这些数据;

Dao层:完成持久化工作的代码块

Service层:业务层

Controller层:控制层

持久层:完成持久化工作的代码块

 

2.为什么用mybatis框架?

没有用mybatis之前是使用MySQL来完成数据持久化的;(如何完成?有何弊端?如何改进优化?)

mybatis的的好处:方便,简化,框架,自动化(如何实现?)

不使用mybatis开发的时候也是可以的。mybatis不是一种唯一完成持久化的框架;

 

3、mybatis的特点是什么?

与MySQL实现相比,mybatis有什么特点?

 

4、我的第一个mybatis程序

学习框架的思路:搭建环境----》导入mybatis----》编写代码-----》测试

4.1搭建环境:

MySQL数据库:创建一个数据库  创建一个数据表user并且插入数据

4.2新建项目

新建一个普通的maven项目

删除src目录

创建一个模块

新建一个xml文件

新建一个工具类来读取配置文件,获取SQLSessionFactory对象

4.3编写代码

pojo实体类User:属性 get set方法 无参有参构造方法

Dao接口:UserDao 也就是等价于UserMapper,来获取用户

(旧方法实现方法)Dao接口实现类:MySQL是通过实现接口的来操作数据库中的数据的

(新方法实现方法)Dao Mapper文件:UserMapper.xml,通过namespace来唯一绑定一个接口,id对应接口中的方法,resultType对应返回的数据类型;

4.4测试

注意点:每个Mapper.xml都需要在Mybatis核心配置文件中注册;

maven过滤配置,将xml文件也生成到target中;

Junit测试:获取sqlSession对象   执行SQL  关闭sqlSession对象

执行SQL的方式一:通过mapper对象来获取

可能遇到的问题:配置文件没有注册、绑定接口错误、方法名不对、返回类型不对、maven导出资源;

 

5.CRUD

5.1namespace---中的包名要和接口的包名一致

5.2select---查询语句,id对于namespace中的方法名;resultType对于SQL语句的返回值; parameterType---参数类型

5.3insert-----id对应方法  parameterType对应类名 记得提交事务

5.4update---id对应方法名  parameterType对应类名 记得提交事务

5.5delete----id对应方法名 

5.6三种传参方式---map传递参数(多个参数)  、对象传递参数、  int传递参数(可以省略)

5.7多个参数用map或者注解

5.8模糊查询怎么写?在java代码传递参数时用通配符%%  在SQL拼接中使用通配符;

 

 

6.配置解析

6.1核心配置文件

mybatis-config.xml配置MyBatis 行为的设置和属性信息

6.2环境变量environments,default--设置使用的环境 ,默认的事务管理器是jdbc,连接池是pooled

6.3属性properties,通过属性来实现引用配置文件;

第一步:编写一个外部配置文件db.porperties

第二步:在核心xml文件中引入

可以直接引入外部文件db.porperties 可以在标签中增加属性 外部配置文件优先级高

6.4类型别名typeAliases

有两种方式起别名的方式;

 

6.5.设置setting

6.6.其他配置

typeHandler

 

6.7.映射器mappers

MapperRegister:注册绑定我们的Mapper文件

Mapper文件就是**Mapper.xml文件;

有三种方式的绑定方式;

 

 

6.8.生命周期和作用域

三个对象:

SqlSessionFactoryBuilder:是一个局部变量,用来创造一个SqlSessionFactory,创造玩就可以回收了;

SqlSessionFactory:相当于是一个连接池,一次运行程序就一个对象,是全局变量;

SqlSession:相当于是一个连接,有连接和关闭的动作,一个SqlSession对应多个mapper,一个mapper就是一个业务;

 

7.解决属性名和字段不一致的问题

7.1如有一个关系 user(id,name,pwd)

有一个实体类有属性 id  name  password  【注意pwd  password】

方式一:起别名  sql语句的as用法   pwd as password

输出结果的password是为null的,考虑一下为什么为null?因为属性跟字段不一致;

7.2resultMap 结果集映射

id name pwd

 |      |         |

id name password

有一个resultMap标签,可以完成数据表的列和对象的属性一一对应;

 

 

 

8.日志

8.1日志工厂

如果一个数据库操作出现错误,要进行检查和排除就需要使用到日志;

日志的设置在settings标签中进行设置;

<setting name=" "  value=" "/>

在mybatis核心文件中配置我的日志;

标准的日子工厂实现  STDOUT_LOGGING;

8.2 LOG4J 日志的实现

8.2.1什么是LOG4J ?

可以控制日志的输出目的,也可以控制日志输出的格式,还可以控制日志的生成过程,可以通过配置文件灵活的进行配置?

【配置文件的重要性  配置文件在框架的使用中占据着很重要的地位,它是如何控制程序的一些参数的?】

8.2.2LOG4J 的使用

导包:需要使用maven仓库来导入LOG4J的包;

配置文件log4j.porperties来设置属性信息;

配置log4j为日志的实现,使用setting标签;

log4j的使用,测试运行;

简单使用:导包---》生成日志对象---》使用日志级别输出 info debug error 

日志的作用?用来排除错误;

 

 

9.分页

【思考】为什么要分页?

当数据量比较大时,对数据进行分页显示,可以减少每次对数据量的处理;

9.1使用limit分页:select * from user limit 0,2;显示第一和第二个数据;

9.2使用mybatis实现分页:

接口:

Mapper.xml:

测试:
9.3RowBounds类分页

9.4mybatis分页插件pagehelper

 

10.使用注解开发

10.1什么是面向接口编程?

注解的底层主要是应用了反射;

注解在接口上实现

需要在核心配置文件中绑定接口

测试

本质是反射机制实现,底层是动态代理;

设计模式的重要性,要求能够手写出设计模式的流程图;

 

10.2mybatis的执行流程【通过查看源码得出的结果】

第一步:编写一个配置文件,通过resource获取价值全局配置文件

第二步:实例化SqlSessFactorBuilder构造器

第三步:解析文件流 XMLConfigBuilder

第四步:Configuration所有配置信息

第五步:SQLSessionFactor实例化

第六步:execute执行器

第七步:创建sqlSession

第八步:实现CRUD

第九步:查看是否执行成功

第十步:提交事务

 

10.3使用注解来CRUD

我们可以在创建sqlSession对象的时候设置自动提交注解;

 

 

11.Lombok

11.1是什么?

java library 、plug  、build tool

11.2使用步骤

在idea中安装lombok插件

在项目中导入lombokjar包(maven依赖)

使用:不用写get和set方法了 只需要添加一些注解就可以了  

@Data:无参构造方法 get set toString hashcode equal

 

12.多对一的处理

12.1什么是多对一?什么是一对多?

多对一:多个学生对应一个老师    【关联】

一对多:一个老师有多个学生  【集合】

12.2新建一个项目

导入lombok

新建实体类 Teacher 和Student

建立Mapper接口

建立Mapper,xml文件

在核心配置文件中注册绑定我们的Mapper接口或者文件

测试查询是否能够成功

12.3查询所有学生的信息,以及对应的老师的信息

按照查询嵌套处理、子查询的实现

按照结果嵌套处理

 

13.一对多的处理

比如:一个老师有多个学生

需求:查询老师的基本信息,以及老师拥有的学生信息。

方式一:按结果嵌套查询

方式二:按子结果嵌套查询

小结:

多对一用关联

一对多用集合

JavaType &  ofType

javaType用指定实体类中属性的类型

ofType 用来指定映射到list或者集合中的pojo类型,泛型中的介绍类型;

面试高频考点:

MySQL引擎

InnoDB底层原理

索引

索引优化

 

14.动态SQL

14.1什么是动态SQL?

根据不同的条件生成不同的SQL语句

14.2搭建环境

14.2.1创建一个基础工程

导包

编写配置文件

编写实体类

实现实体类对应的Mapper接口,和Mapper.xml文件

14.3----if 

表示判断

14.4----trim

14.5---choose语句

和java语法中的switch语句一样,从中选择一项

14.6---where标签

 

 

15缓存Cache

15.1什么是缓存?

15.2为什么使用缓存?

15.3什么样的数据能使用可以使用缓存?

【建议使用】经常查询并且不经常改变的数据

【不建议使用】

15.4mybatis的缓存

一级缓存:自动开启的

二级缓存:手动配置

缓存的策略:LRU FIFO 

15.5一级缓存---本地缓存

也是sqlSession级别的,只在一次sqlSession中有效,是自动开启的;

在同一个sqlSession里面,两次查询只需要执行一次sql语句,第二次只需从缓存中取数据;

如果在同一次sqlSession中有增删改操作时,缓存会变自动更新;

 

15.6二级缓存----全局缓存

开启二级缓存,只要在核心配置中添加一个cache标签;

默认的清除策略是LUR;

二级缓存是一个全局的缓存,一个namespace对应一个二级缓存,当一级缓存关闭时,会将数据存入到二级缓存中;新的会话关闭时,会从二级缓存中查找数据;

 

15.7缓存的原理

 

15.8自定义缓存--ehcache

导包

在cache中加入type属性,值为ehcache;

在resource目录中新建 ehcache.xml文件

 

16.mybatis的总结

 

 

17.聊聊spring

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值