博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5 -- Hibernate的基本用法 --2 2 Hibernate的数据库操作
阅读量:4319 次
发布时间:2019-06-06

本文共 5005 字,大约阅读时间需要 16 分钟。

  在所有的ORM框架中有一个非常重要的媒介 : PO(持久化对象:Persistent Object)。持久化对象的作用是完成持久化操作,简单地说,通过该对象可对数据执行增、删、改的操作 ------ 以面向对象的方式操作数据库。

  Hibernate直接采用POJO作为持久化类。为了使POJO具备持久化操作的能力,需要添加注解:@Entity、@Table、@Id、@GeneratedValue等。

  POJO : News

package hibernate5chapter;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="news_inf")public class News {    //    消息类的标识属性    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    //消息标题    private String title;    //消息内容    private String content;    /**     * getter / setter     */}

    ⊙ @Entity注解声明该类是一个Hibernate的持久化类

    ⊙ @Table 指定该类映射的表。此处指定该类映射到news_inf表。

    ⊙ @Id 用于指定该类的标识属性。所谓标识属性,就是可以唯一标识对象的属性,标识属性通常映射到数据表的主键列。

    ⊙ @GeneratedValue 用于指定主键生成策略,其中stategy属性指定了主键生成策略为IDENTITY策略,也就是采用自动增长的主键生成策略。

  PO = POJO + 持久化注解

  注意:

    Hibernate基本上直接使用了JPA 2.1 的标准注解。@Entity、@Table、@Id、@GeneratedValue都是JPA的标准注解,位于javax.persistence包下。在Hibernate解压逻辑的lib\required目录中包含一个hibernate-jpa-x.x-api-x.x.x.Final.jar文件,该文件其实就是JPA规范的JAE包。

    通过映射注解,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类的属性与数据表的各列之间的对应关系。但无法知道连接哪个数据库,以及连接数据库时所用的连接池、用户名和密码等详细信息。这些信息对于所有的持久化类都是通用的,Hibernate把这些通用信息称为配置信息,配置信息使用配置文件指定。

    Hibernate配置文件既可以使用*.properties属性文件,也可以使用XML文件配置。

    XML : hibernate.cfg.xml<?xml version="1.0" encoding="UTF-8"?><!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='UTF-8'表明XML文件的编码方式 --><!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件 -->

com.mysql.jdbc.Driver
jdbc:mysql:///hibernate
root
System
20
1
5000
100
3000
2
true
org.hibernate.dialect.MySQL5InnoDBDialect
   
update
true
true

  Hibernate 配置文件的默认文件名为hibernate.cfg.xml,当程序调用对象的configure()方法时,Hibernate将自动加载该文件。

  提示:

    数据源是一种提高数据库连接性的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数据库连接保存在连接池中。当程序需要进行数据库访问时,无须重新获取数据库连接,而是从连接池中取出一个空闲的数据库连接。当程序使用数据库连接访问数据库结束后,无须关闭数据库连接,而是将数据库连接归还给连接池即可。通过这种方式,就可避免频繁地获取数据库连接、关闭数据库连接所导致的性能下降。

  需要使用C3P0连接池的话,将optional子目录下的c3p0整个目录下的所有JAR包也添加到系统的类加载路径下。

  <session-factory.../>元素还可接受多个<mapping.../>元素,每个<mapping.../>元素指定一个持久化类,<mapping.../>元素的class属性指定Hibernate持久化类的类名。如果有多个持久化类,在此处罗列多个<mapping.../>元素即可。

  Class : NewsManager

package hibernate5chapter;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;public class NewsManager {    public static void main(String[] args) {        // 实例化Configuration        // 不带参数的configure()方法默认加载hibernate.cfg.xml文件        // 如果传入abc.xml作为参数,则不在加载hibernate.cfg.xml,改为加载abc.xml        Configuration conf = new Configuration().configure();// 以Configuration实例创建SessionFactory实例        SessionFactory sessionFactory = conf.buildSessionFactory();        // 创建Session        Session session = sessionFactory.openSession();        // 开始事务        Transaction transaction = session.beginTransaction();        // 创建消息对象        News news = new News();        // 设置消息标题和消息内容        news.setTitle("Angel");        news.setContent("Spend all your time waiting for that second chance");        // 保存消息        session.save(news);        // 提交事务        transaction.commit();        // 关闭Session        session.close();        sessionFactory.close();        /**         * 程序先创建一个News对象,再使用Session的save()方法来保存News对象即可。         * 当Java程序以面向对象的方式来操作持久化对象时,Hibernate负责将这种操作转换为底层SQL操作。         */    }}

  使用Hibernate进行持久化操作步骤:

    ① 开发持久化类,有POJO + 持久化注解组成

    ② 获取Configuration

    ③ 获取SessionFactory

    ④ 获取Session,打开事务

    ⑤ 用面向对象的方式操作数据库

    ⑥ 关闭事务,关闭Session

  随PO与Session的关联关系,PO可有如下三种状态:

    ⊙ 瞬态 : 如果PO实例从未与Session关联过,该PO实例处于瞬态状态。

    ⊙ 持久化 : 如果PO实例与Session关联起来,且该实例对应到数据库记录,则该实例处于持久化状态。

    ⊙ 脱管 : 如果PO实例曾经与Session关联过,但因为Session的关闭等原因,PO实例脱离了Session的管理,这种状态被称为脱管状态。

  对PO的操作必须在Session管理下才能同步到数据库。Session由SessionFactory工厂产生,SessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SessionFactory对象。SessionFactory对象有Configuration对象生成,Configuration对象负责加载Hibernate配置文件。

啦啦啦

啦啦啦

啦啦啦

转载于:https://www.cnblogs.com/ClassNotFoundException/p/6719308.html

你可能感兴趣的文章
去除IDEA报黄色/灰色的重复代码的下划波浪线
查看>>
Linux发送qq、网易邮件服务配置
查看>>
几道面试题
查看>>
【转】使用 WebGL 进行 3D 开发,第 1 部分: WebGL 简介
查看>>
js用正则表达式控制价格输入
查看>>
chromium浏览器开发系列第三篇:chromium源码目录结构
查看>>
java开发操作系统内核:由实模式进入保护模式之32位寻址
查看>>
第五讲:单例模式
查看>>
Python编程语言的起源
查看>>
Azure ARMTemplate模板,VM扩展命令
查看>>
在腾讯云上创建您的SQL Cluster(4)
查看>>
linux ping命令
查看>>
Activiti源码浅析:Activiti的活动授权机制
查看>>
数位dp整理
查看>>
UNIX基础知识
查看>>
bzoj 1179: [Apio2009]Atm
查看>>
利用LDA进行文本聚类(hadoop, mahout)
查看>>
第三周作业
查看>>
js添加删除行
查看>>
浏览器性能测试网址
查看>>