Hibernate API 详解

Hibernate 主要的 API 详解

org.hibernate.cfg.Configuration

  • 加载主配置文件以及映射文件,启动 hibernate。

  • 主配置文件中主要有:数据库连接四要素,方言,数据源…

  • 默认获取 hibernate.cfg.xml 配置文件

Configuration configer = new Configuration().configure();
  • 如果配置文件名称有改变,则用带参数的构造器。
Configuration configer = new Configuration().configure();

SessionFactory接口

  • 用来获取和管理我们的seesion,它在hibernate中其实是相当于一个缓冲区的作用(一个数据库对应一个sessionFactory)
// 2.创建sessionFactory
SessionFactory sessionFactory = configer.buildSessionFactory();
  • 这个接口是hibernate的一个重量级对象,系统开销大(重要)。

  • 它是单例的,但是它是线程安全的(它的大多数成员变量都是final,高并发和集群的时候不会产生数据不统一

Session接口

  • 应用程序和数据库的一次交互(会话),每次执行一个数据库的事务,都要创建新的session实例,用完以后需要关闭,不关闭,session 会不够用,内存会崩溃。

  • 一个轻量级的接口,它是多例的,但是它是线程不安全的。

  • session对象获取的两种方式:

  1. sessionFactory.getCurrentSession(); 获取当前线程中的 session, 会自动关闭 session。
  2. sessionFactory.openSession() 创建一个新的 session 对象,需要我们手动关闭 session。
  • 如果要保证一个线程一个session,所以需要在hibernate.cfg.xml里面配置:
<property name="hibernate.current_session_context_class">thread</property>

transaction接口

  • 事务的开启 session.beginTransaction();``````session.getTransaction().begin();

  • 事务的提交 session.getTransaction().commit();

  • 事务的回滚 session.getTransaction().rollback();

hibernate.cfg.xml 详解

数据库连接配置

  • 在hibernate.cfg.xml里面配置数据库的四要素
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hib</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
  • 通过hibernate.properties文件进行配置
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/hib
hibernate.connection.username=root
hibernate.connection.password=123

注意:当 cfg 配置文件和 properties 文件同时配置了数据库信息的时候,cfg 配置文件优先。

数据源的配置

  • 我们一般会用c3p0的数据源管理 详见hibernate.cfg.xml文件
<!-- 用C3P0的数据源连接方式 -->
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>	
  • 在我们没有单独配置数据源管理的时候 ,它会用hibernate自带的数据源(not for product use - 不要在正式 的产品上面用,仅用于测试)

方言

  • 不同的数据库会存在一些语法上的差异,而方言是解决这种差异的一种手段

    <!-- 数据库方言 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>	
    
  • 解决hql翻译成sql,保证语法上的正确

自动建表配置

create 表示无论有没有对应的表都会先删除表,然后再创建,然后再向里面插入数据。

update 表示有表的时候不会创建表,只会更新表中原有数据,没有表的时候才会创建表。

<property name="hibernate.hbm2ddl.auto">update/create</property>

加入映射文件

<mapping resource="com/tz/hibernatestudy/sysmanage/entity/student.hbm.xml" />

持久化对象与数据库表的映射文件 xxx.hbm.xml 详解

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.lyu.hibernate.sysmanage.entity.Student" table="t_student">
		<id name="stId" column="st_id">
			<generator class="native"></generator>
		</id>
		<property name="stName" column="st_name"></property>
		<property name="stAge" column="st_age"></property>
	</class>
</hibernate-mapping>

class 标签包含两个映射关系

一个是 持久化对象和数据库表的映射关系

一个是持久化对象属性与数据库表字段的映射关系

hibernate 映射文件中内置主键的生成策略

<id name = "stId" column = "ST_ID">
	<generator class="native"></generator>
</id>

id 的生成策略有如下几种方式:

  • increment:hibernate 自己维护主键的值,每次插入之前,max(ST_ID)+1,不适合高并发和集群环境。
  • identity:数据库自身的增长来维护主键值 如 mysql 的auto_increment。
  • sequence:在数据库中创建一个序列,hibenate 会调用序列来维护主键 ,oracle 比较实用。
  • native:它会根据使用的数据库类型,从 identity 和 sequence 两种方式选取 一种合适的。
  • uuid:采用 uuid(universally unique identifier) 算发来生成一个唯一识别码:ip 地址 + jvm 启动时间 + 当前系统时间 + 计数器 = 32 位。
  • assigned:由程序自己设置id值,比如身份证,学好之类的业务编码。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值