Hibernate

一、简介

Hibernate是轻量级JavaEE应用的持久层框架,它用于实现DAO,它是一个关系型数据库ORM框架。
用于实现DAO:使用hibernate实现数据访问层。
       ORM框架:Object Relational Mapping 对象关系映射
       Object:对象,java对象
       Relational:关系,关系型数据库中二维表。
       Mapping:映射,通过操作java对象去操作数据库。
java类-------------->表
java对象----------->表中记录
java对象属性------->表中字段

二、Hibernate执行流程

1、配置文件

hibernate.cfg.xml(hibnernate主配置文件)   只需要定义一个主配置文件,名称不固定,hibernate默认使用"hibenrate.cfg.xml"
hbm.xml(映射文件,建立对象和表的映射关系) 一个表对应一个hbm.xml
.java(domain,java对象,pojo):定义属性的getter/setter方法
一个表定义一个java类(pojo)
2、通过configuration加载配置文件,准备hibernate的运行环境
3、创建sessionFactory会话工厂,用于创建会话(sessionFactory是线程安全的)
4、通过sessionFactory创建session会话,session中包括一个connection数据库连接,通过session向数据库发出sql语句。
5、对增、删、改操作,需要开启事务,通过transaction对象提交或回滚事务。
6、对查询操作,不需要开启事务,通过query对象构造查询条件查询数据库
7、释放资源,  session用完要手动close关闭,sessionFactory在应用程序结束自动关闭。

三、配置文件

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<!-- 配置会话工厂所需要的属性 -->
	<session-factory>
	<!-- 配置hibernate运行的参数 -->

	<!-- 数据库方言,根据数据库选择 -->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
	<!-- 数据库驱动 -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<!-- 数据库连接url -->
	<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
	<!-- 数据库用户名和密码 -->
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">******</property>
		
	<!-- 配置c3p0 -->
	 <!-- 连接池提供商 -->
	<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
	<!-- 连接池中保留的最大连接数-->
	<property name="hibernate.c3p0.max_size">10</property>
	<!-- 连接池中保留的最小连接数 -->
	<property name="hibernate.c3p0.min_size">1</property>
	<!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃 -->
	<property name="hibernate.c3p0.maxIdleTime">60</property>
	<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
	<property name="hibernate.c3p0.timeout">5000</property>
	
	<!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 是否对日志中输出的sql语句进行格式化 -->
	<property name="hibernate.format_sql">true</property>

	<!-- 
		hbm2ddl.auto的4个值,如果不需要设置为none,建议正式环境设置为none
		validate 加载hibernate时,验证创建数据库表结构
		create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
		create-drop 加载hibernate时创建,退出是删除表结构
		update 加载hibernate自动更新数据库结构
		none 不执行检查
		 -->
	<property name="hibernate.hbm2ddl.auto">none</property>

	<!-- 加载hbm.xml映射文件 -->
	<mapping resource="*.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

hbm.xml

<!-- 配置表和类的映射关系 -->
<hibernate-mapping >
	<!-- 将表和类对应起来
	name:类名,写类的全限定名 (必须配置)
	table:表名(必须配置)
	catalog:使用mysql配置数据库名,可以不用配置
	schema:使用oracle时候配置用户名
	 -->
	<class name="com.*.*" table="*" >
		<!-- 主键映射 
		name:表中的主键对应的属性
		type:属性的类型
		-->
		<id name="custId" type="java.lang.Long">
			<!-- 对应表中主键字段 -->
			<column name="cust_id"></column>
			<!-- 主键生成策略 
			identity:自增主键生成策略
			还有其它策略:uuid(唯一串),assgiend(手动指定)、sequence(用于oracle中的序列生成主键)
			-->
			<generator class="identity"></generator>
		</id>
		
		<!-- 普通属性和字段的映射 
		name:类中的属性
		-->
		<property name="custName" type="string">
			<!-- 属性对应的字段 -->
			<column name="cust_name"></column>
		</property>
	</class>
</hibernate-mapping>

四、QBC

QBC(Query By Criteria)按条件查询,通过Criteria构造查询条件,即通过调用Criteria的api实现各种查询。
通过Criteria对象拼装查询条件,调用Criteria的add方法拼接查询条件,最终hibernate通过criteria对象自动生成sql语句。
DetachedCriteria是离线的Criteria。
DetachedCriteria和Criteria区别:
Criteria创建方法:session.createCriteria
DetachedCriteria创建方法:不需要session
DetachedCriteria和Criteria相同点:实现查询条件拼装.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值