Hibernate

小编 2026-07-14 阅读:178 评论:0
什么是Hibernate? hibernate是一个专注于数据持久化的框架, 是主流的对象 - 关系映射工具 优点: 1. 对面向对象特性支持良好( Objective ) 2. 可移植性好 缺点...

什么是Hibernate?

hibernate是一个专注于数据持久化的框架, 是主流的对象 - 关系映射工具

优点:

1. 对面向对象特性支持良好( Objective )

2. 可移植性好

缺点:

1. 很难处理对特定数据库的优化

2. 不适合大规模的批量数据处理

什么是持久化?

Persistence, 持久化, 指的是将java应用程序中的对象保存到数据库, 将对象属性值的更新或删除同步到数据库, 或者是把从数据库查询得到的结果集转换为对象, 简言之, 对数据库的查询, 保存, 删除, 更新操作(CRUD)都称为持久化。

什么是ORM?

ORM, Object Relationship Mapping, \"对象 - 关系\"映射, 指的是把对象及对象间的关系映射到数据库中的表及表间关系.

为什么需要ORM ?

java程序中偏好用对象来描述数据, 而传统的关系型数据库(如MySQL, MSSQLServer, Oracle等)偏好用表中的行(一行又包含多个列的值)来描述数据, 所以在进行应用程序开发时, 需要在这2种描述形式之间作转换, hibernate在这一方面表现非常优秀.

class(类) -> table(表)

class.property(类的属性) -> table.column(表的列)

class.oid(对象的id) -> table.pk(表的主键)

什么是OID?

OID, Object ID, 通常对应着数据表中的主键列, 受hibernate管理的对象其OID值不能重复, 否则认为是同一对象, 所以OID实际上用于唯一标识一个实体对象

此为hibernate的主键策略

Hibernate的体系结构

\"\"

描述: 应用程序将需要持久化的对象交给hibernate, hibernate通过读取hibernate.cfg.xml和mapping映射文件的信息, 决定如何持久化到数据库

使用Hibernate的步骤

1. 导入Hibernate需要的jar包

2. 在根目录下(src),新建一个xml配置文件,全名为hibernate.cfg.xml,里面的配置信息如下。注意下面的项目里面引入了druid数据库连接池,配置有一些改变。

<?xml version=\'1.0\' encoding=\'utf-8\'?>
<!DOCTYPE hibernate-configuration PUBLIC
        \"-//Hibernate/Hibernate Configuration DTD//EN\"
        \"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd\">
<hibernate-configuration>
    <session-factory>
        <!--连接数据库-->
        <property name=\"driverClassName\">com.mysql.jdbc.Driver</property>
        <property name=\"url\">jdbc:mysql://127.0.0.1:3306/jd</property>
        <property name=\"username\">root</property>
        <property name=\"password\">root</property>
        <!--druid数据库连接池-->
        <property name=\"hibernate.connection.provider_class\">
            com.alibaba.druid.support.hibernate.DruidConnectionProvider
        </property>
        <!--sql方言,依据使用的sql版本-->
        <property name=\"dialect\">org.hibernate.dialect.MySQL57Dialect</property>
        <!-- DB schema will be updated if needed -->
        <!--输出sql语句-->
        <property name=\"show_sql\">true</property>
        <!--格式化sql语句-->
        <property name=\"format_sql\">true</property>
        <!--检查有没有对于的表,没有就自己创建-->
        <property name=\"hbm2ddl.auto\">update</property>
        <!--映射文件-->
        <mapping resource=\"mapping/User.hbm.xml\"></mapping>
        <mapping resource=\"mapping/Staff.xml\"></mapping>
        <mapping resource=\"mapping/Department.xml\"></mapping>
        <mapping resource=\"mapping/Customer.hbm.xml\"></mapping>
        <mapping resource=\"mapping/Goods.hbm.xml\"></mapping>
        <mapping resource=\"mapping/MyGoods.hbm.xml\"></mapping>
        <mapping resource=\"mapping/GoodsDetail.hbm.xml\"></mapping>
    </session-factory>
</hibernate-configuration>

3. 编写持久化类及对应的mapping映射文件

  1. 持久化类建议实现java.io.Serializable接口, 以支持对象序列化
  2. 属性类型使用包装类型, 如: Integer, Byte, Double等
  3.  符合JavaBean规范, 如:
  • 属性名采用驼峰命名法, 如: custNick, custSex; 但不要出现cNick, cSex等特殊命名
  • 属性应该具有公有的getter和setter方法
  • 必须具备公有的无参构造器(包括隐式构造器)

 

package com.bj169.entity;

import java.io.Serializable;

/**
 * @ClassName User
 * @Description TODO
 * @Author Administrator
 * @Date 2018/12/4 0004 14:40
 * @Version 1.0
 **/
public class User implements Serializable {
    private Integer uid;
    private String username;
    private String pwd;
    private String address;

    public User() {
    }

    public User( String username, String pwd, String address) {

        this.username = username;
        this.pwd = pwd;
        this.address = address;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return \"User{\" +
                \"uid=\" + uid +
                \", username=\'\" + username + \'\\\'\' +
                \", pwd=\'\" + pwd + \'\\\'\' +
                \", address=\'\" + address + \'\\\'\' +
                \'}\';
    }
}

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表