很多刚刚接触mybatis的人都不知道应该如何去实现延迟加载,那么具体的要怎样才能实现呢?下面就让我们一起详细的来进行一下了解。
其实mybatis延迟加载就是按需查询(也就是在需要时进行查询)。
下面有两张表,分别是图书表(book)和图书类型表(category)。
他们是通过类型id进行关联的,现在的话要显示图书类型名,点击类型名再显示这个类型下面的所有的图书。
可以在类型实体类里面添加一个属性存放这个类型下面的图书:
public class Category { private int cid; private String cname; private List <Book> books; //省略get set }
将图书类型以及图书一次性查询出来,下面是SQL语句。
SELECT book.*,cname FROM book,category WHERE book.cid = category.cid
这样的话能够完成功能,可是,我们只需要显示图书类型,点击时,才显示这个类型的图书,假如,可以做到开始只查询类型,点击类型时再查询这个类型的图书,那么,就不需要再进行两表联查了,能够提高查询的效率,也非常的节省内存,这也就是延迟加载。
那么延迟加载究竟要怎样才能够实现呢?
Category实体类同上,UserDao.xml:
<mapper namespace="cn.xh.dao.UserDao"> <select id="findCategoryWithLazingload" resultMap="categoryMap"> select * from category </select> <resultMap id="categoryMap" type="cn.xh.pojo.Category"> <id column="cid" property="cid"></id> <result column="cname" property="cname"></result> <collection property="books" column="cid" select="findBookWithLazy"></collection> </resultMap> <select id="findBookWithLazy" parameterType="int" resultType="cn.xh.pojo.Book"> select * from book where cid = #{cid} </select> </mapper>
只有在点击类型时才需要查询这个类型下面的图书,所以的话,这里没有用两表联查,而是选择了将类型表的查询语句和图书表的查询语句分开。
注意,要重点的看一下配置:
<collection property="books" column="cid" select="findBookWithLazy"></collection>
collection,association是支持延迟加载的。
select属性表示要执行的sql语句,column表示执行sql语句要传的参数,这个参数是select * from category查询出来的字段cid,property=”books”表示查询出来的结果给到books属性。
关于mybatis怎样去实现延迟加载你都了解了吗?更多相关知识,请继续通过关注奇Q工具网的常见问题栏目来进行了解吧。
推荐阅读: