Mybatis之传多个参数方法总结

来源:互联网 发布:oracle sql性能优化 编辑:程序博客网 时间:2024/06/16 02:05


提出问题

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>
原创粉丝点击