提出问题
Mybatis如何实现传多个参数???
解决问题
例一:把参数放到map中,看下面代码,有点多
Service层的代码:
public List<PcsTask> findByPmProjectIdAndLeaderId(String projectId) {
String userId = SessionUtils.getCurrentUserId();
//查询参数
Map<String, Object> filter = new HashMap<>();
filter.put("leaderId", userId);
filter.put("pmProjectId", projectId);
return pcsTaskDAO.findByPmProjectIdAndLeaderId(filter);
}
DAO中的接口:
public List<PcsTask> findByPmProjectIdAndLeaderId(Map<String,Object> filter);
Mapper文件
<select id="findByPmProjectIdAndLeaderId" resultType="com.evada.de.projcommand.model.PcsTask" parameterType="java.util.Map">
select * from pm_workitem pw
where pw.pm_project_id = #{pmProjectId}
and pw.leader_id = #{leaderId}
and pw.workitem_status in ('1','2')
and pw.status > '0'
order by pw.plan_end_date asc
</select>
例二:看下代码#{0},#{1}好像不是特别好
DAO层的函数方法
Public User selectUser(String name,String area);
Mapper文件
<select id="selectUser" resultMap="BaseResultMap">
select * from user_user_t where user_name = #{0} and user_area=#{1}
</select>
其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可
例三:最推荐的方法,DAO和Mapper文件的代码量和参数都是最优的.
DAO层的函数方法
public ... findByStatus(@Param("mainTaskId") String mainTaskId, @Param("claimStatus") String claimStatus,@Param("subTaskStatus") String subTaskStatus);
Mapper文件
<select id="findByStatus" resultMap="PcsSubTaskDTOResultMap">
select pt.*,pw.code as task_code,pw.name as task_name
from pm_workitem pw,pm_task pt
where pt.status = '1'
and pt.pm_workitem_id = pw.id
and pt.pm_milestone_id = #{mainTaskId}
<if test="claimStatus != null and claimStatus != ''">
and pt.claim_status = #{claimStatus}
</if>
<if test="subTaskStatus != null and subTaskStatus != ''">
and pt.task_status = #{subTaskStatus}
</if>
order by pt.code asc
</select>