SSH复盘总结!

MVC

是一种软件设计的典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在修改界面和用户交互的同时,不用重新编写业务逻辑。
Model(模型层)
View(视图层)
Controller(控制层)

Hibernate

1.Hibernate核心组件
配置文件 映射文件 持久化类
Configuration类
SessionFactory接口
Session接口
Query接口
Transcation接口

2.Hibernate运行过程
Hibernate运行过程 :
A.Hibernate首先调用Configuration类读取配置文件和映射文件,并利用这些信息生成一个sessiongFactory对象

Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml");
sessionFactory = config.buildSessionFactory();

B.sessionFactory对象打开一个session对象,并用session对象生成Transcation对象,然后通过session的save()、update()、saveOrUpdate()、delete()、close()、clean()、evict()、get()、load()等方法对对象进行操作,通过session生成Query对象(Session.createQuery()),进行查询操作

Students stu = new Students();
Session session = sessionFactory.openSession();//生成Session实例
Transaction tx = session.beginTransaction();
session.save(stu);//保存持久类对象
tx.commit();//提交到数据库
session.close();

Hibernate配置文件和映射文件

配置文件:
<hibernate-configuration>
<session-factory>
   <property name="connection.url">jdbc:mysql://localhost:3306/study</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</
    <property name="show_sql">true</property>
    <mapping resource="hibernate/PO/TRegister.hbm.xml" />
</session-factory>
</hibernate-configuration>

映射文件:
<hibernate-mapping>
    <class name="hibernate.PO.TRegister" table="t_register">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <!-- 我在MYSQL中并没有设置该字段递增,但在Hibernate中依然可以设置为递增 -->
            <generator class="increment" />
        </id>
        <property name="userName" type="java.lang.String"><column name="userName" length="30" /></property>
        <property name="userPwd" type="java.lang.String"><column name="userPwd" length="30" /></property>
        <property name="sex" type="java.lang.String"><column name="sex" length="10" /></property>
        <property name="age" type="java.lang.Integer"><column name="age" /></property>
    </class>
</hibernate-mapping>

3.Hibernate持久化对象的三种状态
Hibernate的三种状态:
瞬时状态:(a)一个对象被new出来的时候进入瞬时状态,不与数据库中的数据相关联;(b)通过sava()和saveOrUpdate()转化为持久
化状态;(c)如果没有被对象引用则被GC回收。
持久化状态:(a)持久化对象在数据库中有相应的记录,拥有一个唯一的标识符;(b)持久化对象通过session的delete()方法转化为瞬
时状态(在数据库中对应的数据被删除,该对象不再与数据库的记录关联),通过session的close()、clean()、evict()方法转化
为游离状态;(c)持久化对象被修改后不会马上同步到数据库,直到数据库事务提交;
游离状态:(a)与某持久化对象关联的session被关闭,游离状态拥有数据库的识别值,但已不在持久化管理范围之内;(b)可以通过
session的save()和saveOrUpdate()转化为持久化状态;(c)如果不被引用则被GC回收。
Hibernate对象的三种状态实例详解Hibernate对象的三种状态详解

4.Hibernate操作类与类直接的关系

5.Hibernate的缓存机制
(1)Hibernate缓存的作用
Hibernate是一个持久化的框架,经常要访问物理数据库,为了降低应用程序访问物理数据库的频次,从而提高程序的运行效率。缓存内的数据是物理数据源中的数据进行复制,应用程序在运行的时候从缓存中读写数据,在特定的时刻或事件会同步数据源和缓存的数据。
(2)Hibernate的分类
一级缓存:就是session缓存,由于一个session的生命周期通常对应于一个数据库事务或应用事务,所以一级缓存是事务级的缓存,一级缓
存是内置的也是必须的,不可被卸载;
二级缓存:就是SessionFactory的缓存,由于SessionFactory的生命周期对应一个程序整个过程,所以二级缓存是进程范围的缓存,有可能
出现并发问题,所以应当采取适当的并发访问策略,二级缓存是可选的。
(3)Hibernate查找对象如何应用缓存?
首先根据ID在session一级缓存里查,查不到,如果配置了二级缓存,就从二级SessionFactory缓存中查,还查不到再查数据库,把结果按照ID放入缓存,增删改的时候同时更新缓存。
(4)Hibernate管理缓存实例
无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。
当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。
Hibernate缓存详解

5.Hibernate的其他小问题
(1)Hibernate的load()和get()(都是通过对象ID获取对象)
①load是懒加载,当调用session.load(User.class,2)时,只是取得了一个代理对象,这个代理对象只是保存了对象的ID值,并不发
送SQL语句,到数据库中去查询对象。只有当调用该对象的其他属性的时候,才会发送SQL语句,到数据库中去查询我们的对象。
②get不同,当调

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值