Hibernate

本文介绍ORM概念及其在Java中的应用,详细讲解了JPA规范及Hibernate框架,并通过具体配置示例展示如何使用Hibernate进行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.ORM 对象/关系数据库映射
完成面向对象编程到关系数据库的映射,ORM框架会将对持久化对象的操作转换成对应的SQL并对数据库进行操作。
映射方式:
1.数据库映射类
2.数据表的行映射类的对象
3.数据表的列映射类的属性

二.JPA Java持久层API
ORM规范,只提供一系列编程接口,而ORM框架负责实现接口。面对JPA编程,应用程序底层就可以在不同ORM框架切换。

三.Hibernate
实现了JPA规范的ORM框架,还提供了对数据增删改查的方法,减少人工SQL。

四.hibernate.cfg.xml基础配置

<!-- maven依赖 -->
<!-- hibernate包 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.5.Final</version>
</dependency>
<!-- c3p0数据源包 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>4.3.5.Final</version>
</dependency>
<!-- mysql连接驱动包 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>
<?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">
<hibernate-configuration>
    <session-factory>
        <!-- 连接信息 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/myhibernate?CharacterEncoding=utf-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>

        <!-- 不使用hibernate自带连接池 -->
        <!-- <property name="connection.pool_size">20</property> -->
        <!-- c3p0连接池配置 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <property name="hibernate.c3p0.max_size">20</property>
        <property name="hibernate.c3p0.min_size">1</property>
        <property name="hibernate.c3p0.max_statement">100</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.validate">true</property>

        <!-- 数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 自动创建数据表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 格式化显示生成的SQL -->
        <property name="show_sql">true</property>
        <property name="sql_format">true</property>

        <!-- 持久化类 -->
        <mapping class="com.flyhuo.entity.Grade"/>
        <mapping class="com.flyhuo.entity.Student"/>
    </session-factory>
</hibernate-configuration>

4.PO 持久化对象

//低侵入式:PO = POJO(普通Java对象) + 持久化注解
@Entity //持久化类
@Table(name="student") //指定表名
public class Student {

    @Id() //标志属性,对应主键  主键生成策略
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private String id;

    @Column(name="name") //指定列名
    private String name;

    //提供无参构造方法,用于通过newInstance()创建实例
    public Student() {
    }

1.状态:
(1) 瞬态: PO实例从未与Session关联
(2) 持久化: PO实例与Session关联并且对应数据库记录,PO实例被修改会自动更新到持久层
(3) 脱管: PO实例曾与Session关联,但Session关闭脱离管理

2.要求:
(1) 提供无参构造方法 — 使用newInstance()创建实例
(2) 尽量避免使用基本类型 — 允许为null
(3) 使用非final类 — 生成代理对象(子类的实例)
(4) get和set方法,标志属性

5. 持久化操作

//configure默认加载hibernate.cfg.xml,也可指定文件名
Configuration cfg = new Configuration().configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().
        applySettings(cfg.getProperties()).build();  

//Session工厂,线程安全,提供二级缓存
SessionFactory sf = cfg.buildSessionFactory(sr);
//对PO进行持久化操作,单线程,提供一级缓存
Session session = sf.openSession();
//一个session可以开启多个事务
Transaction tx = session.beginTransaction();

//持久化操作
Student student = new Student();
student.setName("张三");
student.setId("2");
session.save(student);
student.setName("李四");

//提交事务,关闭session,关闭sessionFactory
tx.commit();
session.close();
sf.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值