五、mybatis框架+mybatis-plus框架

本文详细介绍了Mybatis和Mybatis-Plus框架,包括它们的核心概念、工作流程、ORM思想、动态SQL、缓存机制以及分页操作。讨论了Mybatis的接口绑定、映射文件的id规则、Dao接口的工作原理、#与$的区别,以及如何防止SQL注入。此外,还对比了JDBC与Mybatis的差异,并探讨了Mybatis的一级和二级缓存。
摘要由CSDN通过智能技术生成

目录

什么是mybatis

什么是mybatis-plus

ORM思想

#Mybatis的工作流程

##Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

##Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?

##通常一个 Xml 映射文件,都会写一个 Dao/mapper 接口与之对应, 请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法, 参数不同时,方法能重载吗? //使用MyBatis的mapper接口调用时有哪些要求?//什么是MyBatis的接口绑定,有什么好处?有哪些实现方式? 

#动态sql

##什么是动态sql

##都有哪些动态sql?什么时候使用、怎么使用

##MyBatis应用动态SQL解决了什么问题

#Mybatis 中#和$的区别--面试

#JDBC和Mybatis区别

#Mybatis 缓存

##mybatis一二级缓存

##session和cookie

###会话技术session和cookie的原理

###会话技术session和cookie的区别

###怎么样把数据放入Session里面 

###MyBatis中缓存的LRU算法

#resulttype和resultmap区别

#如何分页操作

##mybatis-plus操作https://blog.csdn.net/fhefhffg/article/details/122324051#t83

##mybatis操作


什么是mybatis

持久层框架, 它内部封装了 JDBC,简化了JDBC的操作方式,是一个半 ORM框架:Mybatis在查询 关联对象或关联集合对象 时,需要手动编写sql来完成,所以,称之为半自动ORM框架。##为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

什么是mybatis-plus

是MyBatis的增强工具

其中应用到了ORM思想,即以对象的方式操作数据库(对象关系映射)

ORM思想

用于实现 不同系统的数据 之间的转换

#Mybatis的工作流程

Mybatis的工作原理 lpx
1, mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件
(也可以用Java文件配置的方式,需要添加@Configuration)中构建出SqlSessionFactory(SqlSessionFactory是线程安全的)————
创建SqlSessionFactory
2, SqlSessionFactory的实例直接开启一个SqlSession————通过SqlSessionFactory创建SqlSession
3, 再通过SqlSession实例获得Mapper对象 并 执行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交通过SqlSession执行数据库操作  调用session.commit()提交事务  调用session.close()关闭事务)
4, 关闭SqlSession
说明:SqlSession是单线程对象,因为它是非线程安全的,是持久化操作的独享对象,类似jdbc中的Connection,底层就封装了jdbc连接。

##Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

答:
第一种是使用<resultMap>标签,列名和对象属性名逐一映射。

第二种是使用sql的列别名功能,列别名和对象属性名逐一映射。

Mybatis 通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回

,那些找不到映射关系的属性,是无法完成赋值的。

-----比如T_NAME AS NAME,对象属性名一般是name,小写,但是列名不区分大小写,Mybatis会忽略列名大小写,智能找到与之对应对象属性名,你甚至可以写成T_NAME AS NaMe,Mybatis一样可以正常工作。

#resulttype和resultmap区别

   mybatis单表查询:
1、当表中的字段与POJO中的属性名称一致时,映射文件中使用resultType进行映射
2、当表中的字段与POJO中的属性名称不一致时,不能直接使用resultType进行映射,需要使用resultMap进行映射.

mybatis多表关联查询:
映射文件中使用resultMap进行映射

多表关联查询
MyBatis中resultType和resultMap的区别
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key:value关系),但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
(1)当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
(2)当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

##Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?

 Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复? 
不同的 Xml 映射文件,如果配置了 namespace,那么 id 可以重复;如果没有配 
置 namespace,那么 id 不能重复; 
原因就是 namespace+id 是作为 Map<String, MapperStatement>的 key 
使用的,如果没有 namespace,就剩下 id,那么,id 重复会导致数据互相覆盖。 
有了 namespace,自然 id 就可以重复,namespace 不同,namespace+id 自然 
也就不同。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值