mysql 迟加载_mybatis的延迟加载如何实现?

5f30fe981134551afef39f3d40290cf4.png

mybatis的延迟加载就是按需查询,在需要的时候进行查询。

有两张表:

图书表(book):

f9e9df1aea042bfdf5838a2f68414145.png

图书类型表(category):

f9e9df1aea042bfdf5838a2f68414145.png

他们之间通过类型id进行关联,现在我要显示图书类型名,点击类型名再显示该类型下的所有图书。

我们可以这样做在类型实体类里面添加一个属性存放该类型下的图书

public class Category {

private int cid;

private String cname;

private List books;

//省略get set

}

一次性的把图书类型和图书查询出来,Sql语句如下:

SELECT book.*,cname FROM book,category WHERE book.cid = category.cid

这样做可以完成功能,但是我们只是需要显示图书类型,点击的时候才显示该类型的图书,如果能做到开始只查询类型,点击类型的时候再查询该类型的图书,就不需要进行两表联查了,可以提高查询的效率,也比较节省内存,这就是延迟加载。

延迟加载如何实现?

ddadb56687ae5482dc003b012a2dd938.png

1.  Category实体类同上

2.  UserDao.xml:

select * from category

select * from book where cid = #{cid}

只有我们点击类型的时候才需要查询该类型下的图书,所以这里我们没有用两表联查,而是将类型表的查询语句和图书表的查询语句分开。

重点来看下这个配置:

collection,association是支持延迟加载的,这里的select属性表示要执行的sql语句,column表示执行sql语句要传的参数,该参数为select *from category查询出来的字段cid,property=”books”表示查询出来的结果给到books属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值