ORM:对象关系模型
jdbc://127.0.0.1:3306/ssh
执行步骤:
- Configuration:管理hibernate,负责hibernate配置工作,包括hibernate运行时需要的信息。
- SessionFactory:用来根据配置好的Configuration创建数据库连接。(相当于Connection)
- Session:数据库连接
Hibernate废除了buildSessionFactory,新增了一个接口ServiceRegistry。基于hibernate的配置或服务都必须统一向ServiceRegistry注册后才能生效,所以hibernate配置入口不再是Configuration对象,而是ServiceRegistry对象。
Hibernate配置文件中设置属性
- show_sql:true 显示sql执行语句。
- format_sql:true 按照格式化显示sql。
- hbm2ddl.auto (取值如下)
- create 每次启动hibernate都会删除上一次的表,然后重新生成新表。
- create-drop 每次启动hibernate都会删除上一次的表,然后重新生成新表,当SessionFactory关闭时,表自动删除。
- validate (默认值)加载时验证表的机构,不会创建。
Hibernate主键映射机制
- assigned:插入数据时由用户直接录入;
- identity:对SQL Service和mysql支持自动增长列,不支持Oracle;
- sequence:只针对Oracle,主键设为序列;
- native:由hibernate根据底层数据库自行判断采用identity还是sequence;
- increment:用于SQL Service或MySQL数据库中未把表主键设为自增,而又想实现自增的效果,对long、int、short类型适用;
- uuid.hex:采用uuid算法生成主键,编码产生一个32位16进制数字的字符串,占用空间大,适用与varchar类型。
Hibernate操作接口(增删改查方法)
- 查询
- session.get(class, id); 直接查询
- session.load(class, id); 懒加载
- 两者区别:
- 执行load时不会查询数据库,只有出现使用时才查询数据库。例如stu.getStuname()执行时才查询;
- get查询结果不存在时,返回null,
load查询结果不存在时,报异常; - load方法返回实体的代理类,
get方法返回实体类;
- 新增
- session.save(对象名);
- 修改
- session.update(对象名);
- 新增或修改
- session.saveOrUpdate(对象名);
- 删除
- session.delete(对象名);
HQL查询
- 原生sql的表对应hql中的类;
- 原生sql的列名对应hql中类的属性名;
对于复杂sql,比如两张表以上的关联查询或是聚合分组查询,建议把sql查询创建视图,对视图进行hibernate映射。
QBC查询(Query By Criteria)
使用Criteria对象 Criteria criteria = session.createCriteria(Stu.class);
- Restrictions
- Restrictions.like 模糊查询
- MatchMode.END 以当前值为结尾
- MatchMode.START 以当前值为开头
- MatchMode.ANYWHERE 包含当前值
- MatchMode.EXACT 精确查询
- between ... and
- Restrictions.between(列名,开始值,结束值)
- 比较运算
- Restrictions.eq() 等于
- Restrictions.le() 小于等于
- Restrictions.ge() 大于等于
- Restrictions.lt() 小于
- Restrictions.gt() 大于
- Restrictions.ne() 不等于
- 排序
- criteria.add(Order.asc("score")); //按成绩升序排列
- criteria.add(Order.desc("score")); //按成绩降序排列
- and 和 or
- criteria.add(Restrictions.and(Restrictions.eq("stuname","张三"), Restrictions.ge("score", 80f)));
Hibernate注解方式映射
级联映射