在mybatis中mapper.xml中如何实现sql动态条件查询结果后求和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mybatis中mapper.xml中如何实现sql动态条件查询结果后求和相关的知识,希望对你有一定的参考价值。
现在遇到个状况,如下代码
select
rela.member_paper_id,rela.member_id,paper_type,rela.paper_id,rela.create_time,rela.update_time,rela.start_time,rela.end_time,me.member_name,pa.paper_name,concat (rela.paper_score ,'分' ) as paper_score,concat (pa.total_score ,'分' ) as total_score,
cast((
select count(1) from
training_member_paper_question_relation qrela
left join training_member_paper_relation mpr on qrela.member_paper_id = mpr.member_paper_id
where
qrela.member_paper_id = rela.member_paper_id and is_correct = '0'
) as char(5))as error_number,
cast((
select
SUM(d.question_score)
from
(select qrela.question_score from training_member_paper_question_relation qrela
left join training_paper_question que on qrela.question_id = que.question_id
where qrela.member_paper_id = '2017110900011225' and (que.question_type = 'single' or que.question_type = 'order' or que.question_type = 'multiple')
)as d
) as char(5)) as subjective_score,
cast((
select
COUNT(1)
from training_member_paper_question_relation qrela
left join training_paper_question que on qrela.question_id = que.question_id
where qrela.member_paper_id = rela.member_paper_id and (que.question_type = 'single' or que.question_type = 'order' or que.question_type = 'multiple')
) as char(5))as subjective_item
from
training_member_paper_relation rela
left join training_member me on rela.member_id = me.member_id
left join training_paper pa on rela.paper_id = pa.paper_id
WHERE rela.member_paper_id = '2017110900011225'
在这种情况下是可以查出member_paper_id = '2017110900011225'的数据,这个没问题,但我的WHERE条件后的rela.member_paper_id 在mapper是动态的(= #memberPaperId,jdbcType=CHAR) ,那么在上面 qrela.member_paper_id 就不可能为= '2017110900011225'不变的,但是我把它改成像下面一个字段的方式: qrela.member_paper_id = rela.member_paper_id 直接报错[Err] 1054 - Unknown column 'rela.member_paper_id' in 'where clause',
subjective_score字段的查询是先查出条件下的结果,再把结果求和,再把这个作为一个字段去查询,下面一个 subjective_item字段查询是直接查出数量,再作为一个字段查询,这个是没有问题的,请问大神这个有没有什么办法啊
# This is the configuring for logging displayed in the Application Server
log4j.rootCategory=DEBUG,stdout,logfile
log4j.logger.java.sql.PreparedStatement=debug,stdout
log4j.logger.java.sql.ResultSet=debug
#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %p [%c] - <%m>%n
如何在xml中传入list参数
mapper.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxx.xx.cms.dal.extdao.GroupByMaterialMapper"> <select id="groupByMaterialIds" resultType="com.xxx.xx..cms.dal.extdomain.GroupByMaterialDO"> select t1.material_id AS materialId, t2.material_name AS materialName, t2.material_type AS materialType, t1.position_id AS positionId, t5.position_name AS positionName, t1.project_id AS projectId, t3.project_name AS projectName, t1.task_id AS taskId,t4.task_name AS taskName from xspace_task_material_pre t1 left join xspace_material_pre t2 on t1.material_id = t2.id left join xspace_delivery_project_pre t3 on t1.project_id = t3.id left join xspace_delivery_task_pre t4 on t1.task_id = t4.id left join xspace_content_position_pre t5 on t1.position_id = t5.id <where> t1.material_id in <foreach close=")" collection="materialIds" item="listItem" open="(" separator=","> #{listItem} </foreach> </where> order BY t1.material_id </select> </mapper>
mapper.java文件
import com.xxx.xx.cms.dal.extdomain.GroupByMaterialDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * * @author * @version 2017/12/5 17:38:29 */ @Mapper public interface GroupByMaterialMapper { /** * * * @param materialIds * @return */ List<GroupByMaterialDO> groupByMaterialIds(@Param("materialIds") List<Long> materialIds); }
以上是关于在mybatis中mapper.xml中如何实现sql动态条件查询结果后求和的主要内容,如果未能解决你的问题,请参考以下文章