使用Hibernate开发租房系统(5)
hibernate创建实体类步骤:
(1)引入hibernate的支持库 oracle数据库的驱动 ojdbc14.jar(10g) ojdbc6(11g)
(2)建立hibernate.cfg.xml文件 这个文件必须位于src目录下
(3)建立对应的实体映射文件*.hbm.xml *类名
(4)将实体映射文件 注册到hibernate.cfg.xml
get load方法
(1)两者均是根据id查询出单个对象
(2)如果能找到 二者没什么区别
(3)如果找不到 get返回的是null load会抛出异常
瞬时状态
a.对象在内存中
b.对象不在session的托管中
c.数据库不存在对象的对应记录
持久状态
a.对象在session的托管中
b.数据库存在对象的对应记录
游离状态
a.对象不在session的托管中(曾经被session托管)
b.数据库存在对象的对应记录
session.flush(); 内容中的对象和一开始从session中提取的对象 完成一次对比匹配 如果不匹配 session将完成一次同步操作
但是这个同步操作 是不提交的
transaction.commit(); 代码中已经存在 上述功能
hibernate根据主键才能干活
saveOrUpdate
merge:
两者相似点在于:处理对象 查询数据库是否有对应记录 有就修改 没有保存
merge会完成所有session的一个同步操作
list:无论如何都会发出一条语句查询全部信息
iterate:首先发出一条查询所有id的语句 然后再根据这些id逐条查询 N(数据库的记录数)+1
占位符
?:从0开始 (过于局限 不适用)
命名参数占位: 使用:名字
封装对象占位:依赖于命名参数占位 (将所有的查询条件的属性 封装成对象)
对象中的属性名 一定要和命名参数的占位名一致
使用Map对象作为封装对象
map中的键要和 命名参数的占位名一致
投影查询:
查询一个对象OR多个对象中的某一个属性OR某几个属性
返回 如果是一个 返回是Object
如果是多个 返回时Object[]