当前位置 : 主页 > 编程语言 > c++ >

自己对于Hibernate,Mybatis,Spring框架的一些理解(一)

来源:互联网 收集:自由互联 发布时间:2021-07-03
gistfile1.txt 1.Hibernate是什么?Hibernate是一个基于对象关系模型的持久层框架,当我们使用Hibernate开发时,我们操作的是对象,但是可以对数据库里的记录进行增删改查。它是一个可以把对
gistfile1.txt
1.Hibernate
是什么?
Hibernate是一个基于对象关系模型的持久层框架,
当我们使用Hibernate开发时,我们操作的是对象,但是可以对数据库里的记录进行增删改查。
它是一个可以把对象和数据库中记录建立映射的强大框架。它大大简化了我们的代码编写,还通过方言机制屏蔽了数据库之间的差异,增加了对不同数据库的可移植性。
使用Hibernate前,我们需要在hibernate.cfg.xml文件中配置数据库连接信息和方言等,
然后再把每个实体类对应的xml文件配置好,登记到hibernate.cfg.xml文件中
对象有哪几种状态?
临时状态:用new创建的对象,没有被session所管理,在数据库中没有对应记录。
持久态:持久化的对象总是被一个session管理,该对象与数据库的记录是对应的,s
ession清理缓存的时候,会根据持久化对象的改变,更新数据库对应记录
游离态:曾经被session管理过,但是现在与session断开了链接。
update()和saveOrUpdate()的区别?
update针对的已存在的实体对象,如果数据库中没有实体所对应的数据记录,将会抛出异常
saveOrUpdate()有则更新,没则插入
session的load()和get()的区别?
1.get是即时加载,load是延时加载
2.get()方法执行时,会立即向数据库发出查询语句,如果没有对应记录,则返回null
3.load()方法执行返回的是一个代理(代理中只有Id这个属性),只要真正使用该对象的属性时,
才会发出sql语句查询,如果没有对应数据,则会抛出ObjectNotFoundException;
hibernate的二级缓存是什么?
缓存指的是把以前从数据库中查询出来和使用过的对象保存在内存中,下次使用的时候先判断内存中有没有该对象,
如果有,就是用内存中缓存的对象;没有再去数据库查询,并保存在缓存中
hibernate的一级缓存是session级别的。当想使用session从数据库中查询出一个对象时,
session先从自己内部查询是否存在该对象,存在就直接返回,不存在再去数据库查询,然后保存到内部。由于session代表着一次会话过程,是和一个数据库连接相关联的,所以不要保存长时间打开的装,在一个事务结束后就应该即时关闭。
hibernate的二级缓存是sessionFactory级别的。能
被该sessionFactory创建的所有session对象共享。很多组织都对hibernate提供有缓存产品,
想在Hibernate中使用二级缓存就需要先在hibernate.cfg.xml中配置具体使用哪家的缓存产品,在配置该缓存产品的配置文件,最后配置将哪些实体类的对象要纳入二级缓存。

2.Mybatis
Mybatis是一个基于Object Relation Model的易上手的轻量级持久层框架,
它最大的特点是把sql语句写在xml文件中,方便统一管理和优化,它解除了sql语句和程序代码的耦合性。
mybatis的一级缓存是sqlSession级别的(默认开启),在同一个sqlSession中,执行同一个查询sql语句,如果其间没有发生增删改操作,第二次会直接从缓存中加载数据
二级缓存是Mapper级别的,指的是同一个mapper文件对应的多个session可共享缓存,需要配置,发生了增删改则会清空缓存
mybatis提供了映射标签,将对象和数据库的字段相关联,还提供了对象关系映射标签,支持对象关系的组建和维护,我们还可以通过xml标签编写动态sql。
但是主要缺点有三:
一是sql工作量很大,尤其是字段多,关联多表的时候。
二是sql语句依赖于具体数据库,导致数据库可移植性差。
三是xml中标签的id必须唯一,导致不能进行方法重载。

3.Spring
Spring是一个轻量级的控制反转和面向切口的容器框架。
它最大的特点有两个:
一是控制反转和依赖注入:意思是程序员不需要创建任何一个对象,所有的对象由Spring容器统一管理,在依赖类通过autoWired注解自动注入被被依赖类的对象,对象的控制权从程序员手中反转到了Spring手中。降低了代码的耦合度,更加符合开闭原则。

二是面向切面编程:把目标类的重复代码进行切除,封装到切面类中,通过动态代理让目标类的方法在执行前或执行后调用切面类的某段代码。降低了业务逻辑各部分的耦合性,提高了代码的复用性。Spring的事务处理机制就是通过aop来实现的。

依赖注入有两种方式:set注入和构造器注入
bean的范围:默认为singleton的,我们可以配置为prototype或者request,session或者application

4.SpringMVC
SpringMVC是一种实现了MVC设计模式的轻量级的请求驱动类型的web框架。
它通过DispatcherServlet接收客户端发送的请求,请求对应的controller,在controller中交给对应的业务逻辑模块处理,处理完毕返回一个视图对象给DispatcherServlet,DispatcherServlet拿到了视图再交给对应的视图解析器,生成相应视图返回客户端。
网友评论