前面都是通過sql註解的方式來寫sql,但今天碰到了個比較複雜的sql,採用sql註解嘗試了幾次,最終還是以失敗告終,最終還是通過xml的方式來解決。
1、service的代碼內容:
@Override
public Map<String, String> getUserRelDepName(String ids) {
Map<String,String> mapInfos=new HashMap<>();
List<Long> sqlStr=CommonUtils.getLongList(ids,BaseEnum.BASE_REL_CHAR.getValue());
List<SimpleUserRelDep> list=baseMapper.getUserRelDepName(sqlStr);
for(SimpleUserRelDep simpleUserRelDep:list){
mapInfos.put(simpleUserRelDep.getUserId()+"",simpleUserRelDep.getDepName());
}
return mapInfos;
}
2、mapper的定義
/**
*獲取用戶關聯的部門信息
* @param ids
* @return
*/
@SqlParser(filter = true)
List<SimpleUserRelDep> getUserRelDepName(List<Long> ids );
3、ManagerOperatorMapper.xml的定義:
<!--用戶的關聯的部門的查詢結果-->
<resultMap id="SimpleResultMap" type="org.go.show.users.dto.SimpleUserRelDep">
<id column="ID" property="userId" jdbcType="BIGINT"/>
<result column="DEP_ID" property="depId" jdbcType="BIGINT"/>
<result column="DEP_NAME" property="depName" jdbcType="VARCHAR"/>
</resultMap>
<!--查詢用戶的關聯的部門信息-->
<select id="getUserRelDepName" resultMap="SimpleResultMap">
select user.ID as ID,user.DEP_ID as DEP_ID,dept.`NAME` as DEP_NAME from GS_MANAGER_OPERATOR as user LEFT JOIN GS_MANAGER_DEPARTMENT as dept on user.DEP_ID=dept.ID WHERE user.ID IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
4、查詢結果臨時實體定義
package org.go.show.users.dto;
public class SimpleUserRelDep {
private Long userId;
//角色中文名
private Long depId;
//是否選中
private String depName;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getDepId() {
return depId;
}
public void setDepId(Long depId) {
this.depId = depId;
}
public String getDepName() {
return depName;
}
public void setDepName(String depName) {
this.depName = depName;
}
}