自动生成表结构
(etc/hibernate.properties)
update(常用)
自动生成表结构 如果映射文件和数据库表字段不对应 将会修改表的字段
但是原来表的字段不会改变 会新增字段
create
每次运行都会创建一个新的表(数据丢失)
create-drop
每次运行都会创建一个新的表,并且每次运行结束都会把这个表删除
validate
每次都会验证表结构 如果实体类与映射文件不同 会抛出一个异常
主键分类
主键的规则:不能重复 不能修改
1.自然主键
表里面 有一个字段 符合主键的规则
就直接使用这个字段 作为主键
身份证
号
2.代理主键
表里面 没有一个字段 符合主键的规则
自己创建 id 作为表的主键 这个键就叫代理主键
主键生成策略(7种)
identity
主键自增 使用数据库当中的主键自增
插入时 打印的sql语句中 不会插入id
increment
主键自增 由hibernate来管理
插入数据时 先去数据库中查询当前的最大id
然后 把查出来的id + 1 再插入数据
uuid
全球不重复唯一标识 32位 字符串
注意:id必须使用字符串类型
native(最常用 三合一)
根据使用的数据库类型来选择使用哪个策略
所有数据库都支持identity或者sequence
identity + sequence + hilo
hilo (高低位算法)
将主键交给hibernate处理 使用自己的算法 帮你维护主键
assigned
由自己维护主键 插入数据时需要有主键
使用的代理主键
sequence oracle 默认的
获取Session的封装方法
package com.lanou3g.utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /* * 作用 * 获取session对象 */ public class HibernateUtil { private static SessionFactory sessionFactory; static { Configuration configuration = new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); } // 获取session的方法 // 创建一个全新的session public static Session getOpenSession() { return sessionFactory.openSession(); } // 获取当前使用的session // 注意:使用该方法 必须在主配置文件中配置一下 public static Session getCurrentSession() { return sessionFactory.getCurrentSession(); } public static void close() { } }
hibernate操作对象的三种状态
1.瞬时态 没有id 没有跟session产生关系
2.持久态 有id 有跟session产生关系
3.游离态 有id 没跟session产生关系
Hibernate在操作数据库的时候就是将持久态的数据同步到数据库中