作者:故事我忘了
个人微信公众号:程序猿的月光宝盒

Oracle整合Mybatis实现list数据插入时,存在就更新,不存在就插入

entity 对应表中字段,如不对应,在xml中起别名

/**
* MH管理实体
*
* @author 金聖聰
* @version 1.0
* @className Excel4MH
* @date 2020/7/21 12:19
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Excel4MH implements Serializable {
private static final long serialVersionUID = 8925979180415560488L;
/** 管理机构名 */
private String orgName;
/** 执行值1 */
private Double zxz01;
/** 执行值2 */
private Double zxz02;
/** 业务时间 */
private String ywsj;
}

map Interface

/**
* MH管理实体
*
* @author 金聖聰
* @version 1.0
* @className Excel4MHMapper
* @date 2020/7/21 12:20
*/
public interface Excel4MHMapper {
void save(List<Excel4MH> list);
}

map 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.bsoft.mapper.Excel4MHMapper">
<insert id="save" parameterType="list">
merge into EXCEL_EHR_ZFBC_006 t1
using (
<foreach collection="list" item="item" index="index" separator="union all">
-- 给实体类中的字段起别名,与数据库中一致
select #{item.orgName} ORGNAME,
#{item.zxz01} ZXZ_01,
#{item.zxz02} ZXZ_02,
-- 字符串转日期函数
to_date(#{item.ywsj}, 'yyyy-mm-dd') YWSJ
-- Oracle中的dual表是一个单行单列的虚拟表 不懂想懂的 出门谷歌或百度,不想懂的这里不用改
from dual
</foreach>) t2
on (
--这里是判断条件 根据name和ywsj判读是否是同一条记录
t1.ORGNAME = t2.ORGNAME and t1.YWSJ = t2.YWSJ
)
-- 如果相等
when matched then
update
-- 这里注意: 在on中的判断条件中出现的字段这里不能出现
set t1.ZXZ_01 = t2.ZXZ_01,
t1.ZXZ_02 = t2.ZXZ_02
--如果不相等
when not matched then
insert ( ORGNAME
, ZXZ_01
, ZXZ_02
, YWSJ)
values ( t2.ORGNAME
, t2.ZXZ_01
, t2.ZXZ_02
, t2.YWSJ)
</insert>
</mapper>

在查询出的result中随机抽取一条记录

entity

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CheckValue4EvaluationIndex implements Serializable {
private static final long serialVersionUID = 222790624982912873L;
/** 上传条数 */
private Integer scts;
/** 抽样机构代码 */
private String cyjgdm;
/** 抽样机构综合评价指数 */
private Double cyjgzhpjzs;
/** 年份 格式 yyyy */
private String nf;
/** 修改标志 */
private String xgbz;
}

map interface

/**
* 评价指数mapper
*
* @author 金聖聰
* @version 1.0
* @className CheckValue4EvaluationIndexMapper
* @date 2020/7/13 10:19
*/
public interface CheckValue4EvaluationIndexMapper {
/**
* 根据传入的年份查询
*
* @param time 需要查询的年份 yyyy
* @return com.bsoft.pojo.vo.CheckValue4EvaluationIndex
* @author 金聖聰
* @email jinshengcong@163.com
* @version v1.0
* @date 2020/7/13 10:21
*/
CheckValue4EvaluationIndex queryByTime(@Param("time") String time);
}

map 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.bsoft.mapper.CheckValue4EvaluationIndexMapper">
<select id="queryByTime" resultType="CheckValue4EvaluationIndex">
select (select count(1) from EXCEL_EVALUATIONINDEX where TIME = #{time}) "scts",
jgdm "cyjgdm",
zhpjzs "cyjgzhpjzs",
#{time} "nf",
'1' "xgbz"
from (
select *
from EXCEL_EVALUATIONINDEX
where TIME = #{time}
order by dbms_random.value
)
where rownum = 1
group by jgdm, zhpjzs, JGM
</select>
</mapper>

Oracle整合Mybatis实现list数据插入时,存在就更新,不存在就插入以及随机抽取一条记录的更多相关文章

  1. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  2. sql 随机抽取几条数据的方法 推荐

    传说用这个语句管用:select top 5 * from tablename order by newid() 我放到sql的查询分析器里去执行果然管用,随机抽取5条信息,不停的换,结果我应用到程序 ...

  3. Oracle随机选择一条记录SQL

    Oracle随机选择一条记录SQL:

  4. 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)

    从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...

  5. laravel如何从mysql数据库中随机抽取n条数据

    laravel如何从mysql数据库中随机抽取n条数据 一.总结 一句话总结: inRandomOrder():$userQuestions=UserQuestion::where($map)-> ...

  6. 2流高手速成记(之三):SpringBoot整合mybatis/mybatis-plus实现数据持久化

    接上回 上一篇我们简单介绍了基于SpringBoot实现简单的Web开发,本节来看Web开发中必不可少的内容--数据持久化 先看项目结构: 1. 创建数据表 打开mysql,打开数据库 test (没 ...

  7. sql server 大批数据插入时,时间过长的问题

    private const string con = "server=192.168.30.36;database=test;user=sa;pwd=123456"; static ...

  8. 从mysql数据表中随机取出一条记录

    核心查找数据表代码: ; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. S ...

  9. Oracle数据库随机取某条记录的一个字段值

    思路: 先将取出的值随机排序,然后在随机排序的每次取第一条的结果 举例如下: select * from(select t.code fromTBIZOPS_PROVINCE  t ORDER BY ...

随机推荐

  1. MySQL Workbench 8.0 目录汉化

    <?xml version="1.0"?> <data> <value type="list" content-type=&quo ...

  2. day18__文件操作

    一.3 种模式 r: 只读模式,        r+: 读写模式,覆盖开头内容 w: 写模式,全覆盖 (如果是没有的文件则重新创建空文件) a+:  读写模式,从最开头写,覆盖开头内容 (如果是没有的 ...

  3. 【错误】fatal: destination path already exists and is not an empty directory. 错误及解决办法

    今天在使用Git for Windows clone代码时,遇到了题目所示的错误,简单来说就是目标路径‘.’已经存在并且不是一个空目录. 可是在我在文件夹下并没有看到任何文件,显示“该文件夹为空”,然 ...

  4. igate(因特网网关)

    网关:Gateway 又称网间连接器.协议转换器.-----复杂的网络互连设备. 网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连.网关既可以用于广域网互连,也可以 ...

  5. P3879 阅读理解

    都这么大了,you这些怎么能算生词呢,难道三年级以前就有人做蓝题了吗(是我不配) 我觉得这道题出难一点点的话,可以整行读入什么的(口嗨怪).先看题目,对于每个生词,输出他出现在了哪些文章(需要排序). ...

  6. 集成Swagger在线调试

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  7. springmvc json乱码问题

    在方法上加上:produces属性即可 @RequestMapping(produces = "application/json;charset=utf-8")

  8. 从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)

    在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 如果资源未缓存,发起新请求 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证. 检验 ...

  9. UVA11300 Spreading the Wealth 题解

    题目 A Communist regime is trying to redistribute wealth in a village. They have have decided to sit e ...

  10. Java入门系列之访问修饰符作用范围

    前言 之前以为Java和C#中访问修饰符差不多一样,后面才了解到还是有些差异,本节只讲解学习Java中访问修饰符一些需要注意的地方或者从概念上不太好理解我们会通过实际例子来说明,若有错误之处,还请批评 ...