MyBaitis持久化框架 知识点小结

目录

一、什么是Mybatis

二、Mybatis工作原理

如何掌握MyBatis的工作原理

三、第一个Mybatis程序

四、映射文件

1、核心配置mybatis-config.xml

2、环境配置(environments)

3、属性(properties)

五、MyBatis动态SQL

1、动态sql是什么?

2、Mybatis 动态 sql 是做什么的?

3、Mybatis的动态sql标签有哪些?

六、MyBatis映射关联查询

1、一对一映射

2、一对多映射

3、多对多映射

七、一级缓存和二级缓存

1、一级缓存

2、二级缓存


一、什么是Mybatis

 Mybatis是一个基于java的持久层框架,它主要用来解决原生JDBC代码冗余、重复,频繁申请释放连接资源等问题,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。并采用ORM思想,可以自动对Bean对象进行映射封装。此外,它还可以将Sql语句配置到xml文件中,实现持久操作与编码的松耦合。

1.优秀的持久层开源框架

2.MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射

二、Mybatis工作原理

mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory,然后,SqlSessionFactory的实例直接开启一个SqlSession,再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。如下图所示:

MyBatis的工作原理如下图所示:

 上面中流程就是MyBatis内部核心流程,每一步流程的详细说明如下文所述:

(1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。

(2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。

(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。

(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。

(6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。

(7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。

(8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。

如何掌握MyBatis的工作原理

关于MyBatis的工作原理,网上的文章是汗牛充栋,但是站长觉得,要结合JDBC来理解MyBatis的工作原理往往才能更透彻。我们知道,JDBC有四个核心对象:
(1)DriverManager,用于注册数据库连接
(2)Connection,与数据库连接对象
(3)Statement/PrepareStatement,操作数据库SQL语句的对象
(4)ResultSet,结果集或一张虚拟表

而MyBatis也有四大核心对象:
(1)SqlSession对象,该对象中包含了执行SQL语句的所有方法【1】。类似于JDBC里面的Connection 【2】。
(2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC里面的Statement/PrepareStatement。
(3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
(4)ResultHandler对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。可以自定义返回类型。

三、第一个Mybatis程序

搭建数据库

新建项目

  1. 创建一个普通的maven项目

  2. 删除src目录 (就可以把此工程当做父工程了,然后创建子工程)

  3. 编写 pom.xml 导入第三方的依赖(jar)
      junit  数据库驱动包(mysql,oracle) mybatis

 

      4.创建Module

      5.编写mybatis工具类

创建一个模块

编写mybatis的核心配置文件 mybatis-config.xml

数据连接信息 db.properties

 

编写mybatis工具类

编写代码

实体类

 Dao接口

 接口实现类

 

 junit测试

四、映射文件

1、核心配置
mybatis-config.xml

MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
类型:MANAGED 和 JDBC
dataSource(数据源)
类型:POOLED(有连接池)、UNPOOLED(无连接池)、JNDI(正常连接)
池:用完可以回收,使web响应更加快
databaseIdProvider(数据库厂商标识)
mappers(映射器)


2、环境配置(environments)

MyBatis可以配置成使用多种环境

记住:尽管可以配置多个环境,但每个SqlSessFactory实例只能选择一种环境。

学会使用配置多套运行环境!

Mybatis默认的事物管理器就是JDBC,连接池:POOLED

3、属性(properties)

我们可以通过properties属性来实现引用配置文件

这些属性都是可以外部且可动态替换的,既可以在典型的Java属性文件中配置,亦可以通过properties元素的子元素来传递。【db.prooerties】

在核心配置文件中映入

编写属性配置文件db.properties

类型别名(typeAliases)

环境配置(environments)和 环境变量(environment)

映射器(mappers)

五、MyBatis动态SQL

1、动态sql是什么?

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。

2、Mybatis 动态 sql 是做什么的?

Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。

3、Mybatis的动态sql标签有哪些?

1、<if> 标签:条件判断

2、<where> + <if> 标签

where、if 同时使用可以进行查询、模糊查询

3、<set> + <if> 标签

Set、if 同时使用可以用来修改

 

4.choose(when,otherwise)语句

有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句

5、<trim> 格式化的标记

trim 标记是一个格式化的标记,可以完成 set 或者是 where 标记的功能

用 trim 改写上面第二点的 if+where 语句:

  • prefix:前缀
  • prefixoverride:去掉第一个 and 或者是 or

用 trim 改写上面第三点的 if+set 语句:

  • suffix:后缀
  • suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)

trim+if 同时使用可以添加:

6、<foreach> 标签

foreach是用来对集合的遍历,这个和 Java 中的功能很类似。通常处理 Sql 中的 in 语句。

7、<sql>:可重用语句
在实际开发中会遇到许多相同的SQL,比如根据某个条件筛选,这个筛选很多地方都能用到,我们可以将其抽取出来成为一个公用的部分,这样修改也方便,一旦出现了错误,只需要改这一处便能处处生效了,此时就用到了 <sql> 这个标签了。<include> 用于引用 <sql> 标签定义的常量

六、MyBatis映射关联查询

1、一对一映射

2、一对多映射

3、多对多映射

七、一级缓存和二级缓存

1、一级缓存

一级缓存也叫本地缓存: SqlSession

  • 与数据库同义词会话期间查询到的数据会放在本地缓存中;
  • 以后如果需要直接到本地缓存中拿,没必要再去查询数据库;

失效的情况:

1.查询条件不同
2.增删改操作
3.查询不同的Mapper.xml,不是同一个Sqlsession对象
4.手动清除缓存(clearCache)

2、二级缓存

二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存
基于namespace级别的缓存,一个名称空间,对应一个二级缓存
工作机制:
        1、一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中

        2、如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭·            了,会话关闭了,一级缓存中的数据被保护到二级缓存中
        3、新的会话查询信息,就可以从二级缓存中获取内容;
        4、不同的mapper查出的数据会放在自己对应的缓存(map)中

特点:查出的数据都会被默认先放在一级缓存中 只有会话提交或者关闭以后,一级缓存中的数据才会转到二级缓存中 只要开启了二级缓存,我们在同一个Mapper中的查询,可以在二级缓存中拿到数据)

第一步在mybatis的全局配置文件中配置Setting属性,设置名为cacheEnabled的属性值为true即可

第二步:在具体需要二级缓存的mapeer映射文件中开启二级缓存,值需要在相应的映射文件中添加一个cache标签即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中常用的持久化框架有pickle和SQLAlchemy。 Pickle是Python内置的模块,用于对象的序列化和反序列化。它可以将Python对象转换为字节流,并将字节流保存到文件中,也可以将字节流反序列化为Python对象。使用pickle可以方便地将Python对象保存到文件中,或通过网络发送到其他计算机。比如,可以使用pickle.dump()将数据序列化并保存到文件中,使用pickle.load()从文件中反序列化数据。这种方式适用于简单的数据持久化需求。 SQLAlchemy是一个功能强大的Python对象关系映射(ORM)框架,它建立在数据库API之上,并提供了一种将Python对象映射到数据库表的方式。通过SQLAlchemy,可以使用Python对象来操作数据库,而不需要直接编写SQL语句。它支持多种关系数据库,如MySQL、PostgreSQL、SQLite等,并提供了丰富的API和查询语言,使得数据的持久化和查询变得更加方便。使用SQLAlchemy,可以定义Python类来表示数据库表,通过操作这些类来进行增删改查等操作。例如,可以使用SQLAlchemy定义一个User类,然后通过User类来访问数据库中的用户信息。 综上所述,Python中有多种持久化框架可供选择,具体选择哪种取决于项目需求和个人偏好。如果只需要简单地将数据保存到文件中,可以使用pickle;如果需要更复杂的数据库操作和对象关系映射功能,可以选择SQLAlchemy。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值