get&load方法的区别
代码
输出结果
由上面结果可以看出,使用get方法会立即执行一条查询语句,并将查询数据返回。
而load方法没有执行查询语句,是因为load方法的延迟查询策略,只有在你用到数据的时候才会执行查询。我们在load方法后添加一条语句,
这样我们就用到了这个对象,所有会执行一条SQL语句
来查询数据,因为我们这里输出了这个对象,所以会做输出。
总结:
get方法立即查询,会立即向数据库提交一条查询语句,来查询数据
load方法延迟查询,在你用到数据的时候才会提交sql语句进行查询。
list&iterate区别
List方法是立即查询,执行后发送sql语句到数据库,执行查询并返回结果。
Iteate方法是延迟查询,会先执行一条SQL语句,只查询主键那列,当你用到某条数据的时候,才会发送一条sql语句,来根据主键查询数据。有的也叫n+1查询,1指的是查询所有主键的sql语句,n指的是根据主键查询数据,iteate与load方法一样,只有用到的时候才去查询。
总结:
List虽然每次查询都会发送SQL语句到数据,查询数据,但是List会将查询数据,写入Session缓存。这也说明list方法是写缓存,但是不读取缓存,因为List方法每次都会查询数据。
Iteate是,读写缓存,因为他只查询一次,如果你先使用List了,在使用Iteate方法。Iteate方法会先查询所有主键,拿着主键到缓存中找数据,如果没有数据则查询,否则直接从缓存中读取数据。