Java学习笔记Java 杂谈

Hibernate

2017-12-29  本文已影响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运行的基本要素,可以执行存储,持久化,事务管理等操作。

上一篇下一篇

猜你喜欢

热点阅读