• 【Hibernate学习笔记】hibernate入门


    1.Hibernate是什么

    Hibernate是一个轻量级的ORMapping对象。主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获取的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,解放编程人员95%的任务。

    以下是Hibernate的特征(对应规则):

    (1).类和表的对应

    (2).类的属性和表的字段对应

    (3).类的实例和表中的具体一条记录对应

    (4).一个类对应多个表,一个表也可以对应多个类

    (5).DB中的表可以没有主键,但是Object中必须设置主键字段

    (6).DB中表与表之间的映射成Object之间的关系

    (7).Object中属性个数以及属性名称可以和DB中表的字段数目以及字段名称不一致

                                                    Object和DB的工作原理:

                               

    2.Hibernate有什么

    Hibernate将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate去处理

                                                       Hibernate体系结构

                         

     ·SessionFactory:针对单个数据库映射关系经过编译后的内存镜像,是线程安全的的(不可变),它是生成Session的工厂。

     ·Session:表示应用程序层与持久存储层之间的交互操作的一个单线程对象,此对象声明周期很短,隐藏了JDBC的连接,也是Transaction工厂。

     ·Transaction:应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用程序从底层具体的JDBC,JTA,CORBA事物隔离开。

     ·ConnectionProvider:生成JDBC连接的工厂(有数据库连接池的作用),通过抽象将应用从底层的DataSource或者DriverManager隔离开,供开发者使用。

     ·TransactionFactory:生成Transaction的工厂,供开发者使用。

    3.Hibernate入门:Hello World

    我们将完成以下的四个操作:Object,数据库表,两种配置文件,客户端程序调用Hibernate接口。

    第一步:创建工程,将hibernate-release中lib下的required下面的包全部jar包以及slf4j-log4j12-1.5.8.jar,log4j-1.2.16.jar以及JDBC驱动包导入工程下的lib目录

    第二步: Object类,有一下几个字段:uuid,userId,name,age

     1 package com.hb;
     2 
     3 public class UserModel {
     4     private String uuid;
     5     private String userId;
     6     private String name;
     7     private int age;
     8     public UserModel() {
     9         // TODO Auto-generated constructor stub
    10     }
    11     public String getUuid() {
    12         return uuid;
    13     }
    14     public void setUuid(String uuid) {
    15         this.uuid = uuid;
    16     }
    17     public String getUserId() {
    18         return userId;
    19     }
    20     public void setUserId(String userId) {
    21         this.userId = userId;
    22     }
    23     public String getName() {
    24         return name;
    25     }
    26     public void setName(String name) {
    27         this.name = name;
    28     }
    29     public int getAge() {
    30         return age;
    31     }
    32     public void setAge(int age) {
    33         this.age = age;
    34     }
    35 }

    第三步:创建数据库的表(使用的是mysql数据库)

    第四步:配置***.cfg.xml文件

    (1).缺省的名字是hibernate.cfg.xml

    (2).将文件存放到classe跟s目录下,开发中将其存放在src的根目录下即可。

    (3).主要配置以下的四个部分:

         1.与DB的连接

         2.可选的配置

         3.资源文件配置

         4.二级缓存

    (4).配置如下:

    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
        <session-factory>
            <!-- 在执行数据查询时,是否显示sql语句 -->
            <property name="hibernate.show_sql">true</property>
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
            <property name="connection.username">root</property>
            <property name="connection.password">tangjie</property>
            <property name="connection.pool_size">2</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="show_sql">true</property>
    
            <!-- 添加影射文件 -->
            <mapping resource="com/hb/UserModel.hbm.xml" />
            
        </session-factory>
    </hibernate-configuration>

    第五步:配置***.hbm.xml

    (1).与被描述的类同名,如:UserModel.hbm.xml

    (2).存放位置与所描述类存放在同一文件夹下

    (3).主要有如下四部分配置:

         1.类和表的映射

         2.主键的映射

         3.类的属性和DB字段的映射

         4.关系的映射

         5.配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    '-//Hibernate/Hibernate Mapping DTD 3.0//EN'
    'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
    <hibernate-mapping>
        <class name="cn.javass.h4.hello.UserModel" table="tbl_user">
            <id name="uuid">
                <generator class="assigned" />
            </id>
            <property name="userId"></property>
            <property name="name"></property>
            <property name="age"></property>
        </class>
    </hibernate-mapping>

    第六步:编写客户端类

     1 package com.hb;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 
     8 public class Client {
     9 
    10     public static void main(String[] args) {
    11         // 读取hibernate.cfg.xml文件,创建Session工厂
    12         SessionFactory sf = new Configuration().configure()
    13                 .buildSessionFactory();
    14 
    15         Session s = null;
    16         Transaction t = null;
    17 
    18         try {
    19             // 准备数据
    20             UserModel um = new UserModel();
    21             um.setUuid("1");
    22             um.setUserId("id1");
    23             um.setName("name1");
    24             um.setAge(1);
    25             // 获得session对象
    26             s = sf.openSession();
    27             t = s.beginTransaction();
    28             s.save(um);
    29             t.commit();
    30         } catch (Exception err) {
    31             t.rollback();
    32             err.printStackTrace();
    33         } finally {
    34             s.close();
    35         }
    36     }
    37 }

    运行结果如图所示:

    到这里,我们完成了第一个Hibernate的案例,学会最基础的用法。后续学习笔记会持续更新...

     ·

                                             

  • 相关阅读:
    HDU 1098 Ignatius's puzzle 也不大懂
    HDU 1099 Lottery
    图算法-Prime
    并查集
    CSS笔记2
    css笔记1
    HDU 5019 Revenge of GCD
    POJ 2255 Tree Recovery
    判断两条线段是否相交
    PAT 数列求和-加强版   (20分)(简单模拟)
  • 原文地址:https://www.cnblogs.com/tagie/p/3335532.html
Copyright © 2020-2023  润新知