day3
表与表之间关系:
1.一对多(客户和联系人) --- 并不是日常的客户理解 --- 在多的那一方建立外键
2.多对多(用户和角色) ---- 创建第三张表维护关系
hibernate一对多操作:
1.一对多映射配置
(1)创建实体类,在实体类中表示一对多的关系
(2)创建对应的.hbm.xml文件,并在里面配置一对多关系
(3)配置核心文件
2.级联操作:级联保存,级联删除 --- cascade="save-update,delete"
inverse属性:让单一的一方放弃外键维护,提高效率
hibernate多对多操作: --- 与一对多类似
注重添加,了解删除(比较古怪,在第三表上操作),好像不能进行修改(在第三表上)
多对多的重点是:维护第三张表的关系
1.让某个用户有某个角色 (add)
2. 让某个用户没有某个角色(remove)
注意assigned与native的区别
day4
Hibernate查询方式:
1. 对象导航查询: 根据id查询某个客户,再查询这个客户里面所有的联系人
2. OID查询:根据id查询某一条记录,返回对象 --- session.get(...);
3. HQL查询: Query--- hql语句
查询所有,条件查询,排序查询(order by),分页查询(自身方法),投影查询(部
分字段),聚集函数使用 --- sum,count(*)返回为Long型 --- min,max(u_id)返回为
Integer --- avg为Double
4. QBC查询: --- Criteria对象
查询所有,条件查询(add...),排序查询(addOrder..),分页查询(自身方法
--- 开始位置计算公式:(当前页-1)*每页记录数),统计查询,离线查询(不需要
session创建。。)
5. 本地sql查询: SQLQuery对象,使用普通sql实现查询
Mysql里面多表查询:
内连接:
SELECT * FROM customer c,linkman l WHERE c.`C_ID` = l.`LC_ID`
SELECT * FROM customer c INNER JOIN linkman l ON c.`C_ID` = l.`LC_ID`
左外连接:
SELECT * FROM customer c LEFT OUTER JOIN linkman l ON c.`C_ID` = l.`LC_ID`
右外连接:
SELECT * FROM customer c RIGHT OUTER JOIN linkman l ON c.`C_ID` = l.`LC_ID`
Hql多表查询:-- 客户和联系人为例
(1)内连接 --- from Customer c inner join c.setLinkMan --- 数组结果
(2)左外连接 --- from Customer c left outer join c.setLinkMan -- 数组
(3)右外连接 -- from Customer c right outer join c.setLinkMan
(4)迫切内连接 --- from Customer c inner join fetch c.setLinkMan 对象
(5)迫切左外连接 -- from Customer c left outer join fetch c.setLinkMan
对象
hibernate检索策略分为两类:
1.立即查询:get
2.延迟查询:load
(1)类级别延迟 --只有要对象里面的值时候才会发送语句查询数据库 (2)关联级别延迟:查询某个客户,再查询这个客户的所有联系人
关联级别延迟改善(根据客户得到所有的联系人):
.在映射文件中进行配置实现:lazy--- true延迟,默认
批量抓取:--- 查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人
解决:配置batch-size值,值越大发送语句越少