- hibernate的环境安装,映射文件配置,核心文件配置
- 环境安装
- 下载hibernate;引入jar包,创建实体类
- 映射文件配置
- 建立类与表的映射<hibernate-mapping> <class name=”实体类的全路径” column=”表的名字”>;
- 建立类中属性与主键的对应 <id name=”实体类的主键对象” column=”表对应的主键”>;
- 配置类中普通属性与表的对应<proterty>
- 核心文件配置 <hibernate-configuration>
- 环境安装
<session-factory>
<property name=””>com.mysql.cj.jdbc.driver</property> (连接数据库基本参数)
<property name=””> </property> (配置hibernate方言)
<mapping resource=”hbm.xml的全路径”/>
- Sessionfactory
- Session的创建
创建hibernate的工具类
- hibernate的增,删,改,查
- 查:
- 查询单个:session.get(customer.class,id)/session.load(customer.class,id)注意get和load的区别
- 查:
2查询所有:SQLQuery query=session.createsqlquery(“select * from customer”)
List<customer> list=query.list();
-
- 增:先创建一个新对象(customer customer=new customer();),再设置对象的值(session.setcust_name()),再保存(session.saveorupdate();)
- 删:先查询到要删除的对象(get/load),session.delete(对象)
- 改:先查询到要删除的对象(get/load),再设置对象的值(session.setcust_name()),再保存(session.saveorupdate();)
- 什么是hibernate的持久化类
- hibernate是一个持久层的orm映射框架(持久就是将内存中的数据永久存储到关系型数据库中,orm是对象关系映射)
- 持久化类:就是一个普通Java类与数据库建立了映射关系
- 持久化类的编写规则(了解)
- 持久化类对象的三种状态及转换(了解)持久态
- 为什么持久态可以自动更新数据库?
因为一级缓存(一级缓存就是session缓存,减少程序对数据库的操作次数)
为什么一级缓存就可以自动更新?
因为一级缓存的内部结构有快照区(详情原理见笔记)hibernate向一级缓存存放数据会先向快照区存放一份同样的数据,快照区的作用就是保证一级缓存数据与数据库数据一致
- Hibernate的事务控制
- 事务的介绍(详情见笔记)
- Hibernate事务隔离级别设置:
-
- 如何保证在service层开启的事务使用的session跟在dao层事务使用的session是同一个?
就是将session加入当前线程,dao层就直接从线程中获得session
-
- Hibernate的其他API
- Query(面向对象查询+hql)
- Query query=session.createQuery(from customer where name=?);创建查询对象
- Query.setString(0,”张三”)有条件一个list集合
- Query.list();返回
- 若是分页,query.setFirstResult(3);query.setMaxResult(3);
- 确保只有一条查询返回记录可以用uniqueResult()
- Criteria(完全面向对象)
- Sqlquery(sql)
- 手动将查询对象封装到实体中
- Query(面向对象查询+hql)
- Hibernate的其他API
- Hibernate一对多关系的配置
- 一的一方映射文件配置:<set(name=多的一方对象集合的属性名称)
- 创建实体注意一的实体放多的一方的实体集合,多的实体里放一的实体对象
- 一的一方映射文件配置:<set(name=多的一方对象集合的属性名称)
<Key(column=多的一方的外键的名称)
<One-to-many(class=多的一方的类的全路径)
2.多的一方映射文件配置:<many-to-one name=一的一方的对象属性名,
Class=一的一方的类的全路径
Column=多的一方的外键的名称
-
-
- 一对多的相关操作
- 保存的时候两边都要保存(两边都要关联),所以用到级联
- 级联保存或更新,在两边配置可以
- 一的一方在set标签配置 cascade=“save-update”
- 多的一方在many-to-one标签里面同样的配置
- 级联删除 cascade=“delete”
- 一对多设置双向关联产生多的sql语句
- 一对多的相关操作
-
使一方放弃外键维护权:在set上设置inverse=true
-
- 多对多的配置
- <set name=对方对象属性名称 table=中间表名称
- 多对多的配置
<key column=当前对象对应中间表的外键名称
<many-to-many class=对方类的全路径 colum=对方对象在中间表对应的外键名称