mybatis使用oracle进行添加数据的心得
本次博主主要进行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进行添加数据的心得的更多相关文章
- 使用mybatis向oracle数据库插入数据异常
遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...
- MyBatis在Oracle中插入数据并返回主键的问题解决
引言: 在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2 SQL Snipp ...
- MyBatis+mysql查询和添加数据
项目结构: Menu package com.mstf.dao; import java.util.Scanner; import org.apache.ibatis.session.SqlSessi ...
- 低级错误之Oracle客户端添加数据
本来可以为空的外键,自己非要写一个无意义的值,导致数据保存失败.
- 基于mybatis向oracle中插入数据的性能对比
数据库表结构: 逐条插入sql语句: <insert id="insert" parameterType="com.Structure"> INSE ...
- mybatis+oracle添加一条数据并返回所添加数据的主键问题
最近做mybatis+oracle项目的时候解决添加一条数据并返回所添加数据的主键问题 controller层 @RequestMapping("/addplan") public ...
- Oracle添加数据文件创建表空间,创建用户代码
1,添加数据文件创建表空间 CREATE TABLESPACE "TEST1" DATAFILE 'D:\ORACLE\11G\ORADATA\ORCL\TEST1.DBF' SI ...
- oracle添加数据时主键自动增长
CREATE TABLE STUDENT( --创建学生表 ID NUMBER(10) PRIMARY KEY, --主键ID SNAME VARCHAR2(20), ); 此时给学生表添加数 ...
- MyBatis基础入门《十》添加数据
MyBatis基础入门<十>添加数据 描述: 修改了实体类:TblClient.java,将其字段:cbirthday 由String类型改成了Date类型. TblClient.java ...
- [oracle] 如何使用myBatis在数据库中插入数据并返回主键
在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...
随机推荐
- testre
f5看到关键代码判断 猜测这是flag或者是加密后的结果,直接将其当作flag答案不对,所以猜测为加密后的结果,然后再通过其他函数了解 跟进第一个函数发现编码表 本来想试试base解密,可是当时只试了 ...
- Linux socket API
socket是进程通信机制的一种,与PIPE.FIFO不同的是,socket即可以在同一台主机通信(unix domain),也可以通过网络在不同主机上的进程间通信(如:ipv4.ipv6),例如因特 ...
- 你所不知道的ASP.NET Core进阶系列(三)
前言 一年多没更新博客,上一次写此系列还是四年前,虽迟但到,没有承诺,主打随性,所以不存在断更,催更,哈哈,上一篇我们细究从请求到绑定详细原理,本篇则是探讨模型绑定细节,当一个问题产生到最终解决时,回 ...
- 编程技巧 --- VS如何调试.Net源码
引言 如题,在VS中如何调试 .Net 源码呢? 一般来说,VS2022,都是默认启用 F12 转到定义能够看到源码,如果大家发现自己无法使用 F12 查看源码,可以在 "工具" ...
- Golang中如何自定义时间类型进行xml、json的序列化/反序列化
在日常开发工作中,我们进行会遇到将 struct 序列化 json字符串以及将 json字符串 反序列化为 struct 的场景,大家也对此十分熟悉. 最近工作中,遇到了需要将 struct 序列化 ...
- linux-ELK安装配置
前言: ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kibana. • Elasticsearch 是一个搜索和分析引擎. ...
- 公司敏感数据被上传Github,吓得我赶紧改提交记录
大家好,我是小富- 说个事吧!最近公司发生了一个事故,有同事不小心把敏感数据上传到了GitHub上,结果被安全部门扫描出来了.这件事导致公司对所有员工进行了一次数据安全的培训.对于这个事我相信,有点工 ...
- SpringCore完整学习教程5,入门级别
本章从第6章开始 6. JSON Spring Boot提供了三个JSON映射库的集成: Gson Jackson JSON-B Jackson是首选的和默认的库. 6.1. Jackson 为Jac ...
- VScode怎么实现c的运行,这里只讲述一些细节
第一下载的Vscode要设置信任模式,否则你后面搞什么都没有用 第二下载minGw还是gcc 都行 第三安装插件,c,c++. 然后编译就行了,我搞了一天,主要弹出的是未找到exe文件,但是我告诉大家 ...
- 玩转Spring状态机
说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍Spring状态机之前,让我们来看看设计模式中的状态模式. 1 ...