Hibernate框架工作模式
Hibernate在三层模型中承担的正是Dao(数据访问层)层中的反复sql查询工作
实现步骤
一、导jar包
1.hibernate.final/lib/required下的所有jar包
2.数据库驱动类库
3.准备数据库
4.配置文件准备
全局配置文件hibernate.cfg.xml
五项必填内容 数据库方言、驱动类名、数据库url、数据库用户名、密码
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///ssh</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
选填功能
<property name="hibernate.show_sql">true</property><!--每次数据库操作打印使用的sql语句-->
<property name="hibernate.format_sql">true</property><!--展示sql时格式化-->
<property name="hibernate.hbm2ddl.auto">update</property><!-- 自动建表 -->
加载映射文件
值得注意的是:mapping的属性使用的是resource!
<mapping resource="beans/User.hbm.xml"/>
其中
<property name="hibernate.hbm2ddl.auto">xxx</property>
-
create-drop
每次在创建sessionFactory时候执行创建表。当调用sesisonFactory的close方法的时候,删除表! -
create
每次都重新建表; 如果表已经存在就先删除再创建 -
update
如果表不存在就创建; 表存在就不创建;对象中有别的属性,insert的时候也会创建新列,说白了就是保证update操作一定执行 -
validate
执行验证: 当映射文件的内容与数据库表结构不一样的时候就抛出异常
映射配置文件 *.hbm.xml
映射文件: 映射一个实体类对象; 描述一个对象最终实现可以直接保存对象数据到数据库中
通常地,我们都是一个JavaBean对象对应一个映射配置文件,并且配置文件和JavaBean对象是放在同一个目录下的
我们按照快速入门的映射配置文件一步一步来讲解:
<hibernate-mapping package="com.zxd.domain">
<!--类名为User,表名也为User-->
<class name="User" table="user">
<!--主键映射,属性名为id,列名也为id-->
<id name="id" column="id">
<!--根据底层数据库主键自动增长-->
<generator class="native"/>
</id>
<!--非主键映射,属性和列名一一对应 (相同的时候可以省略column)-->
<property name="username" column="username"/>
<property name="cellphone" column="cellphone"/>
<property name="password" column="password"/>
</class>
</hibernate-mapping>
-
hibernate-mapping节点
常用的属性:
package【要映射的对象所在的包(可选,如果不指定,此文件所有的类都要指定全路径)】
auto-import
默认为true, 在写hql的时候自动导入包名
如果指定为false, 再写hql的时候必须要写上类的全名; -
class节点
class 映射某一个对象的(一般情况,一个对象写一个映射文件,即一个class节点)
常用的属性:
name【指定要映射的对象的类型】
table【指定对象对应的表】
如果没有指定,默认与对象名称一样 -
property节点
property是普通属性的映射,即JavaBean普通的成员变量属性就使用property来描述!
常用的属性:
name 指定对象的属性名称
column 指定对象属性对应的表的字段名称
如果不写默认与对象属性一致。
length 指定字符的长度, 默认为255
type 指定映射表的字段的类型,如果不指定会匹配属性的类型
java类型:
必须写全名【例:java.lang.String】
数据库类型varchar int
hibernate类型: 直接写类型,都是小写
值得注意的是:如果列名称为数据库关键字,需要用反引号或改列名。当然啦,我们一般不使用关键字来作为列名
id节点
id是主键映射…
name 指定对象的属性名
column 指定对象属性对应的表的字段名称
<id>
节点下还有子节点 <generator class=""/>
主键的自动生成策略
identity 自增长(mysql,db2)
sequence 自增长(序列), oracle中自增长是以序列方法实现
native 自增长会根据底层数据库自增长的方式选择identity或sequence
如果是mysql数据库, 采用的自增长方式是identity
如果是oracle数据库, 使用sequence序列的方式实现自增长
increment 自增长(会有并发访问的问题,一般在服务器集群环境使用会存在问题
指定主键生成策略为手动指定主键的值
assigned
指定主键生成策略为UUID生成的值
uuid
foreign(外键的方式, one-to-one讲)
Hibernate执行过程
Configuration
配置管理类:主要管理配置文件的一个类
- configure方法
方法用于加载配置文件 - 加载主配置文件的方法
如果指定参数,那么加载参数的路径配置文件 如果不指定参数,默认加载src/目录下的hibernate.cfg.xml - buildSessionFactory
buildSessionFactory()用于创建Session工厂
SessionFactory
SessionFactory–>Session的工厂,也可以说代表了hibernate.cfg.xml这个文件…hibernate.cfg.xml的就有<session-factory>
这么一个节点,他有点类似于DataSource连接池,可以用来获得连接Connection
- openSession方法
创建一个Session对象 - getCurrentSession方法
创建Session对象或取出Session对象
Session
Session是Hibernate最重要的对象,Session维护了一个连接(Connection),只要使用Hibernate操作数据库,都需要用到Session对象
更新操作
我们在快速入门中使用到了save(Objcet o)方法,调用了这个方法就把对象保存在数据库之中了。Session对象还提供着其他的方法来进行对数据库的更新
session.save(obj); 【保存一个对象】
session.update(obj); 【更新一个对象】
session.saveOrUpdate(obj); 【保存或者更新的方法】
save:瞬时态对象-》持久化对象
update:游离态对象-》持久化对象