【開源項目筆記:platform-wechat-mall】Mybatis 查詢數據庫返回部分字段

在本開源項目中數據庫操作採用了Mybatis,不美的是查詢數據一律返回VO結構,即使只需要其中的一兩個字段也如此,更別提多表聯合查詢時空字段佔了90%,需要改進。

本文描述Mybatis如何在單表查詢和多表聯合查詢中僅返回部分字段。
主要思路,把查詢返回值從VO修改爲java.util.HashMap。

作者對Mybatis一知半解,並不知其所以然,理論知識請看這裏 Mybatis3簡介

1. 單表查詢

以fbPlanManage對象爲例,
新增一個部分字段返回的查詢方法 queryList1:

1) ApiFBPlanManageMapper.xml

新建fbPlanManageListMap,type 爲 “java.util.HashMap” :

<resultMap type="java.util.HashMap" id="fbPlanManageListMap">
    <result property="id" column="id"/>
    <result property="dayNumber" column="day_number"/>
    <result property="startDate" column="start_date"/>
    <result property="endDate" column="end_date"/>
    <result property="pushTime" column="push_time"/>
</resultMap>

對應Sql:

<select id="queryList1" resultMap="fbPlanManageListMap">
    select
    p.id,
    p.day_number,
    p.start_date,
    p.end_date,
    p.push_time,    from nideshop_fitbee_plan_manage p   
    <where>
        <if test="user_id != null">
            p.usr_id = #{user_id}
        </if>
    </where>  
2) ApiFBPlanManageMapper.java

新增查詢方法queryList1:

List<Map<String, Object>> queryList1(Map<String, Object> map);
3)ApiFBPlanManageService.java

修改查詢接口,調用查詢接口使用新方法queryList1,返回結果從FBPlanManageVo修改爲Map<String, Object>:

/*public List<FBPlanManageVo> queryList(Map<String, Object> map) {
    return fbPlanManageDao.queryList(map);
}*/
public List<Map<String, Object>> queryList(Map<String, Object> map) {
    return fbPlanManageDao.queryList1(map);
}
4)ApiFBPlanManageController.java

修改queryList接口調用處:

/**
 * 獲取用戶的運動計劃
 */
/*@ApiOperation(value = "獲取用戶的運動計劃接口", response = Map.class)
@PostMapping("list")
public Object list(@LoginUser UserVo loginUser) {
    Map<String, Object> param = new HashMap<String, Object>();
    param.put("user_id", loginUser.getUserId());
    List<FBPlanManageVo> entities = fbPlanManageService.queryList(param);
    return toResponsSuccess(entities);
}*/

/**
 * 獲取用戶的運動計劃
 */
@ApiOperation(value = "獲取用戶的運動計劃接口", response = Map.class)
@PostMapping("list")
public Object list(@LoginUser UserVo loginUser) {
    Map<String, Object> param = new HashMap<String, Object>();
    param.put("user_id", loginUser.getUserId());
    List<Map<String, Object>> entities = fbPlanManageService.queryList(param);
    return toResponsSuccess(entities);
}

至此單表查詢返回部分字段的修改完成。

2. 聯合查詢

在單表查詢的基礎上修改,聯合查詢 nideshop_fitbee_plan_manage 和 nideshop_goods兩張表,在返回結果中增加 planName字段。

1)FBPlanManageVo

新增需要返回的新字段 planName

/**運動計劃名稱**/
private String planName;

/**
 * 設置:計劃名稱
 */
public void setPlanName(String planName) {
    this.planName = planName;
}

/**
 * 獲取:計劃名稱
 */
public String getPlanName() {
    return planName;
}
2)ApiFBPlanManageMapper.xml

修改resultMap,新增待查詢的字段:

<resultMap type="java.util.HashMap" id="fbPlanManageListMap">
    <result property="id" column="id"/>
    <result property="dayNumber" column="day_number"/>
    <result property="startDate" column="start_date"/>
    <result property="endDate" column="end_date"/>
    <result property="pushTime" column="push_time"/>
    <!--聯合查詢運動計劃名稱-->
    <association property="planName" javaType="String" >
        <result property="name" column="name" />
    </association>
</resultMap>

修改sql:

<select id="queryList1" resultMap="fbPlanManageListMap">
    select
    p.id,
    p.day_number,
    p.start_date,
    p.end_date,
    p.push_time,
    g.name
    from nideshop_fitbee_plan_manage p
    INNER JOIN nideshop_goods g
    ON p.plan_id = g.id
    <where>
        <if test="user_id != null">
            p.usr_id = #{user_id}
        </if>
    </where>

修改完畢,查詢返回結果中將新增planName字段。

參考文章

Mybatis查詢部分字段

That’s all. Thank you!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章