码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate5--课程笔记1

时间:2017-01-14 14:44:06      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:http   orm框架   介绍   jar   接口   个数   过程   开发   etag   

Hibernate简介:

  Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。 
                                                 ----  百度百科《Hibernate》

  实现持久化的方法:

    (1)对象的序列化

      即实现了Serializable接口的类。适合于少量的对象进行暂时的持久化,适合于在网络上传输对象。但不符合企业级应用的需要。因为企业应用中对数据的要求是大量的、长时间保存的、需要进行大规模查询。

    (2)JDBC

      优点:功能完备、从理论上说效率是最高的;可以存储海量的数据并且适合进行大规模检索

      缺点:开发效率和维护效率低;开发难度大,代码量大,占到到总代码量的1/3,或1/2

    (3)ORM

      ORM,即Object-Relational Mapping,对象关系映射。它是一种解决问题的思路,是一种思想。它的实质就是将关系数据库中的业务数据用对象的形式表示出来,并通过面向对象的方式将这些对象组织起来,以实现系统业务逻辑。或者说,ORM就是内存中的对象与数据库中的数据间的映射关系。

              技术分享

      ORM的特点:开源的,实现了JDBC的封装, 实现了简单的API,轻量级解决方案,持久化对象是一个POJO类。最有名的ORM框架就是Hibernate。

  JPA框架:

    JPA,Java Persistence API,是Java EE 5的标准ORM接口。它是一种规范,一套接口,但不是实现。用于实现这一规范的ORM很多,其中Hibernate就是之一。

  JPA、ORM、Hibernare之间的关系:

    ORM是一种思想。JPA则是这种思想的具体的表现形式,是以Java语法规范表现出来的一种形式,是一套标准接口。Hibernate则是这套接口的具体实现。

  Hibernate5基本jar包:略

 

 

Hibernate第一个程序:

  1. Hibernate工作原理:

    技术分享

 

    其中hibernate.cfg.xml文件名不能更改,*.hbm.xml中的*,最好用对应的类名替代。

  2. 搭建Hibernate程序过程:

    (1) 定义持久化对象:

 1 package com.tongji.beans;
 2 
 3 public class Student {
 4     private Integer id; //定义实体的id要用Integer不能用int,因为底层要判断id == null
 5     private String name;
 6     private int age;
 7     private double score;
 8     
 9     public Student() {
10         super();
11     }
12 
13     public Student(String name, int age, double score) {
14         super();
15         this.name = name;
16         this.age = age;
17         this.score = score;
18     }
19 
20     public Integer getId() {
21         return id;
22     }
23 
24     public void setId(Integer id) {
25         this.id = id;
26     }
27 
28     public String getName() {
29         return name;
30     }
31 
32     public void setName(String name) {
33         this.name = name;
34     }
35 
36     public int getAge() {
37         return age;
38     }
39 
40     public void setAge(int age) {
41         this.age = age;
42     }
43 
44     public double getScore() {
45         return score;
46     }
47 
48     public void setScore(double score) {
49         this.score = score;
50     }
51 
52     @Override
53     public String toString() {
54         return "Student [id=" + id + ", name=" + name + ", age=" + age + ", score=" + score + "]";
55     }
56     
57 }

    (2)配置映射文件(*.hbm.xml):

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5   
 6 <hibernate-mapping>
 7     <!-- 类到表的映射,属性到字段的映射 -->
 8     <class name="com.tongji.beans.Student" table="t_student">
 9         <id name="id" column="tid">
10             <generator class="native"/>
11         </id>
12         <property name="name" column="tname"/>
13         <property name="age" column="tage"/>
14         <property name="score" column="tscore"/>
15     </class>
16 </hibernate-mapping>

     其中,约束是在/org/hibernate/hibernate-mapping-3.0.dtd中查找,name是类名和类中的属性名,column是表名和对应的字段名,generator后面再介绍。

   (3) 配置住配置文件(hibernate.cfg.xml):

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5     
 6 <hibernate-configuration>
 7     <session-factory>
 8         <!-- DB连接四要素 -->
 9         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
10         <property name="hibernate.connection.url">jdbc:mysql:///mytest?useSSL=false</property>
11         <property name="hibernate.connection.username">root</property>
12         <property name="hibernate.connection.password">248xiaohai</property>
13         <!-- 方言 -->
14         <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
15         <!-- C3P0数据源 -->
16         <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
17         <!-- 当前Session上下文 -->
18         <property name="hibernate.current_session_context_class">thread</property>
19         <!-- 自动建表 -->
20         <property name="hibernate.hbm2ddl.auto">update</property>
21         <!-- 显示SQL -->
22         <property name="hibernate.show_sql">true</property>
23         <!-- 格式化SQL -->
24         <property name="hibernate.format_sql">true</property>
25         
26         <!-- 注册映射文件 -->
27         <mapping resource="com/tongji/beans/Student.hbm.xml"/>
28     </session-factory>
29 </hibernate-configuration>

     约束是在/org/hibernate/hibernate-configuration-3.0.dtd种查找的;

    DB连接四要素,同JDBC要求(数据库连接的基本要求);

    方言,每个数据库管理系统都有自己的方言,每个数据库管理系统的不同版本也有自己的方言,选项在org.hibernate.dialect中查找

    C3P0数据源,数据源是指数据库连接池,由于进行数据库连接比较耗时,系统就建立了一个数据路连接池,其中存放了一定数量的数据库连接,方便需要操作数据库时,直接从这个池中拿取数据库连接。C3P0是其中的一种数据源;

    当前Session上下文,指定缓存存放的位置,指定thread,表示将session放在每个线程中;

    自动建表,有三个选项:create(每次执行都重新创建表)、update(第一次执行创建表,之后的每次执行都是更新表)、create-drop;

    注册映射文件,前面配置的映射文件要在主配置文件中注册;

    显示SQL、格式化SQL主要为了调试,在执行Hibernate程序时,显示底层自动生成的sql语句。

  (4) 定义测试类:

 1 package com.tongji.test;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6 import org.junit.Test;
 7 
 8 import com.tongji.beans.Student;
 9 
10 public class MyTest {
11     @Test
12     public void testSave() {
13         //1. 加载主配置文件
14         Configuration configure = new Configuration().configure();
15         //2. 创建Session工厂
16         SessionFactory SessionFactory = configure.buildSessionFactory();
17         //3. 获取Session
18         Session session = SessionFactory.getCurrentSession();
19         try {
20             //4. 开启事务
21             session.beginTransaction();
22             //session.getTransaction().begin();  同样
23             //5. 操作
24             Student student = new Student("张三", 23, 93.5);
25             session.save(student);
26             //6. 事务提交
27             session.getTransaction().commit();
28         } catch (Exception e) {
29             e.printStackTrace();
30             //7. 事务回滚
31             session.getTransaction().rollback();
32         }
33     }
34 }

     注意:session必须在事务之内操作,因为session是操作缓存中的数据,只有提交了事务之后,缓存中的数据才能写到数据库中。

Hibernate5--课程笔记1

标签:http   orm框架   介绍   jar   接口   个数   过程   开发   etag   

原文地址:http://www.cnblogs.com/qjjazry/p/6285285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!