Hibernate对JDBC进行了简单的封装,是一个全新的ORM框架.可以在不修改源代码的基础上实现DAO的功能,通过操作对象的方式来操作数据库中的表)
Hibernate所处位置
XXX.hbm.xml映射配置文件标签和属性说明
<class>标签: name 类的全路径 table 数据库表名 <id>标签: name 类中的属性 column 表中的主键 generator 主键生成策略. 定义hbm.xml映射文件和pojo类时都需要定义主键,Hibernate中定义的主键类型包括:自然主键和代理主键: 自然主键:具有业务含义 字段作为主键,比如:学号、身份证号 代理主键:不具有业务含义 字段作为主键(例如 自增id),比如:mysql自增主键,oracle序列生成的主键、uuid()方法生成的唯一序列串 建议:企业开发中使用代理主键 <property>标签: name 类中的属性 column 表中字段名 type 数据类型. Java类型 java.lang.String Hibernate类型 string SQL类型 需要使用一个标签<column sql-type=”varchar(20)”> length 字段的长度.
hibernate.cfg.xml为主配置文件,配置了hibernate运行的参数信息
第一部分:数据库基本配置(连接信息以及数据库方言) hibernate.dialect 操作数据库方言 hibernate.connection.driver_class 连接数据库驱动程序 hibernate.connection.url 连接数据库URL hibernate.connection.username 数据库用户名 hibernate.connection.password 数据库密码 第二部分: hibernate基本配置 数据库必须自己手动创建,hibernate不会创建 第三部分:映射配置 <mapping resource="com/leo/domain/Student.hbm.xml"/>
第二部分更多解释
<property name="hibernate.hbm2ddl.auto">update</property>
自动生成DDL.根据映射产生表结构的类型:
- create-drop:没有表结构创建,下次启动时删除重新创建。适合学习阶段
- create:只做创建
- update:探测表结构够的变化,对于数据库没有的,进行更新操作。适合学习阶段
- validate:对比与数据库的结构
- none:什么都不会做
实际开发中一般使用update、validate
<property name="hibernate.show_sql">true</property>
在控制台上输出SQL语句
Hibernate执行流程描述如下:
- 编写hibernate配置文件及pojo类,包括:hibernate.cfg.xml主配置文件、与数据库表对应的映射文件及pojo类
- 应用程序调用hibernate的api加载hibernate配置文件、映射文件等
- 通过configuration创建sessionFactory会话工厂
- 通过sessionFactory会话工厂创建session会话
- 通过session操作数据库,session中定义了很多操作数据库的方法
- 对于增、删、改数据库操作需要transaction事务管理对象提交或回滚事务
- 对于查询数据库操作通过query查询对象执行查询
- 释放资源,一个操作结束后关闭session,应用程序结束后关闭sessionFactory
Configuration cfg = new Configuration(); cfg.configure(); SessionFactory factory = cfg.buildSessionFactory(); Session session = factory.openSession(); Transaction tx = session.beginTransaction();
- Hibernate的相关API
- Configuration:配置对象.用来加载配置文件
- 作用:就是用于加载配置文件。它默认只会加载类的根路径下的配置文件。
- 常用方法:
- 默认构造函数:它默认只会加载类的根路径下的hibernate.properties配置文件。不会加载xml文件。
- configure():该方法会加载类的根路径下的hibernate.cfg.xml配置文件。
- addClass():手动指定实体类的字节码。目的也是指定映射文件。 要求,映射文件的命名必须符合规范。实体类名称.hbm.xml
- addResource:手动指定映射文件的位置。
- 总结:
建议使用配置文件来指定映射文件的位置。
- SessionFactory
- 作用:就是用于生产Session对象的。工厂的创建,是由Configuration对象来创建的。
- 常用的方法:
- openSession():每次打开一个新的Session对象。
- getCurrentSession(): 从当前线程上获取一个Session对象。
- 说明:
- 该对象维护着应用中所有的映射文件信息。
- 它还维护类一些预定义的SQL语句。(只包含每个实体都通用的:全字段插入,全字段更新,根据ID查询,查询所有)
- 维护着连接数据库的信息,hibernate的基本配置
- 还维护着hibernate的二级缓存(关于二级缓存的内容,第四天再讲)
- 所有由该工厂生产的Session,共享工厂中的数据。
- 结论:SessionFactory是线程安全的。
- SessionFactory的使用原则:
- SessionFactorty是一个重量级对象,里面维护了很多信息。不应该随意的创建和销毁。
- 一个应用最好只有一个SessionFactory。
- 在web工程中,应该是随着应用的加载,而创建。随着应用的卸载而销毁。(整合spring后)
- Session连接对象
- 作用:对数据库进行增删改查的操作。开启事务等等。它是我们使用频率最高的一个对象。
- 常用方法:
- save():保存一个对象
- persist():JPA中提供方法.一般不使用.
- update():更新一个对象
- saveOrUpdate():保存或更新一个对象.看数据库中是否有对应的记录.如果有对应的记录就执行更新的操作,如果没有就保存.
- delete():删除对象
- merge():合并两个对象
- get()/load():根据主键查询
- createQuery():HQL查询
- createSQLQuery():数据库操作对象
- createCriteria():条件查询
- close():关闭连接
- clear():清除一级缓存
- evict(Object entity):清除一级缓存指定的实体
- refresh(Object entity):使用数据库数据更新一级缓存中指定的实体
- flush():清理一级缓存,使用缓存数据更新数据库的数据。
- 说明:
- Session是一个轻量级的对象。绝大多数信息都是由SessionFactory维护的。
- 它的创建和销毁不会消耗太多资源。
- Session对象不是线程安全的。
- Session维护着hibernate的一级缓存。
- Session的使用原则:保证一个线程只有一个Session(为什么?线程安全以及事务应该在一个事务中才能被控制)
- Transaction:事务(Hibernate的事务默认是不自动提交的.如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务)
- 作用:针对事务的控制。
- 常用方法:
- commit();提交事务
- rollback();回滚事务;
- Configuration:配置对象.用来加载配置文件
Hibernate
最新推荐文章于 2024-09-22 11:17:00 发布