MyBatisHibernate入门

Hibernate入门

平等:Hibernate框架简介

(1.)Hibernate框架:是数量持久化工具,也是一个盛开源代码的ORM解决方案。Hibernate内部封装的了经JDBC访问数据库的操作,向上层应用提供面向对象的数目看API。

(2.)Hibernate是ORM解决方案。

(3.)Hibernate框架的独到之处:

        
1.Hibernate功能强大,是JAVA应用和关系数据库之间的桥,较之JDBC方式操作数据库,代码量大大减少,提高了持久化代码的付出速度,降低了维护成本。

        
2.Hibernate支持多面向对象的特性,如构成,继承,多态,使得开发人员不必在面向业务领域的对象模型与面向数据库的关系数据之间的型切换,方便开发人员进行领域让之面向对象的计划和付出。

         3.可移植性好,

         4.框架开源免费

         缺点:

1.  不抱因数量也基本大气动存储过程的行使。

2.  周边的批量插,修改和去不切合用Hibernate。

(4.)Hibernate和Mybatis的比较:

        
1.相对于Mybatis的‘SQL-Mapping’的ORM实现,Hibernate的ORM实现更健全,提供了靶状态管理效能。Hibernate是本着数据库操作,针对的凡JAVA对象,即使使用Hibernated查询语言,其书规则吧是面向对象的。

        
2.Hibernate同具体数据库的干仅仅待以XML中安排即可,hibernate开发者不需要关怀SQL的更动与结果的炫耀,所有的HQL语句与具象的数据库无关,便于修改,移植性好。而Mybatis直接行使SQL语句,不同数据库可能会见发生差异,修改工作量非常,可移植性差。

        
3.由直接利用SQL语句,所有MyBtais的运灵活性强,而Hibernate对于涉嫌模型设计不客观,不规范体系非适用。在无考虑缓存的状况下,MyBatis执行效率呢比Hibernate高一些。

其次:Hibernate环境搭建:

(1.)Hibernate环境搭建:

        
1.产充斥需要之jar文件:Hibernate官方网站是:http://hibernate.org。托管网站是:https://sourceforge.net/projects/hibernate/files/下载。推荐下载hibernate3。

         2.部属jar文件

         3.创Hibernate配置文件hibernate.cfg.xml。

         4.开立持久化类和照耀关系文件。

(2.)主键生成策略:

         1.Assigned:主键由程序负担转,

        
2.Increment:对品种也long,short或者int的主键,以活动生长方式变主键的价,主键按数值顺序递增,增长量为1。

         3.Identity:对而,SQL server,DB2
,MySQL等支撑表识列的数据库,可使用该主键的值生成政策生成自动增长主键,但以数据库中将相应的主键字段设置也表识列。

         4.sequence:对如Oracle
Db2等支撑排的数据库,可下主键生成策略生成自动就加强主键,通过子元素param可传唱数据库被列的名称。

        
5.Native:由Hibernate根据底层数据库自行判断用何种主键生成策略,即由于以数据库生成主键的价。

其三:使用Hibernate完成持久化操作

(1.)读取并分析配置文件和射文件。

Configuration  conf=new Configuration().configure();

(2.)依据配置文件及照耀文件被的音信,创建SessionFactory对象。

         SessionFactory  sf=conf.buildSessionFactory();

(3.)打开Session

         Session session
=sf.getCurrentSession();//或者采用:sf.openSession();

(4.)开始一个事情

         Transaction   tx=session.benginTransaction();

(5.)数据库操作        

         Session.save(user);//保存操作

(6.)结束工作

         Tx.commit();//提交业务

         Tx.rollback();//会滚事务

(7.)如果由此SessionFactory的openSession()方法获得的Session对象,则用关闭session。

         Session.close();

 

8.get()和load()区别:当以Session的get()方法时,如果加载的数据库不存,get()方法会返回一个null;但是以load()方法,若加载的数据库不在,则会弃来深。这是get()和load()方法的区分之一。

季:Hibernate中java对象的老三栽状态

1.Java对象的老三种植状态

(1.)顺时状态(Transient)又如(临时状态)

(2.)持久状态(Persistent):当对象同Session
关联,被Session管理时,它就是处在持久状态。

(3.)游离状态(Detached)又如(托管状态)

2.叔种状态的换

(1.)瞬时状态转换持久状态

         使用Session的save(),saveOrUpdate()等方法保存对象后。

或    

         Session的get()或load方法得到对象。

(2.)持久状态转换为转状态

         执行Session的delete()方法后。

(3.)持久状态转换为游离状态

         执行Session的evict(),clear()或close方法。

(4.)游离转换为持久状态

         Session 的update()或saveOrUpdate()方法。

(5.)游离状态转换为转状态

         Session的delete()方法

五:脏检测和刷新缓存机制

(1.) 脏检测:在Hibernate中,数据前后发生的变化对象,称为脏对象。

(2.)刷新缓存机制:当Session缓存中目标的性发生变化时,Session并无会见立即执行脏检查及实践有关的SQL语句,而是以特定的时间点,即刷新缓存时才行。

Session 会在瞬间时点刷新缓存

(1.)应用程序显示调用Session 的flush()方法时。

        
Session的flush()方法开展刷新缓存操作,会触发脏检查,视情形施行相关的SQL语句。

(2.)应用程序调用Transaction 的commit()方法时。

         Commit()方法先调用Session
的刷新缓存方法flush(),然后向数据库提交业务。

六:跟新数据的艺术

(1.)update()方法,用于将游离状态回升也持久状态,同时进行数据库更新操作,当参数对象OID为Null时见面报那个。

(2.)saveOrUpdate()方法,同时寓了save()与update()方法的功用,如果符合参是瞬时状态的对象,就调用save
()方法,如果符合参是游离状态的靶子,则调用update()方法。

(3.)merge()方法,能够当参数传入的游离状态对象的特性复制到一个怀有相同OID的坚持不懈状态对象被,通过持久状态的水污染检查落实跟新操作,并返该持久状态对象,如果无法从Session缓存或数据库被加载到对应的坚持不懈状态对象,即传入瞬时目标,则创造其副本执行插入操作,并赶回就同样初的坚持不懈状态对象。

Hibernate关联映射

一致:关联关系

  1. 自从一个表到另一个发明底关系就称:单为关系

比方又寓两栽表就称:为双向关联

 

*炫耀关系如下:

基本上对同一光为关系关系

同等针对大多双向关联关系

多对准多干关系

  1. 持久化操作:保存

Public class EmpDao extends BaseDao{

           Public void save(Emp emp){

                    This.currentSession().save(emp);//省略其它代码

}

}

  1. 立双向一对多涉及关系:

列如:给定Emp对象,如果想取得同它们事关的Dept对象:如下

Dept dept=emp.getDept();//从Emo对象导航及事关的Dept对象

4.<set>元素:还含有了别样少独元素:

<key>元素:column属性设定与所涉的持久化类相对应之表明外键,此处表的DEPTNO字段

<one-to-many>元素:Class属性设定关联的持久化类型,此处为Emp
类Hibernate根据上述映射代码可走以下信息。

  1. 双向关联关系下之增删该操作

级联操作可以吗持久化映射文件中经过cascade属性和inverse属性进行支配。

5.<set>元素的inverse属性

        
<set>属性之inverse属性的值有三三两两独,即true和false默认是false,关系涉及中,inverse=”false”的伪主动方,主动方负责维护关系关系。

二:加载

  1. 立即加载:

在xml文件中。

<class name=”文件路径全名” lazy=”false” table=”对象名”>

 

以下代码表明Dept类的emps集合采用这加载策略

<set name=”emps” inverse=”true” lazy=”false”>….</set>

  1. 推加载:

默认加载:<class name=”文件全名”  lazy=”true”  table=”对象名”>

于<set>元素,应该先行考虑动用默认的延加载策略

         <set name=”emps” inverse=”true”>…..</set>

 

  1. 增长延迟加载:

<set name=”emps” inverse=”true” lazy=”extra”>….</set>

 

网站地图xml地图