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. window 7 & 2008R2 多核cpu套接字泄露补丁

    http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix373886/7600/free/43 ...

  2. maven dependendency

    登录|注册     zhengsj的专栏       目录视图 摘要视图 订阅 [公告]博客系统优化升级     [收藏]Html5 精品资源汇集     博乐招募开始啦       Maven De ...

  3. Asp.net core 项目实战 新闻网站+后台 源码、设计原理 、视频教程

    首先说明,视频教程.源码并非本人原创 本人将项目分割开,并写了一些说明. 该视频教程 地址  https://study.163.com/course/courseMain.htm?courseId= ...

  4. 查看oracle数据库最近执行了哪些sql语句

    SELECT b.sql_text, --content of SQL a.machine, --which machine run this code a.username, a.module, - ...

  5. Metaspliot进行漏洞扫描

    Metaspliot进行漏洞扫描 Metasploit框架是Metasploit项目中最著名的创作,是一个软件开发.测试和利用漏洞的平台.它可以用来创建安全测试工具开发的模块,也可利用模块作为一个渗透 ...

  6. pip install lxml mysql-python error

    问题0: 在安装 mysql-python时,会出现: sh: mysql_config: not found Traceback (most recent call last): File &quo ...

  7. 通过163smtp服务器向各大邮箱发送邮件(SOCKET编程)

    package server; import java.io.*; import java.net.*; import java.sql.Time; import java.util.Scanner; ...

  8. ZooKeeper教程(一)----Centos7下安装ZooKeeper(单机版)

    1.下载源码 官网下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/ 选择最新的版本进行下载 这里选择3.4.10进行下载: wget http:// ...

  9. BZOJ3697:采药人的路径(点分治)

    Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材. 采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳性的. 采药人每天都要进行采药 ...

  10. 【题解】前k大子段和

    题目描述 Peter喜欢玩数组.NOIP这天,他从Jason手里得到了一个大小为\(n\)的数组. Peter求出了这个数组的所有子段和,并将这\(\frac{n(n+1)}{2}\)个数降序排列,他 ...