闭关修炼——four——Hibernate

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值,值越大发送语句越少

 

posted @ 2017-03-05 00:06  随行者  阅读(98)  评论(0编辑  收藏  举报