Hibernate

作者: 廖马儿 | 来源:发表于2017-12-29 14:22 被阅读3次

    ORM概念

    O:Object 对象
    R:Relation 关系 (关系型数据库)外键就是关系
    M:Mapping 映射

    关系型数据库,对应的有对象型数据库,比较少用。现在主流的是关系型数据库。
    MYSQL, Oracle...等都是关系型数据库。

    ORM解决什么问题?
    存储:能把对象的数据直接保存到数据库
    获取:能直接从数据库拿到一个对象
    要做到上面2点,必须要有映射。

    图片.png

    Hibernate和ORM的关系是什么?
    Hibernate实现了 ORM。
    ORM相当于是一种思想。


    比较好的hibernate博文:
    http://blog.csdn.net/jiuqiyuliang/article/details/39078749


    图片.png

    1.Hibernate 案例
    搭建一个Hibernate环境,开发步骤:

    1)下载源码:
    版本:hibernate-distribution-3.6.0.Final
    2)引入jar文件
    hibernate3.jar核心 + required 必须引入的(6个)+ jpa + 数据库驱动包
    3)写对象以及对象的映射

    Employee.java    对象
    Employee.hbm.xml    对象的映射
    

    4)src/hibernate.cfg.xml
    数据库连接配置
    加载所有的映射(*.hbm.xml) // 可以不写.hbm, 为了规范和能够找到hibernate的映射文件,方便些。

    Hibernate的schema:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <!--   
        <hibernate-mapping>一般不去配置,采用默认即可。  
        default-cascade="none":默认的级联风格,表与表联动。  
        default-lazy="true":默认延迟加载  
     --> 
    
    <hibernate-mapping>
        
    </hibernate-mapping>
    
    图片.png
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration xmlns="http://www.hibernate.org/xsd/hibernate-configuration">
        <session-factory>
            <!-- 数据库连接配置 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    
            <!-- 加载映射 -->
            <mapping resource="com/ypd/a/entity/Employee.hbm.xml"></mapping>
        </session-factory>
    </hibernate-configuration>
    

    注意:
    在hibernate.cfg.xml或者是persistence.xml文件下面需要配置javax.persistence.validation.mode属性。

    3.写对象以及对象的映射

    Employee.java 对象
    Employee.hbm.xml 对象的映射(映射文件)
    4.src/hibernate.cfg.xml 主配置文件
    作用:
    1)加载数据库连接
    2)加载所有的映射(*.hbm.xml)


    4.Hibernate Api

    1)Configuration 创建管理类对象
    config.configure(); 加载主配置文件的方法。默认加载src/hibernate.cfg.xml
    Config.configure("cn/config/hibernate.cfg.xml"); 加载指定位置的指定文件
    2)SessionFactory session的工厂(或者说代表了这个hibernate.cfg.xml配置文件)
    sf.openSession(); 创建一个session对象
    sf.getCurrentSession(); 创建session或获取session对象

    3)Session对象
    session对象维护了一个连接(Connection),代表了与数据库连接的会话。
    Hibernate最重要的对象:只要使用Bibernate与数据库曹组,都用到了这个对象。
    session.beginTransaction(); 开启一个事务;hibernate要求所有的与数据库的操作必须有事务的环境,否则报错。

    Session.save()obj; 保存一个对象

    4)Transaction hibernate 事务对象

    @Test
       public void testUpdate() throws Exception {
    
           // 对象
           Employee emp = new Employee();
           emp.setEmpId(1);
           emp.setEmpName("邓海3");
           emp.setWorkDate(new Date());
           // 创建session
           Session session = sf.openSession();
           Transaction ts = session.beginTransaction();
    
           // 执行操作
           session.update(emp);  // 执行更新的时候,必须要有组件
           ts.commit();  // 这里才是执行
       }
    

    更新:

    session.save(obj);  // 保存一个对象
    session.update(emp); // 更新一个对象
    

    主键查询:

    session.get(Employee.class, 1);  // 主键查询
    session.load(Employee.class, 1);  // 主键查询 (支持懒加载)
    

    保存或者查询:

    session.saveOrUpdate(emp);  // 没有设置主键,执行保存;有设置主键,执行更新操作。
    

    5.现在hibernate 一般是要么实体类映射生成数据库表,要么数据库表映射生成实体类。


    HQL

    hibernate -- HQL语句总结
    参考:http://www.cnblogs.com/focusChen/articles/2401892.html


    Hibernate的注释

    JPA:JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系.

    比如你去当当网上买书籍,当当网就给你一个订单。
    通过上面的业务活动描述你可以分析得出:一个订单可以包含一个或多个订单项.那么我们将将订单和订单项设计关系为(1:N)一对多的关系(排除0)。得出关系我们就使用JPA来实现这个关系(关于建立JPA和基本的配置我就不再说了,如果不明白请看JPA入门篇)。

    @OneToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST,CascadeType.MERGE, CascadeType.REMOVE },mappedBy ="order") //这里配置关系,并且确定关系维护端和被维护端。mappBy表示关系被维护端,只有关系端有权去更新外键。这里还有注意OneToMany默认的加载方式是赖加载。当看到设置关系中最后一个单词是Many,那么该加载默认为懒加载   
        public Set<OrderItem> getItems() {   
            return items;   
        }   
    

    JPA @MappedSuperclass注释:

    基于代码复用和模型分离的思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中。


    Hibernate五大核心接口

    1)Session
    2)Transaction
    3)Query
    4)SessionFactory
    5)Configuration
    这5个接口构成了hibernate运行的基本要素,可以执行存储,持久化,事务管理等操作。

    相关文章

      网友评论

        本文标题:Hibernate

        本文链接:https://www.haomeiwen.com/subject/elrugttx.html