背景
在项目中,我们经常需要对实体列表进行关联查询
为了优化性能,需要尽可能减少访问数据库的次数
而在当前的项目中使用的MyBatis对关联查询支持并不是太好
而如果在查询中使用join做关联查询侵入就过大
所以在此写一个sqlhelper类来完成关联查询的功能
满足一对一、一对多、多对多关系
实现类
public class SqlHelperUtil {
/**
* 获取that列表
*
* @param thisList 需要进行load的实体列表
* @param thatFinder 关联实体的key列表查找方式
* @param thatFinderCallback 关联实体的回调处理
* @param thisLinkKey 实体的关联key
* @param thatLinkKey 关联实体的关联key
* @return
*/
private static List
使用示例
数据表
articles
id |
title |
1001 |
文章1001 |
1002 |
文章1002 |
tags
article_tags
id |
aid |
tid |
9990 |
1001 |
1 |
9991 |
1001 |
2 |
9992 |
1002 |
2 |
9993 |
1002 |
3 |
代码
//文章列表关联查询他们的标签
SqlHelperUtil.hasManyVia(articles, _conditionArticleTag -> {
return articleTagService.selectList(_conditionArticleTag));
},_conditionTag -> {
return tagService.selectList(_conditionTag));
}, tagList -> {
//TODO:可以对tag进行字段增减
//TODO:可以对tag列表继续进行关联加载
}, "id","aid","tid", "id", "tags");
输出
articles:[
{
id:1001,
title:"文章1001",
tags:[
{id:1,name:"美食"},
{id:2,name:"服装"},
]
},
{
id:1002,
title:"文章1002",
tags:[
{id:2,name:"服装"},
{id:3,name:"数码"},
]
}
]