您的位置:首页 > 其它

Hibernate工作流程及与 MyBatis的比较

2016-09-18 10:45 405 查看
Hibernate创建步骤

(五大核心接口:[b]Configuration/SessionFactory/Session/Transaction/Query)[/b]

   Configuration类:Configuration对象用来读取配置文件并创建SessionFactory对象。一般情况下,一个应用程序会创建Configuration对象,然后建立唯一的SessionFactory实例,意味着Configuration对象只存在系统的初始化阶段,然后所有的持久化操作通过唯一的SessionFactroy实例来进行

   SessionFactory接口:用来生成Session对象,并且它是一个重量级对象,占用的内存空间较大,所以一个程序只有一个SessionFactory实例

  Session接口(Hibernate核心对象):Session接口是java应用程序和Hibernate进行交互时所使用的主要接口,Session对象不是线程安全的,每个调用者应使用单独的session

 
Transaction接口:用于管理事务,如果因为程序的异常或者其他原因导致没有执行commit()或rollback(),那么很可能会造成数据库中数据不一致现象发生

   Query :查询接口,用于向数据库查询对象,包装了HQL查询语言,采用了新的面向对象的查询方式。

 


1.新建工程,导入需要的jar包。

2.利用MyEclipse自动生成功能在工程中创建hibernate.cfg.xml配置文件和

 HibernateSessionFactory.java工具类。生成的主要内容如下:

hibernate.cfg.xml:

[html]
view plain
copy

<hibernate-configuration>  
  
    <session-factory>  
        <property name="connection.username">root</property>  
        <property name="connection.url">  
            jdbc:mysql://localhost:3306/databasename  
        </property>  
        <property name="dialect">  
            org.hibernate.dialect.MySQLDialect  
        </property>  
        <property name="myeclipse.connection.profile">  
            dangdang  
        </property>  
        <property name="connection.password">root</property>  
        <property name="connection.driver_class">  
            com.mysql.jdbc.Driver  
        </property>  
        <mapping resource="entity/User.hbm.xml" />  
  
    </session-factory>  
  
</hibernate-configuration>  

HibernateSessionFactory.java:

[html]
view plain
copy

略。。。  

3.创建UserDao接口和接口的实现类UserDaoImpl,实现类中测试:
UserDaoImpl.java:

[java]
view plain
copy

public class UserDaoImpl implements UserDao {  
  
    public List<User> findAll() {  
        Session session = HibernateSessionFactory.getSession();  
        Transaction tx = session.beginTransaction();  
        Query query = session.createQuery("from User");  
                query.setFirstResult(0);//分页  
                query.setMaxResults(2);  
                List<User> lists = query.list();  
        tx.commit();  
        HibernateSessionFactory.closeSession();  
        return lists;  
    }  
    public static void main(String[] args) {  
        UserDaoImpl user = new UserDaoImpl();  
        System.out.println(user.findAll().size());  
    }  
}  

访问的时候其工作流程:
1.读取并解析配置文件;

2.Configuration负责读取并创建映射信息,创建sessionfactory;

3.SessionFactory负责创建session;

4.Transaction负责开启事物Transaction;

5.Query负责执行持久化操作;

6.Transaction负责提交实物;

7.关闭session;

8.关闭sessionfactory。

持久化对象的三种状态:



 Hibernate与Mybatis对比总结

两者相同点

Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
Hibernate和MyBatis都支持JDBC和JTA事务处理。

Mybatis优势

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,而Hibernate门槛较高。

Hibernate优势

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

他人总结

Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。 
Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。 
iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。 
iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: