• Hibernate学习笔记


    一 . Hibernate的简介

      提到hibernate,首先的说说ORM框架技术(Object、Relation、Mapping),它的主要问题就是对象-关系的映射,怎么说呢?现在用的数据库大多数都是关系数据库,而关系数据库重在于表与表之间的关系连接。术语就为:一个持久化类和一个表对应,类的每个实例对应表的一条记录。其他就不说了,回到hibernate。ORM框架类型有很多,hibernate就是其中的一种,还有EJB框架(Enterprise javaBean)、iBATIS框架、TopLink框架等。

      1. 对象持久化 

        狭义的理解,“持久化”仅仅指把对象永久保存到数据库中
        广义的理解,“持久化”包括和数据库相关的各种操作:
            保存:把对象永久保存到数据库中。
            更新:更新数据库中对象(记录)的状态。
            删除:从数据库中删除一个对象。
            查询:根据特定的查询条件,把符合查询条件的一个或多个对象从数据库加载到内存中。
            加载:根据特定的OID,把一个对象从数据库加载到内存中。

       2.ORM的介绍 

        ORM(Object/Relation Mapping): 对象/关系映射
        ORM 主要解决对象-关系的映射

        

        ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。
        ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中

      3.Hibernate与MyBatis的对比

        Hibernate:
          非常优秀、成熟的 ORM 框架。
          完成对象的持久化操作
          Hibernate 允许开发者采用面向对象的方式来操作关系数据库。
          消除那些针对特定数据库厂商的 SQL 代码

        myBatis:
          相比 Hibernate 灵活高,运行速度快
          开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语句,并且熟练使用sql语句优化功能

      4.Hibernate的简单开发

        4.1 使用myEclipse创建Maven项目

        4.2 因为使用maver项目,所以只需在项目的pom.xml文件中进行如下配置,会自动下载jar包,配置如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>MyHibernate</groupId>
      <artifactId>MyHibernate</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <name/>
      <description/>
      <dependencies>
        <dependency>
          <groupId>org.apache.openejb</groupId>
          <artifactId>javaee-api</artifactId>
          <version>5.0-1</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.faces</groupId>
          <artifactId>jsf-api</artifactId>
          <version>1.2_04</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.1</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.faces</groupId>
          <artifactId>jsf-impl</artifactId>
          <version>1.2_04</version>
          <scope>provided</scope>
        </dependency>
        <!-- 此次导入Hiberante所需的jar包,此处导入核心jar包,所有关于hiberante的jar包都会导入 -->
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>4.2.20.Final</version>
        </dependency>
        
        <!-- 引入本地的jdbc的jar包 -->
        <dependency>
            <groupId>oracle</groupId>
              <artifactId>oracle</artifactId>
              <version>1.2.17</version>
            <scope>system</scope>
            <systemPath>C:appAdministratorproduct11.2.0dbhome_1jdbclibojdbc6.jar</systemPath>
        </dependency>
      </dependencies>
      <build>
        <sourceDirectory>${basedir}/src</sourceDirectory>
        <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>
        <resources>
          <resource>
            <directory>${basedir}/src</directory>
            <excludes>
              <exclude>**/*.java</exclude>
            </excludes>
          </resource>
        </resources>
        <plugins>
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
              <webappDirectory>${basedir}/WebRoot</webappDirectory>
              <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.5</source>
              <target>1.5</target>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>

      4.3 . 在src目录下创建HIberante的配置文件hibernate.cfg.xml

          hibernate,cfg.xml文件的生成:随便创建一个java Web项目,创建成功后,选中项目,鼠标点击右键,选择MyEclipse选项,---->选择Add Hibernate Annoatitio

        

        取消所有勾选选项,点击Next---->会出现下面的窗口

         

      鼠标点击Next继续,会弹出下列窗口:

        

        鼠标点击Next继续,会弹出如下窗口:

        

        鼠标点击Finish完成,完成后将生成的Configaction,cfg.xml文件拷入所需要的项目下,即可使用。

    <?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">
    
    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>
        <!-- 配置sessionFactory,表示获取连接,包含连接的四要素 
            注:hibernate 连接的四要素中的名字不能更改,必须是以下的名字
        -->
        <session-factory>
            <!--方言   告诉hibernate,连接的是oracle数据库     -->
            <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
            <property name="connection.url">jdbc:oracle:thin:local:1521:orcl</property>
            <property name="connection.username">scott</property>
            <property name="connection.password">tiger</property>
            <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
            <!-- 此标签用于是否在控制台输出sql语句  此处ture表示输出 -->
            <property name="show_sql">ture</property>
            <!--此标签表示引入hiberante的映射文件 -->
            <mapping resource="cn/et/hibernate/lesson01/Emp.hbm.xml"/>
        </session-factory>
        
    </hibernate-configuration>

      4.4 创建Emp对象类

         

    
    
    package cn.et.hibernate.lesson01;
    
    import java.util.Date;
    
    /**
     * Emp entity. @author MyEclipse Persistence Tools
     */
    
    public class Emp implements java.io.Serializable {
    
        // Fields
    
        private Short empno;
        private String ename;
        private String job;
        private Short mgr;
        private Date hiredate;
        private Double sal;
        private Double comm;
        private Short deptno;
    
        // Constructors
    
        /** default constructor */
        public Emp() {
        }
    
        /** full constructor */
        public Emp(String ename, String job, Short mgr, Date hiredate, Double sal,
                Double comm, Short deptno) {
            this.ename = ename;
            this.job = job;
            this.mgr = mgr;
            this.hiredate = hiredate;
            this.sal = sal;
            this.comm = comm;
            this.deptno = deptno;
        }
    
        // Property accessors
    
        public Short getEmpno() {
            return this.empno;
        }
    
        public void setEmpno(Short empno) {
            this.empno = empno;
        }
    
        public String getEname() {
            return this.ename;
        }
    
        public void setEname(String ename) {
            this.ename = ename;
        }
    
        public String getJob() {
            return this.job;
        }
    
        public void setJob(String job) {
            this.job = job;
        }
    
        public Short getMgr() {
            return this.mgr;
        }
    
        public void setMgr(Short mgr) {
            this.mgr = mgr;
        }
    
        public Date getHiredate() {
            return this.hiredate;
        }
    
        public void setHiredate(Date hiredate) {
            this.hiredate = hiredate;
        }
    
        public Double getSal() {
            return this.sal;
        }
    
        public void setSal(Double sal) {
            this.sal = sal;
        }
    
        public Double getComm() {
            return this.comm;
        }
    
        public void setComm(Double comm) {
            this.comm = comm;
        }
    
        public Short getDeptno() {
            return this.deptno;
        }
    
        public void setDeptno(Short deptno) {
            this.deptno = deptno;
        }
    
    }
    
    
    
     

      4.5 创建Hibernate的映射文件

    <?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">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="cn.et.hibernate.lesson01.Emp" table="EMP" schema="SCOTT">
            <id name="empno" type="java.lang.Short">
                <column name="EMPNO"/>
                <generator class="native" />
            </id>
            <property name="ename" type="java.lang.String">
                <column name="ENAME">
                    <comment>员工姓名</comment>
                </column>
            </property>
            <property name="job" type="java.lang.String">
                <column name="JOB">
                    <comment>员工职位</comment>
                </column>
            </property>
            <property name="mgr" type="java.lang.Short">
                <column name="MGR">
                    <comment>领导编号</comment>
                </column>
            </property>
            <property name="hiredate" type="java.util.Date">
                <column name="HIREDATE">
                    <comment>雇佣日期</comment>
                </column>
            </property>
            <property name="sal" type="java.lang.Double">
                <column name="SAL">
                    <comment>月薪</comment>
                </column>
            </property>
            <property name="comm" type="java.lang.Double">
                <column name="COMM">
                    <comment>奖金</comment>
                </column>
            </property>
            <property name="deptno" type="java.lang.Short">
                <column name="DEPTNO">
                    <comment>所属部门编号</comment>
                </column>
            </property>
        </class>
    </hibernate-mapping>

      4.6 定义测试类,测试通过Hiberante对数据库的增删改查操作

    
    
    package cn.et.hibernate.lesson01;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    public class TestHibernate {
        //表示增加
        @Test
        public void test1(){
            //创建sessionFactory
            SessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson01/hibernate.cfg.xml").buildSessionFactory();
            Session session = sf.openSession();
            //开启一个事物
            Transaction  t = session.beginTransaction();
            Emp emp = new Emp();
            emp.setEmpno(Short.parseShort("7903"));
            emp.setEname("aaa");
            session.save(emp);
    //        t.commit();
        }
        @Test
        public void testdelete(){
            //创建sessionFactory
            SessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson01/hibernate.cfg.xml").buildSessionFactory();
            Session session = sf.openSession();
            //开启一个事物
            Transaction  t = session.beginTransaction();
            Emp emp = new Emp();
            //表示获取该对象属性关联属性
            emp.setEmpno(Short.parseShort("7905"));
            //调用删除的方法
            session.delete(emp);
            //事物的提交
            t.commit();
        }
        
        @Test
        public void testupdate(){
            //创建sessionFactory
            SessionFactory sf = new Configuration().configure("/cn/et/hibernate/lesson01/hibernate.cfg.xml").buildSessionFactory();
            Session session = sf.openSession();
            //开启一个事物
            Transaction  t = session.beginTransaction();
            //此处要是不查询,会将表内其他数据修改,所以先要进行查询,将查询返回的对象进行修改
            Emp emp = (Emp) session.get(Emp.class, Short.parseShort("7904"));
            emp.setEname("abcde");
            t.commit();
        }
    }

      以上为Hibernate的简单的对数据库的增删改查的操作

  • 相关阅读:
    mysql8.0.12 安装+配置, Navicat Premium 12 安装+激活,mysql workbench 安装 (Unsupported Operating System 报错解决)
    给大厨写的R数据分析代码
    oracle 数据库表字段的缺失值统计 基于python
    Android onTouchEvent, onClick及onLongClick的调用机制
    android 2D绘图总结1
    详解Android动画之Interpolator插入器
    Android事件触发机制
    抗锯齿与postInvalidate
    详解Android动画之Frame Animation
    android surfaceView与view使用小结
  • 原文地址:https://www.cnblogs.com/xushirong/p/7051019.html
Copyright © 2020-2023  润新知