union 连接查询  连接两个表后会过滤掉重复的值

<resultMap id="BaseResultMap" type="com.sprucetec.pay.etl.model.BillDetail">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="pay_order_no" jdbcType="VARCHAR" property="payOrderNo"/>
<result column="pay_channel_id" jdbcType="TINYINT" property="payChannelId"/>
<result column="pay_amount" jdbcType="INTEGER" property="payAmount"/>
<result column="trans_date" jdbcType="INTEGER" property="transDate"/>
<result column="trans_type" jdbcType="VARCHAR" property="transType"/>
<result column="error_type" jdbcType="VARCHAR" property="errorType"/>
<result column="is_check" jdbcType="TINYINT" property="isCheck"/>
</resultMap>

<sql id="condition">
  <if test="transType != null">
    and trans_type = #{transType,jdbcType=TINYINT}
  </if>
  <if test="payChannelId != null">
    and pay_channel_id = #{payChannelId,jdbcType=TINYINT}
  </if>

 </sql>

<select id="queryList" parameterType="com.pay.BillCheckQuery" resultMap="BaseResultMap">
select a.pay_order_no,a.trans_date,a.pay_amount,a.pay_channel_id,a.trans_type,a.error_type
from (select pay_order_no,trans_date,pay_amount,pay_channel_id,trans_type,"无结果" as error_type
from t_pay_core_order
where 1 = 1 <include refid="condition"/>
union
select pay_order_no,trans_date,pay_amount,pay_channel_id,trans_type,"缺失" as error_type
from t_pay_bill_file_detail
where 1 = 1 <include refid="condition"/>
) as a
order by a.trans_date desc
limit #{pageSize} offset #{startRecord}
</select>

union all 才可以将所有的值都查询出来,自己将所有的值查询完总是少,才发现是这个问题

<select id="queryCountAndSum" parameterType="com.BillCheckQuery" resultMap="BaseResultMap">
select sum(a.pay_amount) as trans_amount,count(1) as trans_num from
(select pay_amount from t_pay_core_order
where
pay_channel_id = #{payChannelId,jdbcType=SMALLINT}and trans_date &gt;= #{startTime,jdbcType=INTEGER}
and trans_date &lt;= #{endTime,jdbcType=INTEGER}union all
select pay_amount from t_pay_bill_file_detail
where
pay_channel_id = #{payChannelId,jdbcType=SMALLINT}and trans_date &gt;= #{startTime,jdbcType=INTEGER}
and trans_date &lt;= #{endTime,jdbcType=INTEGER}
) as a
</select>

传入对象中有list需要使用时,需要进行遍历,我在in语句中使用

<update id="updateByNum" parameterType="com.query.BillCheckQuery">
update t_pay_core_order t1,t_pay_bill_file_detail t2
set t1.is_check = 1,t2.is_check = 1
WHERE
t1.pay_order_no = t2.pay_order_no
and t2.pay_order_no in
<foreach item="payOrderNo" index="index" collection="orderlist" open="(" separator="," close=")">
#{payOrderNo,jdbcType=VARCHAR}
</foreach>
and t1.trans_date &gt;= #{startTime,jdbcType=INTEGER}
and t1.trans_date &lt;= #{endTime,jdbcType=INTEGER}</update>

或者直接在list中储存对象也可以遍历取出值

<insert id="batchInsert" parameterType="java.util.List" >
insert into t_pay_bill_file_detail (file_id,pay_order_no,third_trade_no,trans_type,
pay_channel_id,pay_amount,trans_date)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.payOrderNo},
#{item.transType},
#{item.transDate}
)
</foreach>
</insert>

ps:关注一下本人公众号,每周都有新更新哦!

mybatis中SQL语句运用总结的更多相关文章

  1. mybatis中sql语句传入多个参数方法

    1 使用map <select id="selectRole" parameterType="map" resultType="RoleMap& ...

  2. MyBatis中sql语句

    一.select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String&qu ...

  3. mybatis中sql语句必须用${}而不能不用#{}的情况

    在mybatis中如果我们使用#{}的方式编写的sql时,#{} 对应的变量自动加上单引号 ' ' 例如: select * from #{param} 当我们给参数传入值为user时,他的sql是这 ...

  4. Mybatis 中 sql 语句的占位符 #{} 和 ${}

    #{} 表示一个占位符号,通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换.#{} 可以有效防止   sql注入. #{}  ...

  5. Mybatis中sql语句中的in查询,一定要判断null的情况

    不严谨的写法,可能会报错:in (),这种情况不符合mysql的语法. select from loanwhere LOAN_ID in <foreach item="item&quo ...

  6. mybatis中sql语句查询操作

    动态sql where if where可以自动处理第一个and. <!-- 根据id查询用户信息 --> <!-- public User findUserById(int id) ...

  7. Mybatis中sql语句中的in查询,判断null和size为0的情况

    不严谨的写法,可能会报错:in (),这种情况不符合SQL的语法,导致程序报错. 如果简单只做非空判断,这样也有可能会有问题:本来in一个空列表,应该是没有数据才对,却变成了获取全部数据! 所以一个比 ...

  8. mybatis 中sql语句传递多个参数

    Available parameters are [2, 1, 0, param1, param2, param3] <select id="loginByTeacher"  ...

  9. mybatis中sql语句的批量插入

    <!-- 收件箱插入收件信息 -->    <insert id="insertReceiveemail">           <!-- 生成一条U ...

随机推荐

  1. alembic 数据库管理

    alembic简介 Alembic是SQLAlchemy作者编写的Python数据库迁移工具 安装 pip install alembic alembic 操作流程 初始化 alembic init ...

  2. 在centos6.x上安装teamviewer

    首先下载公钥: # wget http://www.teamviewer.com/link/?url=354858 # rpm --import TeamViewer_Linux_PubKey.asc ...

  3. 【Oracle】等待事件详细内容

    一.等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不 ...

  4. 关于Unity3d的Quaternion.Slerp的学习

    首先在场景中创建三个cube的GameObject,from表示要转换之前的样子,to表示转换之后的样子,change表示转的效果.如下图所示: 其中from和change cube开始运行之前的tr ...

  5. Python初学者第十四天 三元运算及文件处理2

    14day 1.三元运算: 又称三目运算,是对简单的条件语句的简写 如简单条件语句: if a > b: n = a else: n = b print(n) 三目运算语句: n = a if ...

  6. Exchange 2010 服务器邮件传输配额设置详解

    在企业的邮件系统管理中,传输邮件的大小配额关系到邮件队列.邮件传输速度以及关系到该附件是否能正常发送,直接关系到用户体验.为此,传输邮件大小的设置,也经常是企业邮件管理员比较迷惑的地方.如下: 1)  ...

  7. PHP调优

    目录 php.ini 内存 Zend OPcache 文件上传 最长执行时间 处理会话 缓冲输出 真实路径缓存 php.ini PHP解释器在 php.ini 文件中配置和调优.web和cli使用的路 ...

  8. 51nod 1437 迈克步

    题目链接 先利用单调栈or其他方法找到一个元素g[i]作为最小值的区间,设为[L, R]. 那么长度为R-L+1的组的最大值ans=max(ans,g[i]).但是有一个问题: 比如6这个元素是长度为 ...

  9. 利用describe( )中的count来检查数据是否缺省

    #-*- coding: utf-8 -*- #在python的pandas库中,只需要读入数据,然后使用describe()函数就可以查看数据的基本情况 import pandas as pd in ...

  10. Sublime 正则替换

    打开替换的窗口 在Find What 写入待匹配的正则表达式,然后在Replace With写上要替换的内容($1代表第一个括号内内容,依次类推) 然后选择对应的选项