admin 管理员组

文章数量: 887629


2024年1月10日发(作者:unknownerror怎么读)

Sql、Criteria,object comptosition

Hql:

1、 属性查询

2、 参数查询、命名参数查询

3、 关联查询

4、 分页查询

5、 统计函数

6. 如何优化Hibernate?

1.使用双向一对多关联,不使用单向一对多

2.灵活使用单向一对多关联

3.不用一对一,用多对一取代

4.配置对象缓存,不使用集合缓存

5.一对多集合使用Bag,多对多集合使用Set

6. 继承类使用显式多态

7. 表字段要少,表关联不要怕多,有二级缓存撑腰

ate有哪几种查询数据的方式

(1)导航对象图查询

(2)OID查询

(3)HQL

(4)QBC

(5)本地SQL

()和get()的区别

load加载方法:

Java代码

Users user = (Users)(, userId);

Users user = (Users)(, userId);

get加载方法:

Java代码

Users user = (Users)(, userId);

Users user = (Users)(, userId);

两加载方法区别:

区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如sword())会抛出异常:NotFoundException;

区别2:load支持延迟加载,get不支持延迟加载。

也就是说:

Java代码

Users user = (Users)(, userId);

Users user = (Users)(, userId);

这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。

而:

Java代码

Users user = (Users)(, userId);

Users user = (Users)(, userId);

则立即去执行数据库查询。 所以Users user = (Users)(, userId);不会执行任何sql。

注意:

Java代码

Users user = (Users)(, userId);

n(());

Users user = (Users)(, userId);

n(());

上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userId的值,但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。


本文标签: 查询 使用 数据库 对象