使用fastmybatis进行联表查询

fastmybatis介绍:https://www.jianshu.com/p/69aa4f435378

假设有两张表

用户表

table user 
(
    id int
    name varchar
)

用户城市表

table city_info
(
    id int
    user_id int
    city varchar
)
  • 查询在杭州的用户
Query query = new Query()
// 关联城市表
query.join("inner join city_info t2 on t.id = t2.user_id")
    .eq("t2.city", "杭州");

// 查询结果
List<User> users = userMapper.list(query);

如果想要获取两张表的内容,可以使用listMap方法

listMap定义在SchMapper接口中

/**
 * 查询指定字段结果,Map里面key对应字段名,value对应值
 * @param columns 返回的字段
 * @param query 查询条件
 * @return 返回结果集,没有返回空list
 */
List<Map<String, Object>> listMap(@Param("columns") List<String> columns, @Param("query") Query query);
  • 第一个参数指定需要返回的列名,如:"username","add_time as addTime"
  • 第二个参数是查询条件
// 返回用户id,姓名,城市
List<Map<String, Object>> listMap = userMapper.listMap(Arrays.asList(
        "t.id"
        , "t.name"
        , "t2.city"
), query);

// List<Map<String, Object>>类型可读性不好,可以做下转换
List<UserVo> retList = MyBeanUtil.mapListToObjList(listMap, UserVo.class);

UserVo

public class UserVo {
    private int id;
    private String name;
    private String city;
    // GET SET
}

如果要做分页的话也简单,query追加一个方法即可

Query query = new Query()
// 关联城市表
query.join("inner join city_info t2 on t.id = t2.user_id")
    .eq("t2.city", "杭州")
    // 分页,第一页10条
    .page(1, 10);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容