Hibernate学习笔记

摘要

Hibernate是JavaEE中非常流行的框架,目的是完成Java实体类到数据库中表之间的映射。它最开始只关注Java与关系型数据库中的关系,由于非关系型数据库的逐渐流行,因此它也延伸到对非关系型数据库的映射。Hibernate将JDBC进行了进一步封装,使开发人员不必写任何与数据库相关的sql语句,只需要写Java代码和配置文件就可以完成持久化操作。配置文件可以由Java注解代替,因此可以完全由Java代码就可以完成实体类到表(或者其他类型)的映射。

1 Hibernate的配置文件hibernate.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">
<hibernate-configuration>
 <session-factory>
  <!-- An database configuration -->
  <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
  <property name="hibernate.connection.password">lwb12345</property>
  <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/hibernatedb</property>
  <property name="hibernate.connection.username">postgres</property>
  <property name="hibernate.connection.pool_size">2</property>
  <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">create</property>
  <!-- An object to table -->
  <mapping class="org.weebing.dto.UserDetails"/>
 </session-factory>
</hibernate-configuration>

<property name=“hibernate.hbm2ddl.auto”>create</ property> 写上就不需要在数据库手动建表,hibernate自动帮助我们建表。

2 实例

2.1 实体类

实体类将被Hibernate自动映射为数据库中的表

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Person {
    @Id
    private int id;
    private String name;
    private int age;
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
	return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    
    
}

@Entity注解表示实体类,对应于数据库中的表结构。@Id注解对应于数据库中表的主键。

2.2 持久化操作

下面代码将person对象存储在了数据库中。

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.weebing.domain.Person;

public class PersonRepository {
    public static void main(String[] args) {
    // 实体类创建
	Person person = new Person();
	person.setId(101);
	person.setName("weebing");
	person.setAge(18);
	
	// 添加实体类到数据库
	Configuration conf = new Configuration().configure().addAnnotatedClass(Person.class);
	SessionFactory sessionFactory = conf.buildSessionFactory();
	Session session = sessionFactory.openSession();
	Transaction transaction = session.beginTransaction();
	session.save(person);
	transaction.commit();
    }
}

示例代码仅包含部分关键的注解,其他注解请查看官方文档。

2.3 实体类与表的映射关系

实体类
类实例一条记录
成员变量属性
标注为@Id的成员变量主键

2.4 会话与事务之间的关系

会话(session)表示实体类与数据库的一次连接,它们之间连接中断,则会话中断。事务(Transaction)表示会话连接中的一次逻辑操作单元。事务具有四个重要特性:原子性、一致性、隔离性和持久性。他的两个关键操作是“提交”和“回滚”。由定义可知,一个会话可以包含多个事务,一个具体事务仅包含在唯一存在的会话中。

2.5 浅析Hibernate底层实现原理

包括Hibernate在内的JavaEE框架都大量使用的反射机制,反射可以在运行时获取当前对象对应的类型,从而自动调用相关的方法,而不需要开发人员再写大量重复代码了,因此,开发效率得到极大提高。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值