<select id="queryMymeet" parameterType="java.lang.Integer" resultType="com.work.manager.entity.pojo.ProjectPojo">
SELECT p1.id,p1.name,p1.manager_id,p1.is_scrum,u1.real_name as subManagerName,p1.parent_id,p2.name as parentProName,u2.real_name as parManagerName,p2.manager_id as parManagerId from
project p1
left join project p2
on p1.parent_id=p2.id
left join user u1
on p1.manager_id=u1.id
left join user u2
on p2.manager_id=u2.id
where p1.id in (
SELECT p1.id from
(SELECT case when parent_id=0 then id else parent_id end as parent_id,id,manager_id,is_scrum from project where is_scrum=1 ) p1
left join project_user p2 on p1.id=p2.project_id
left join project p3 on p1.manager_id=p3.id
<if test="userId !=null">
where p1.manager_id=#{userId} or p2.user_id=#{userId} or p3.manager_id=#{userId} group by p1.id
</if>
)
</select>
此时会报错没有在integer中找到userid的get方法的错误。假如这里userid用的是String类型则不会报这个错误。
解决办法
1、使用一个包装类将userid包装起来。
2、需要使用_parameter 当做入参
例:
<select id="queryMymeet" parameterType="java.lang.Integer" resultType="com.work.manager.entity.pojo.ProjectPojo">
SELECT p1.id,p1.name,p1.manager_id,p1.is_scrum,u1.real_name as subManagerName,p1.parent_id,p2.name as parentProName,u2.real_name as parManagerName,p2.manager_id as parManagerId from
project p1
left join project p2
on p1.parent_id=p2.id
left join user u1
on p1.manager_id=u1.id
left join user u2
on p2.manager_id=u2.id
where p1.id in (
SELECT p1.id from
(SELECT case when parent_id=0 then id else parent_id end as parent_id,id,manager_id,is_scrum from project where is_scrum=1 ) p1
left join project_user p2 on p1.id=p2.project_id
left join project p3 on p1.manager_id=p3.id
<if test="_parameter !=null">
where p1.manager_id=#{userId} or p2.user_id=#{userId} or p3.manager_id=#{userId} group by p1.id
</if>
)
</select>
<select id="findById" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
*
from
reason op
where
1=1
<if test="_parameter != null">
and
id = #{_parameter, jdbcType=BIGINT}
</if>
</select>