zoukankan      html  css  js  c++  java
  • 2.0、Hibernate框架的简单搭建

    一、Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,用于Java代码和数据库之间的交互。

      1、核心:Java和数据库之间的映射关系。

      2、hibernate的缓存:

        a)、一级缓存:hibernate首次查询之后会将查询结果存放在一级缓存中,第二次查询的时候会直接从缓存中获取数据,如果缓存中没有采去查询数据库。hibernate自带一级缓存。

        b)、二级缓存:把运行结果存储在硬盘上,执行的时候先从一级缓存中去找,如果没有找到就去二级缓存,二级缓存需要借助第三方插件。

      3、配置方法:

        A)、在lib目录下加载Hibernate所需的jar包

        B)、创建一个与数据库相对应的类(package的名字为bean)

        C)、配置数据库中的表的字段与类中的各个字段之间的对应关系(.xml文件配置或者用注解的方式配置)

        D)、往src目录下复制一个hibernate.cfg.xml文件,并在该文件中添加相应的映射文件或者是映射类。(注意不能添加多余的映射路径,否则会报错

        E)、在某个方法中编写对数据库的操作语言:

          a)、创建Configurration对象读取hibernate的配置文件

          b)、创建sessionFactory工厂类,并通过openSession()方法获取session(即创建一次会话)

          c)、创建一个实例(查询和更新的时候需要)

          d)、开启实物(增删改)

          e)、设置session的任务

          f)、提交实物(增删改)

    二、搭建一个简单的Hibernate框架(.xml):

      1、创建一个web项目,将Hibernate框架所需的jar包拷贝到lib目录下。

      2、封装一个HibernateTools工具类,简化对数据库操作时的代码。以后可以直接粘贴调用。

     1 /**
     2  * 
     3  * 项目名称:ccc
     4  * 类名称:  HibernateTools
     5  * 描述:    -HibernateTools工具类
     6  * 修改时间:
     7  * 修改备注:-
     8  */
     9 public class HibernateTools {
    10 
    11     // 声明一个工厂类
    12     private static SessionFactory sf;
    13     //线面这句是一个静态代码块,在应用程序启动的时候就会执行,而且只会执行一次
    14     static{
    15         //1、创建Configuration对象,用于读取xml文件
    16         Configuration conf = new Configuration();
    17         conf.configure("/hibernate.cfg.xml");
    18         // 2、通过buildSessionFactory()创建SessionFactory的工厂类
    19         sf = conf.buildSessionFactory();
    20     }
    21     
    22     public static Session openSession(){
    23         // 3、通过openSession()获取一个会话
    24         return sf.openSession();
    25     }
    26 }

      3、创建一个StudentBean类

     1 package com.st.bean;
     2 
     3 public class StudentBean {
     4     private int snum; //学号
     5     private String sname;//姓名
     6     private int sage;  //年龄
     7     public int getSnum() {
     8         return snum;
     9     }
    10     public void setSnum(int snum) {
    11         this.snum = snum;
    12     }
    13     public String getSname() {
    14         return sname;
    15     }
    16     public void setSname(String sname) {
    17         this.sname = sname;
    18     }
    19     public int getSage() {
    20         return sage;
    21     }
    22     public void setSage(int sage) {
    23         this.sage = sage;
    24     }
    25 }

      4.拷贝一个xxx.hbm.xml文件到com.st.bean目录下,重命名为student.hbm.xml,并修改class标签中的属性:使Student表与StudentBean类之间存在映射关系:

     1 <?xml version="1.0"?>
     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.st.bean.StudentBean" table="STUDENT">
     9         <id  name="snum" column="SNUM">
    10             <generator class="assigned"></generator>
    11         </id>
    12         <property name="sname" column="SNAME"></property>
    13         <property name="sage" column="SAGE"></property>
    14     </class>
    15 </hibernate-mapping>
    16 <!-- 类和数据库表之间的映射关系:
    17 <calss  name="Java类"  table="数据库表">
    18             <id name="Java类的字段"   column="表里面的字段">
    19                 <generator  class="主键生成规则" ></generator>
    20             </id>
    21             <property name="Java类的字段" column="数据库表的字段" type="java.lang.String"></property>
    22              简单的一对多  Java类里面一的一方需要有 多的一方的一个 set集合
    23               <set  name="类里面的集合的 变量名"  cascade="all" inverse="true" >
    24                  <key cloumn=""></key>
    25                  <one-to-many  class="多方的类的地址">
    26               </set>
    27              多的一方 在Java类里面 写一个 一的一方的对象 
    28              <many-to-one name="对象的变量名" column=""> 
    29              多对多 :Java类里面都有 另一方的一个 set集合 
    30              <set  name="类里面的集合的 变量名" table="中间表的表名" cascade="all" inverse="true">
    31             <key column="本类的表 和第三方表的关联字段"></key>
    32             <many-to-many class="另一个对象的地址"  column="另一对象对应的表和第三方表的关联字段">
    33              </set>
    34          
    35         </class>
    36  -->

       5、拷贝一个hibernate.cfg.xml文件到src文件下,删除hibernate.xml文件中无用的映射文件后,添加映射文件-student.hbm.xml。

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory>
     7         <property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
     8         <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
     9         <property name="hibernate.connection.username">scott</property>
    10         <property name="hibernate.connection.password">tiger</property>
    11         <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
    12         
    13         <!-- 显示SQL,默认为false -->
    14         <property name="hibernate.show_sql">true</property>
    15         
    16         <!-- 添加一个映射文件 -->
    17          <mapping resource="com/st/bean/student.hbm.xml"/> 
    18     </session-factory>
    19 </hibernate-configuration>

      6、在新建一个StudentTest类,在里面即可编写相应的增删改查的代码:

     1 package com.st.test;
     2 
     3 import java.util.List;
     4 
     5 import org.hibernate.Criteria;
     6 import org.hibernate.Session;
     7 import org.hibernate.Transaction;
     8 import org.hibernate.criterion.Restrictions;
     9 import org.junit.Test;
    10 
    11 import com.st.Tools.HibernateTools;
    12 import com.st.bean.StudentBean;
    13 
    14 public class StudentTest {
    15 
    16     /*
    17      * 添加一组数据
    18      */
    19     @Test
    20     public void test1(){
    21         // 获取一个会话
    22         Session session = HibernateTools.openSession();
    23         //开启一次事物
    24         Transaction tran = session.beginTransaction();
    25         StudentBean student =new  StudentBean();    
    26         //student.setSnum(21);//设置为主键自增长时不用指定主键的值;
    27         student.setSname("李冬林");
    28         student.setSage(22);
    29         session.save(student);
    30         //确认提交事物
    31         tran.commit();
    32     }
    33     /*
    34      * 删
    35      */
    36     @Test
    37     public void test2(){
    38         // 获取一个会话
    39         Session session = HibernateTools.openSession();
    40         Transaction tran = session.beginTransaction();
    41         StudentBean student = new StudentBean();
    42         student.setSnum(28);
    43         session.delete(student);
    44         tran.commit();
    45     }
    46     /*
    47      * 改
    48      */
    49     @Test
    50     public void test3(){
    51         // 获取一个会话
    52         Session session = HibernateTools.openSession();
    53         Criteria c = session.createCriteria(StudentBean.class);
    54         //开启一次事物
    55         Transaction tran = session.beginTransaction();
    56         
    57         c.add(Restrictions.eq("snum", 30));
    58         //获取这个条件的原有数据
    59         StudentBean student =(StudentBean) c.uniqueResult();
    60         student.setSage(21);
    61         student.setSname("陈泽俊");
    62         session.update(student);
    63         tran.commit();
    64     }
    65     /*
    66      * 查
    67      */
    68     @Test
    69     public void test4(){
    70         // 获取一个会话
    71         Session session = HibernateTools.openSession();
    72         //创建一个条件
    73         Criteria c = session.createCriteria(StudentBean.class);
    74         //c.add(Restrictions.eq("snum",30));
    75         List<StudentBean> list = c.list();
    76         for(StudentBean a: list){
    77             System.out.println(a.getSnum()+"---"+a.getSname()+"---"+a.getSage());
    78         }
    79     }
    80 }

    二、用注解的方式搭建一个简单的Hibernate框架:

      1、在上面的基础上再往lib目录先添加一个包-hibernate-jpa-2.0-api-1.0.0.Final.jar

      2、同第一种方法

      3、创建一个StudentBean类,并在这个类上添加注解(注意:注解引的包是:javax.persistence.*不是org.hibernate.annotations.*)

     1 package com.st.bean;
     2 
     3 import javax.persistence.Column;
     4 import javax.persistence.Entity;
     5 import javax.persistence.GeneratedValue;
     6 import javax.persistence.Id;
     7 import javax.persistence.Table;
     8 
     9 import org.hibernate.annotations.GenericGenerator;
    10 
    11 
    12 
    13 @Entity                                              //声明一个实体
    14 @Table(name="student")                               //与表之间的映射
    15 @GenericGenerator(name="genId",strategy="increment")//声明主键生成方式为自增长
    16 public class StudentBean {    
    17     @Id    
    18     @GeneratedValue(generator = "genId")            //指定主键生成策略
    19     @Column(name="SNUM")                                //snum与表里的SUM字段相对应
    20     private int snum; //学号
    21     @Column(name="SNAME")
    22     private String sname;//姓名
    23     @Column(name="SAGE")
    24     private int sage;  //年龄
    25     
    26     
    27     public int getSnum() {
    28         return snum;
    29     }
    30     public void setSnum(int snum) {
    31         this.snum = snum;
    32     }
    33     public String getSname() {
    34         return sname;
    35     }
    36     public void setSname(String sname) {
    37         this.sname = sname;
    38     }
    39     public int getSage() {
    40         return sage;
    41     }
    42     public void setSage(int sage) {
    43         this.sage = sage;
    44     }
    45 }

      4.拷贝一个xxx.hbm.xml文件到com.st.bean目录下,重命名为student.hbm.xml,并修改class标签中的属性:使Student表与StudentBean类之间存在映射关系:

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory>
     7         <property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
     8         <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
     9         <property name="hibernate.connection.username">scott</property>
    10         <property name="hibernate.connection.password">tiger</property>
    11         <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
    12         
    13         <!-- 显示SQL,默认为false -->
    14         <property name="hibernate.show_sql">true</property>
    15         
    16         <!-- 添加一个映射文件 -->
    17          <mapping class ="com.st.bean.StudentBean"/> 
    18     </session-factory>
    19 </hibernate-configuration>

      5、同上面第6步。

  • 相关阅读:
    引入RabbitMQ后,如何保证全链路数据100%不丢
    使用logstash迁移elasticsearch
    内网代理转发工具
    MSSQL存储过程命令执行
    win10 家庭版升级专业版密钥
    clash TUN模式
    windows实战常用命令
    webshell之jsp免杀
    tmux的使用方法
    钓鱼邮件从入门到放弃
  • 原文地址:https://www.cnblogs.com/czj-zhm/p/5857261.html
Copyright © 2011-2022 走看看