DAO模式的优缺点
- 优点:实现业务逻辑与数据访问的解耦,符合模块化编程的思想,符合面向对象的编程思想。可以快速的定位错误,维护成本低。
- 缺点:开发成本高。
DAO其它优点
数据源除DB外还有可能是XML文件,文本文件等,不同的数据源存在不同的访问方式,即便是相同的数据源也存在不同的访问方式。DAO模式可以很好的解决这些问题
- 定义共通的DAO接口(面向接口编程,业务逻辑层声明接口,提高程序的可扩展性)
- 针对不同的数据源编写不同的实现(Impl)
- 相同的数据源,针对不同的访问方式编写不同的实现。
DAO组件
- DAO 工厂类
- DAO 接口 (一个)
- 实现了 DAO 接口的具体类 (一个或多个)
- 数据传输对象(有时称为值对象)
PO-VO-DTO-POJO-ENTITY
- po(persistant object):持久化对象。最简单的PO就是对应数据库中某个表中的一条记录的实体类,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作
- VO(value object):值对象:用于业务层之间的数据传递,仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要. 同DTO(数据传输对象)相同
- DTO:数据传输对象
- POJO(Plain Ordinary Java Object):无格式普通java对象,Hibernate使用,实现Serializable接口
DAO与持久化的关系
DAO一种程序数据访问层(持久化层)的设计思想。或者说DAO模式是持久化层的一个实现
映射文件知识点
- catalog指的数据库名称。name指向实体类,必须是全名包名+类名
- id只能出现一次,表示主键。
- column 一定是指的数据库表列名。property,id指的实体类属性名
主键生成方式
- native表示自增长,hibernate强烈建议给每个表加一个子增长的列,此列为主键。
- assigned普通主键,自己赋值。
- foreign较少使用,此主键又为其他表外键。
Hibernate即时加载与延迟加载
- 即时加载:不管是否使用,马上会加载(从数据库取出放入内存),如session.get()方法。优点:响应速度快,不需要session一直打开状态。缺点:占用资源多。
- 延迟加载:代码执行后并不马上执行sql语句从数据库获取数据,而是在使用对象时才加载,如session.load()方法。注意,如果使用延迟加载,session要一直处于open状态,否则报异常。优点:占用资源少。缺点:响应速度慢,需要session一直打开状态。
对象删除
使用hql可以删除。hql中出现的只用pojo类名与属性名,不能出现表名与字段名。query.executeUpdate();
Hibernate对象的三种状态
- 临时态(未受管理状态):新创建的对象,临时态不一定有。
- 持久态(受管理状态):对对象进行持久化操作,包括save,update,saveOrUpdate,get,load操作对象会变为持久状态。持久态的数据在事务提交时会自动与数据库对应表记录自动匹配(把程序对象值赋给数据库表值)
- 游离态(未受管理状态):session.clear(),session.close()对象变为游离态,游离态数据库中有与之对应的数据,游离态一定是由持久态转变的。
以上内容为学习西安云工厂旺旺老师的视频总结。