`

hibernate基础-初步

阅读更多
类拟框架:Apache OJB,JDO,Toplink,EJB(CMP)JPA,IBatis
适合查询及单个对象的编辑,适合于对象之间有清晰的关系,不适用于批量修改,关系复杂的对象及特定的sql功能
第一个项目
1 新建java项目
2 创建User Library,加入如下jar
  * hibernate_home/hibernate3.jar
  * hibernate_home/lib/*.jar
  * MySql jdbc验动
3 创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件
<hibernate-configuration>
    
<session-factory >
     
<!-- 连接串 -->
        
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
        
<!-- 驱动类 -->
        
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        
<!-- 用户名 -->
        
<property name="hibernate.connection.username">root</property>
        
<!-- 密码 -->
        
<property name="hibernate.connection.password">root</property>
        
<!-- 适配器(反译) -->
        
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
        
<!-- 显示sql语句 -->
        
<property name="hibernate.show_sql">true</property>
        
<!-- 可以防表被重新建立 -->
        
<property name="hibernate.hbm2ddl.auto">update</property>

        
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
    
</session-factory>
    
</hibernate-configuration>

4 定义实体类,继承java.io.ser
5 定义User类的映射文件User.hbm.xml

<hibernate-mapping>
    
<class name="com.myobj.hibername.User" table="">
        
<id name="id">
            
<generator class="uuid"/>
            
<generator class="native"/>
             
<generator class="assigned"/>
        
</id>
        
<property name="name"/>
        
<property name="password"/>
        
<property name="createTime"/>
        
<property name="expireTime"/>
    
</class>
</hibernate-mapping>
6 将User.hbm.xml文件加入到hibernate.cfg.xml文件中
<session-factory >
        
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
        
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        
<property name="hibernate.connection.username">root</property>
        
<property name="hibernate.connection.password">root</property>
        
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
7 编写hbm2ddl工具类,将实体类生成数据库表,手工建数据库
public class ExportDB {
    
public static void main(String[] args) {
        
//读取hibernate.cfg.xml文件,默认为.properties文件,
        
//读取xml文件用new Configuration().configure()
        Configuration cfg=new Configuration().configure();
        
//生成工具类
        SchemaExport export=new SchemaExport(cfg);
        
//生成数据库表
        export.create(truetrue);
    }

}
8 开发客户端Client类添加数据
public class Client {

    
public static void main(String[] args) {
        
//读取hibernate.cfg.xml文件
        Configuration cfg=new Configuration().configure();
        
//创建SessionFactory,与数据库绑定,一个数据库对应一个SessionFactory,与二级缓存相关,为重量级对象,是线程安全的
        SessionFactory factory=cfg.buildSessionFactory();
        
//
        Session session=null;//不同于connction,是对其的封装,用时到连接池拿来conn
        
        
try {
            session 
= factory.openSession();
            
//开启事务
            session.beginTransaction();
            
            User user 
= new User();
            user.setName(
"张三");
            user.setPassword(
"123");
            user.setCreateTime(
new Date());
            user.setExpireTime(
new Date());
            
//保存数据
            session.save(user);
            
//提交事务
            session.getTransaction().commit();
        }
 catch (Exception e) {
            e.printStackTrace();
            
//回滚事务
            session.getTransaction().rollback();
        }
finally{
            
if(session!=null){
                
if(session.isOpen()){
                    
//关闭session,是非线程安程的
                    session.close();
                }

            }

        }

    }

}
******session.update()相关类都改,session.merge()只改当前类,session.delete(),都要开启事务******
9 为了方便跟踪SQL执行,在hibernate.cfg.xml中加入
<property name="hibernate.show_sql">true</property>



持久化对象的状态
1 瞬时对象:使用new操作符初始化的对象不是立刻就持久的。
2 持久化对象:持久实例是任何具有数据库标识的实便函。
3 离线对象:Session关闭后持久化对象就变为离线对名象。
持久化对象的生命周期:

Transient对象new但在数据库中没有记录且没有被Session管理,
Persistent对象数据库中有记录,并Session在管理。在清理缓存(或脏数据检查)时与数据库同步。Session与一级缓存绑定.
Detached对象数据库中有记录,Session没有管理它。


创建HibernateUtils类,对重量级容量进行优化:
public class HibernateUtils {
    
private static SessionFactory factory;
    
//static块只执行一次
    static{
        
try {
            Configuration cfg 
= new Configuration().configure();
        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }


    
public static SessionFactory getSessionFactory(){
        
return factory;
    }

    
    
public static Session getSession(){
        
return factory.openSession();
    }

    
    
public static void closeSession(Session session){
        
if(session!=null){
            
if(session.isOpen()){
                session.close();
            }

        }

    }

}


Session接口的CRUD操作
瞬时/持久化/离线对象示例:
public class SessionTest extends TestCase {
    
public void testSave1(){
        Session session
=null;
        Transaction tx
=null;
        User user
=null;
        
try{
            session
=HibernateUtils.getSession();
            
            tx
=session.beginTransaction();
            
//Transient状态,未被Session管理
            user=new User();
            user.setName(
"ssssss");
            user.setPassword(
"123");
            user.setCreateTime(
new Date());
            user.setExpireTime(
new Date());
            
//persistent状态,被Session管理,当属性发生改变的时候,hibernate会自动和数据库同步。
            session.save(user);
            
            user.setName(
"王五");
            tx.commit();
        }
catch(Exception e){
            e.printStackTrace();
            tx.rollback();
        }
finally{
            HibernateUtils.closeSession(session);
        }

        
//detached状态,被Session踢出缓存,未被管理
        user.setName("张三");
        
try {
            session 
= HibernateUtils.getSession();
            session.beginTransaction();
            session.update(user);
            session.getTransaction().commit();
        }
 catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally{
            HibernateUtils.closeSession(session);
        }

    }

}

Session接口
加载数据get与load的区别:
    lazy代理:get没有,   load支持lazy;
查不存在数据:get返回null,load抛出异常ObjectNotFoundException

//get查询数据
public void testReadByGetMethod1(){
        Session session
=null;
        
try {
            session
=HibernateUtils.getSession();
            session.beginTransaction();
            
//采用get方式,马上发出查询sql,加载波User对象
            User user=(User)session.get(User.class"5c68c3ed206a327d01206a3281fa0001");
http://www.blogjava.net/Images/OutliningIn
分享到:
评论

相关推荐

    26. 尚硅谷_佟刚_Hibernate 课件及源代码

    3. "hibernate-1" - 这是源代码的第一部分,可能包含Hibernate的初步设置、基本的CRUD操作等入门内容,适合初学者上手。 4. "hibernate-4" - 可能涉及到Hibernate的第四部分,涵盖了一些高级主题,如HQL(Hibernate ...

    hibernate学习笔记-01helloword

    以上就是"hibernate学习笔记-01helloworld"涵盖的初步知识,这个简单的示例是进一步深入Hibernate学习的基础。通过这个起点,可以逐步学习到更复杂的持久化操作,如关联映射、级联操作、缓存策略等高级特性。

    Hibernate学习笔记特别详细

    以上便是对Hibernate基础的概览,实际开发中,还需要深入了解实体关系映射、集合映射、级联操作、缓存机制、事务管理、性能优化等方面的知识,才能更好地利用Hibernate提升开发效率并保证应用程序的稳定运行。...

    hibernate-初次操作具体步骤共4页.pdf.zip

    hibernate是Java开发中的一款流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,而无需直接编写SQL语句。...希望这份压缩文件能详细地引导你走过Hibernate的初步学习阶段。

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)--Chapter1

    最后,我们将引入Ajax,实现初步的客户端交互功能。 在这个过程中,你将学习到如何使用Struts的拦截器来添加全局行为,如登录验证;如何利用Spring的AOP进行权限控制;以及如何利用Ajax和JSON进行前后端通信。这将...

    hibernate3入门

    通过上述内容的学习,我们对Hibernate 3 的基础知识有了初步的认识,了解了它的历史背景、基本配置方法以及简单的O/R映射示例。随着深入学习,我们将探索更多高级特性,如缓存管理、事务处理以及更复杂的查询功能。...

    javaee实验五 大学本科生 hibernate

    1. **Hibernate框架基础**: Hibernate通过对象模型到关系数据库的映射,简化了数据层的编程。它主要包括以下三部分: - **持久化对象(Persistent Objects)**:这些对象是Java类,它们代表数据库中的表或记录。 -...

    Hibernate基础教程

    ### Hibernate基础教程知识点详解 #### 一、Hibernate简介(开源O/R映射框架) **Hibernate** 是一个开源的对象关系映射(Object/Relational Mapping,简称 O/R Mapping)框架,它为Java应用提供了使用关系型...

    hibernate配置示例

    **Hibernate配置示例详解** Hibernate,作为Java领域中的一款强大且流行的对象关系映射(ORM)框架,极大地简化了数据库操作。...通过这个示例,你应该对Hibernate有了初步的认识,可以以此为基础进一步学习和实践。

    hibernate2.1

    在"chapter1"这个子目录中,你可能找到关于Hibernate 2.1的初步教程或示例,这将帮助你了解如何配置项目、创建实体类、设置映射关系、执行基本的CRUD操作等。通过对这些内容的学习,你可以掌握Hibernate的基本用法,...

    Hibernate 4——Hello World

    在本文中,我们将深入探讨如何使用Hibernate 4框架进行初步的“Hello World”实践。Hibernate是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过将Java对象与数据库表之间的...

    hibernate开发流程 入门

    通过以上步骤,你就成功地完成了使用Hibernate进行数据库操作的初步开发。在实际项目中,你可能需要进一步学习和掌握更多的Hibernate特性,如懒加载、级联操作、事务管理等,以便更高效、灵活地管理数据。同时,理解...

    Hibernate之第1解之-hibernate_demo_1

    【标题】"Hibernate之第1解之-hibernate_demo_1" 涉及的主要内容是对Hibernate框架的基础理解和应用,这是Java开发中一个重要的持久化工具。这篇博客可能详细介绍了如何搭建Hibernate开发环境,以及进行初步的数据...

    hibernate入门数据简单插入

    这个文件可能包含了关于Hibernate入门的初步讲解,包括基本概念、环境配置、简单数据插入的示例代码等。 **总结** Hibernate作为Java的ORM框架,简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层...

    hibernate_reference3.2.1

    #### 首个Hibernate应用:从基础到进阶 ##### 第一部分:首个Hibernate应用概览 - **第一个类**:介绍了创建第一个Hibernate应用程序所需的最基本元素——定义一个持久化类。 - **映射文件**:阐述如何通过XML映射...

    Hibernate 进阶教程

    《Hibernate 进阶教程》是一本专为对Hibernate有初步了解并希望深入学习的开发者准备的手册。Hibernate作为Java领域中最流行的持久化框架之一,它极大地简化了数据库操作,使得开发者能够更专注于业务逻辑,而非繁琐...

    hibernate_persistence第02-16章书中源码

    第2章通常涉及Hibernate的基础,包括JDBC的初步介绍。这部分可能会讲解如何使用JDBC进行数据库连接、执行SQL查询和事务管理。Hibernate作为ORM工具,它的目标就是简化这些操作,将Java对象与数据库表之间的交互变得...

    Hibernate入门笔记.doc

    通过以上步骤,我们完成了Hibernate的初步配置,现在可以开始编写代码,使用Hibernate API来操作数据库,如保存、更新、查询和删除实体对象。理解并掌握这些基础,将有助于你在实际项目中更加高效地使用Hibernate,...

Global site tag (gtag.js) - Google Analytics