Hibernate创建步骤
(五大核心接口:Configuration/SessionFactory/Session/Transaction/Query)
Configuration类:Configuration对象用来读取配置文件并创建SessionFactory对象。一般情况下,一个应用程序会创建Configuration对象,然后建立唯一的SessionFactory实例,意味着Configuration对象只存在系统的初始化阶段,然后所有的持久化操作通过唯一的SessionFactroy实例来进行
Query :查询接口,用于向数据库查询对象,包装了HQL查询语言,采用了新的面向对象的查询方式。
1.新建工程,导入需要的jar包。
2.利用MyEclipse自动生成功能在工程中创建hibernate.cfg.xml配置文件和
HibernateSessionFactory.java工具类。生成的主要内容如下:
hibernate.cfg.xml:
- <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>
- 略。。。
3.创建UserDao接口和接口的实现类UserDaoImpl,实现类中测试:
UserDaoImpl.java:
- 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的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。