1.Mybatis和Hibernate的区别?
Hibernate框架:是一个开源的对象关系映射框架,他对JDBC进行了非常轻量级的对象封装,建立
对象和数据库表的映射,是一个完全自动的,完全面向对象的持久层框架。
Mybatis框架:是一个开源对象关系映射框架,源码ibatis,是一个半自动化的持久层框架。
两者区别:
Hibernate开发中,sql语句已经被封装,可以直接使用,加快系统开发。
Mybatis属于半自动化,sql需要手工完成,稍微繁琐。
对于庞大的复杂系统项目来说,复杂语句很多,所以Hibernate不是一个好方案。
sql优化:Hibernate自动生成sql,有些语句繁琐,会多消耗一些性能
Mybatis手动编写sql,避免不必要的查询,提高系统性能。
对象管理比对:Hibernate是完整的对象-关系映射的框架,开发工程中,无需躲过关注底层实现,
只要去管理对象即可。
Mybatis:需要自行管理映射关系。
缓存方面:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你
自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再具体的表对象映射配置是那种缓存。
Myabtis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样子可以针对不同的表
可以自定义不同的缓存机制。并且Mybatis可以再明明空间中共享相同的缓存配置和实例。
一句话总结:
Mybatis:小巧,方便,高效,简单,直接,半自动化
Hibernate:强大,方便,高效。复杂,间接,全自动化。
2.Mybatis的缓存,都缓存些什么,Session缓存存在哪
Myabtis拥有自己的缓存结构,可以用来缓解数据库压力,加快查询速度。
Myabtis提供一级缓存和二级缓存的机制。
一级缓存是SqlSession,默认支持一级缓存,不再需要配置文件中配置。在操作数据库 时,
每个sqlSession类的实例对象中有一个数据结构(HashMap)可以用来存储缓存数据,
不同的SqlSession的互不干扰的。当一个SqlSession中执行两次相同的sql语句是,第一次执行完毕就会将
数据写到内存中,第二次查询不执行sql,直接从内存中获取。
二级缓存是Mapper级别的缓存,多个SqlSession类的实例对象操作同一个Mapper配置文件中的sql语句,
多个SqlSession类的实例对象可以共用二级缓存,二级缓存是跨SqlSession的。一个Mapper有一个自己
的二级缓存区域(按照namespace划分),两个Mapper的namespace如果相同,那么这两个Mapper执行
的sql查询会被缓存在同一个二级缓存中。要开启二级缓存需要在配置文件中设置cacheEnabled属性为true。
————————————————
版权声明:本文为优快云博主「加瓦一美」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/suifeng629/article/details/81586305
3.mybatis的执行流程,需要了解源码
1.获取InputStreamReder io流
InputStream in = Resouce.getResourceAsStream("mabatis_config.xml");
2.获取 SqlSessionFactory
SqlSesssionFactory sqlsessionFactory = new SqlSessionFactoryBuilder.buile(in)
3.获取sqlsession
Sqlsession sqlSession = sqlSessionFactory.openSession();
4.操作Mapper接口
第一步:通过Resources加载配置好的Mybatis.xml配置文件,产生输入流对象
第二步:通过输入流对象新建一个SqlSessionFactory。
第三步:用SqlsessionFactory创建sqlSession
第四步:然后调用mapper接口。
落叶飘零
4.mybatis的动态sql
通过这些标签可以组成非常复杂的sql语句。
1.if判断标签
2.where标签
3.trim便桥
4.set标签
5.foreach标签
6.choose标签
5.resultMap
resultMap可以把查询结果封装起来,但必须pojo类的属性名和查询到的数据库表的字段名一致。如果
sql查询到的字段和pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配
置封装,将结果映射到pojo中。
resultMap可以实现将查询结果映射为复杂类型的pojo,在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
result可以解决1对1查询和1对多查询。1对多查询可以直接在pojo类中添加list属性
[正在努力的程序员](https://blog.youkuaiyun.com/qq_42780864/article/details/81429114)
6.mybatis 的分页(MyBatis-扩展-PageHelpler分页插件使用)
7.mybatis防止sql注入,jdbc防止sql注入
jdbc使用PreparedStatemment防止sql注入,
mybatis一般使用#对sql做了预编译处理,因此在使用中很大程度的防止sql注入。
mybatis 将传入的参数作为一个整体传入。
本文对比了Mybatis和Hibernate两大持久层框架,分析了它们在自动化程度、SQL优化、对象管理及缓存机制上的差异,并深入探讨了Mybatis的缓存机制、执行流程和动态SQL特性。
1196

被折叠的 条评论
为什么被折叠?



