类级别查询
get
get没有任何策略,调用就立即查询数据库加载数据1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package me.yanrs.service;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import me.yanrs.domain.User;
import me.yanrs.utils.HibernateUtils;
public class Criteria_Day4 {
public static void main(String[] args) {
//bacic_select();
//Where_select();
//fenye();
//order_select();
//select_count();
//detached();
get_select();
}
private static void get_select() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
User user = session.get(User.class, 1l);
System.out.println(user);
tx.commit();
}
}
load
load方法,可使用lazy属性控制其加载的方式。
lazy属性: 决定是否延迟加载
- true(默认值): 延迟加载,懒加载
- false: 立即加载
- extra: 极其懒惰
load方法(默认):是在执行时,不发送任何sql语句.返回一个对象.使用该对象时,才执行查询.
延迟加载: 仅仅获得没有使用.不会查询.在使用时才进行查询.
是否对类进行延迟加载: 可以通过在class元素上配置lazy属性来控制.
lazy:true 加载时,不查询.使用时才查询
1 | package me.yanrs.service; |
举例子演示下配置(在User.hbm.xml中)【只是演示怎么配置,和上面、下面的操作无关】1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="me.yanrs.domain">
<class name="User" table="sys_user">
<id name="user_id">
<generator class="native"></generator>
</id>
<property name="user_code" column="user_code"></property>
<property name="user_name" column="user_name"></property>
<property name="user_password" column="user_password"></property>
<property name="user_state" column="user_state"></property>
<!--
set:
name: 关联的另一方的集合的属性名称
table: 中间表的名称
key:
column: 当前对象在中间表中的外键的名称
many-to-many:
class: 关联另一方的类的全路径
column: 关联另一方在中间表中的外键名称
-->
<!--
lazy属性: 决定是否延迟加载
true(默认值): 延迟加载,懒加载
false: 立即加载
extra: 极其懒惰
fetch属性: 决定加载策略.使用什么类型的sql语句加载集合数据
select(默认值): 单表查询加载
join: 使用多表查询加载集合
subselect:使用子查询加载集合
-->
<!-- batch-size: 抓取集合的数量为3.
抓取客户的集合时,一次抓取几个客户的联系人集合.
-->
<set lazy="false" cascade="delete" name="roles" table="sys_user_role">
<key column="user_id"></key>
<many-to-many class="me.yanrs.domain.Role" column="role_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
关联级别查询
lazy、fetch
为了提交效率,fetch的选择上应该选择select。lazy的取值应该选择true。即全部使用默认值。
fetchsize
抓取客户的集合时,一次抓取几个客户的联系人集合。