本次博主主要进行oralce数据库开发,好久不用oracle,有很多知识点也忘的差不多了,本次主要是复习一下工作中主要使用的一些sql语句编写;

查询

查询语句都是正常的,但是需要注意的是oracle数据库在查询的时候,表名使用别名的时候,请不要使用as关键字,只有mysql数据库才可以使用,oracle只支持字段名别名可以使用as关键字。

  增加

  添加数据的时候,我们后台很可能使用到添加后的主键id,此时也跟mysql不一样,mybatis只要配置一下insert属性就可以了,比如:

  1 <insert id="add" keyProperty="recId" useGeneratedKeys="true">

  但是这样不支持oracle,因为oracle没有自增的主键,只能自己依靠自己定义的自增序列来为主键id赋值;前提是需要知道序列名,比如:

<insert id="add">
<selectKey keyProperty="recId" resultType="long" order="BEFORE">
select SEQ_Table.nextval from dual
</selectKey>
insert into SA(id)values(#{recId})
</insert>

  序列是这样创建的:

create sequence SEQ_Table \\序列名
increment by 1 \\步长为1
start with 1 \\从1开始
maxvalue 999999999; \\最大值

  这样我们就可以使用我们自定义的序列了

  批量增加时,是不会给主键id赋值的,只能插入,有两种方法:

  第一种,表中没有主键id,都是其他基本信息和外部传进来的关联id,

<insert id="batchAdd">
insert all
<foreach collection="entities" item="entity" separator=" " open=" " close=" ">
into SA_T(
REC_ID,GOODS_NAME,
REG_USR_ID,REG_DT,UPDT_USR_ID,UPDT_DT
)values
(#{entity.recId},#{entity.goodsName},
#{entity.regUsrId},#{entity.regDt},#{entity.updtUsrId},#{entity.updtDt})
</foreach>
select 1 from dual
</insert>

  第二种:单表添加时,需要根据序列值来增加,用第一种方法是不可行的,比如:

<insert id="batchAdd">
insert all
<foreach collection="entities" item="entity" separator=" " open=" " close=" ">
into SA_T(
REC_ID,GOODS_NAME,
REG_USR_ID,REG_DT,UPDT_USR_ID,UPDT_DT
)values
(SEQ_T.nextval,#{entity.goodsName},
#{entity.regUsrId},#{entity.regDt},#{entity.updtUsrId},#{entity.updtDt})
</foreach>
select 1 from dual
</insert>

  这样之后,只会出现都是同一个主键id,而不会是逐渐增加的,所以要用下面这种方式:

<insert id="batchAdd">
insert
into SA(REC_ID,DEALER_CODE)
select SEQ_SA.nextval,t.* from (
<foreach collection="entities" item="entity" separator="union all">
select #{entity.dealerCode} from dual
</foreach>
) t

  这是正常的增加,还有一些insert into 。。select。。from这样的从其他表直接查询过来的,也需要注意一下,字段名一定要一样,因为没有指定那些字段需要被添加,所以要都一样

<insert id="findAndAddByVinNoList">
insert into SA_T_LOG
select * from SA_T
where VIN in
<foreach collection="entities" item="vin" separator="," open="(" close=")" >
#{vin}
</foreach>
</insert>

  剩下的就是业务逻辑了,本人就不关注了。知识都是需要自己巩固复习的,要不然会忘的一干二净,刚接触的时候,连序列都忘了是啥了;相当年自己都可以在oracle中声明对象一些骚操作也都忘了


  Oracle如何把字符串结果集按照一列显示出来呢?解决思路就是先将其拼接一个字符串然后切割进行获取sql:

1 select  DISTINCT REGEXP_SUBSTR(TXT, '[^,]+', 1, LEVEL) AS TERM_VAL1 from
2 (select '1,2,3,4,5' as txt from dual)
3 CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(TXT, '[^,]+', '')) + 1

mybatis使用oracle进行添加数据的心得的更多相关文章

  1. 使用mybatis向oracle数据库插入数据异常

    遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...

  2. MyBatis在Oracle中插入数据并返回主键的问题解决

    引言:  在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2   SQL Snipp ...

  3. MyBatis+mysql查询和添加数据

    项目结构: Menu package com.mstf.dao; import java.util.Scanner; import org.apache.ibatis.session.SqlSessi ...

  4. 低级错误之Oracle客户端添加数据

    本来可以为空的外键,自己非要写一个无意义的值,导致数据保存失败.

  5. 基于mybatis向oracle中插入数据的性能对比

    数据库表结构: 逐条插入sql语句: <insert id="insert" parameterType="com.Structure"> INSE ...

  6. mybatis+oracle添加一条数据并返回所添加数据的主键问题

    最近做mybatis+oracle项目的时候解决添加一条数据并返回所添加数据的主键问题 controller层 @RequestMapping("/addplan") public ...

  7. Oracle添加数据文件创建表空间,创建用户代码

    1,添加数据文件创建表空间 CREATE TABLESPACE "TEST1" DATAFILE 'D:\ORACLE\11G\ORADATA\ORCL\TEST1.DBF' SI ...

  8. oracle添加数据时主键自动增长

    CREATE TABLE STUDENT( --创建学生表  ID NUMBER(10) PRIMARY KEY,   --主键ID  SNAME VARCHAR2(20), ); 此时给学生表添加数 ...

  9. MyBatis基础入门《十》添加数据

    MyBatis基础入门<十>添加数据 描述: 修改了实体类:TblClient.java,将其字段:cbirthday 由String类型改成了Date类型. TblClient.java ...

  10. [oracle] 如何使用myBatis在数据库中插入数据并返回主键

    在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...

随机推荐

  1. Spring5学习随笔-Spring5的基本介绍、工厂设计模式

    学习视频:[孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索.学不会Spring?只因你未遇见孙哥] Spring系列-工厂 第一章.引言 Spring I ...

  2. CF510B Fox And Two Dots

    题目大意 矩阵中各个方格都有颜色,判断是否有相同颜色的方块可以组成环.(原题链接:CF510B Fox And Two Dots) 输入: 第一行:\(n\), \(m\),表示矩阵的行和列 接下来\ ...

  3. OpenAI宫斗,尘埃落定,微软成最大赢家

    周末被OpenAI董事会闹剧刷屏,ChatGPT之父Sam Altman前一天被踢出董事会,免职CEO,后一天重返OpenAI,目前结局未知. 很多同学想要围观,缺少背景知识,这里老章为大家简单介绍前 ...

  4. python的websockets库

    安装 pip install websockets 分为客户端和服务端两部分 服务端一般与异步的库一起用 因为客户端不可能只服务一个客户 所以要用异步处理多个客户 以asyncio示例 from we ...

  5. 【scikit-learn基础】--『数据加载』之外部数据集

    这是scikit-learn数据加载系列的最后一篇,本篇介绍如何加载外部的数据集. 外部数据集不像之前介绍的几种类型的数据集那样,针对每种数据提供对应的接口,每个接口加载的数据都是固定的.而外部数据集 ...

  6. [cnn][julia]Flux实现卷积神经网络cnn预测手写MNIST

    julia_Flux 1.导入Flux.jl和其他所需工具包 using Flux, MLDatasets, Statistics using Flux: onehotbatch, onecold, ...

  7. JXNU acm选拔赛 涛神的城堡

    涛神的城堡 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submiss ...

  8. 小程序优化:第三方SDK过大解决方案

    [前言] 小程序开发中,有时会遇到下面这种情况,项目目录中存放过大的js包,会被警告影响手机端性能,同时让开发编译启动变得很慢.慢是其次,单是影响性能这一点,就需要解决一下. [云资源] 将项目js包 ...

  9. 华企盾DSC无缝替换其它加密软件两种方法

    有源码和大型图纸的使用第一种方案 第一种: 1.把DSCClient.exe和DSCService.exe添加到竞品的加密软件进程中,配置允许打开加密文件,加密类型不加密 2.安装DSC客户端后扫描加 ...

  10. WebView中的页面调试方法

    在 iOS 12 中,苹果正式弃用 UIWebView,改成 WKWebView,参考官方声明. 后者在性能.稳定性.功能方面有很大提升,并且与 Safari 具有相同的 JavaScript 引擎( ...