Mybatis重要知识点讲述

本文详细介绍了Mybatis的半自动特性与ORM框架的概念,包括Mybatis与Hibernate的区别、SQL中的关系解析、#与$占位符的区别,以及Mybatis的一级和二级缓存。此外,还探讨了分页插件PageHelper和延时加载机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一   半自动与全自动的区别

全自动:指ORM映射工具可以在查询对象或关联集合对象时,可以根据对象的关系模型直接获取。例如Hibernate框架。

半自动:值ORM映射工具在查询关联对象或关联集合对象时,需要手动编写sql语言来完成。例如Mybatis。

二 什么是ORM框架

        OPM框架是连接数据库的桥梁,只需提供了持久化类与表的映射关系,ORM框架就能在运行时将参照映射文件的信息,将对象的信息持久到数据库中的。

        目的:是为了解决面型对象与关系数据库存在的互不匹配的现象的框架。

 目前主流的ORM的框架为以下几种

(1)Hibernate 全自动 需要写hql语句

(2)iBATIS  mybatis的前身,半自动,自己写sql语句,可操作性强,小巧

(3)mybatis 半自动

(4)eclipselink

(5)JFinal

使用ORM的优势:

   当我们实现应用程序的时候,由于会写特别多的数据访问层的代码,从数据库保存,删除,读取对象信息,而这些代码都是重复的。通过使用ORM将大大减少重复的代码。

三sql中一对多,多对一,一对一关系的解析

sql一对一:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里班主任和学生的关系就是一对多。

多对一:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里学生和班主任的关系就是多对一。

一对一:比如说一个班级有很多学生,他们分别有不同的学号。一个学生对应一个学号,一个学号对应一个学生;通过学号能找到学生,通过学生也能得到学号,不会重复。这里学生和学号的关系就是一对一。

多对多:比如说一个班级有很多学生,他们有语文课、数学课、英语课等很多课。一门课有很多人上,一个人上很多门课。这里学生和课程的关系就是多对多。

四.mybatis中#与$的区别

#占位符:

1> MyBatis处理 #{ } 占位符,使用的 JDBC 对象是PreparedStatement 对象,执行sql语句的效率更高。

2> 使用PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全。

3> #{ } 常常作为列值使用,位于sql语句中等号的右侧;#{ } 位置的值与数据类型是相关的。
4> #传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。

$占位符:

1> MyBatis处理 ${ } 占位符,使用的 JDBC 对象是 Statement 对象,执行sql语句的效率相对于 #{ } 占位符要更低。

2> ${ } 占位符的值,使用的是字符串连接的方式,有 sql 注入的风险,同时也存在代码安全的问题。

3> ${ } 占位符中的数据是原模原样的,不会区分数据类型。

4> ${ } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ${ }。
 

5.MyBatis缓存

        MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存,默认情况下,只有一级缓存默认开启。二级缓存需要手动开启和配置,他是基于namespace级别的缓存。一级缓存被称为sqlSession级别的缓存, 二级缓存被称为表级缓存。


一级缓存:

        MyBatis的一级缓存默认是开启的,它在一个sqlSession会话里面的所有查询操作都会保存到缓存中,一般来说一个请求中的所有增删改查操作都是在同一个sqlSession里面的,所以我们可以认为每个请求都有自己的一级缓存,如果同一个sqlSession会话中2个查询中间有一个 insert 、update或delete 语句,那么之前查询的所有缓存都会清空。

        使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话,在对数据库的一次会话中, 有可能会反复地执行完全相同的查询语句,每一次查询都会去查一次数据库,为了减少资源浪费,mybaits提供了一种缓存的方式(一级缓存)。

二级缓存:

        二级缓存是全局的,也就是说;多个请求可以共用一个缓存,二级缓存需要手动开启。二级缓存针对的是同一个namespace,所以建议是在单表操作的Mapper中使用,或者是在相关表的Mapper文件中共享同一个缓存。一级缓存无过期时间,只有生命周期,缓存会先放在一级缓存中,当sqlSession会话提交或者关闭时才会将一级缓存刷新到二级缓存中;开启二级缓存后,用户查询时,会先去二级缓存中找,找不到在去一级缓存中找,然后才去数据库查询;

6.mybatis和hibernate的区别

mybatis是半自动,hibernate是全自动

mybatis灵活性更高可以更方便地满足用户的需求,在sql的优化上优于hibernate

hibernate的可移植性远大于mybatis

hibernate的二级缓存需要在配置文件中设置是哪种缓存,在使用时会更安全,在检查到脏数据时会报错,而mybatis在使用二级缓存时需要更小心

mybatis是一个轻量级框架,学习 起来会更轻松,而hibernate的学习就需要花费更多时间

7.分页插件PageHelper

     需要先在pom文件中导入插件,通过传入当前页码和每页的数据条数就能完成分页的工作

缺点:对逆向工程不是很适配,只能支持非条件查询

8.延时加载

        延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。即简单理解为就是在使用的时候,在发出sql语句的相关的查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值