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 ...
随机推荐
- BIRCH算法全解析:从原理到实战
本文全面解析了BIRCH(平衡迭代削减聚类层次)算法,一种用于大规模数据聚类的高效工具.文章从基础概念到技术细节,再到实战应用与最佳实践,提供了一系列具体的指导和例子.无论你是数据科学新手,还是有经验 ...
- 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
三.用go语言,设计一个执行中序遍历的非递归算法.(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等.) 文心一言,代码正常运行: ...
- JAVA学习week3
本周由于c++小学期作业.未能按时学习JAVA 主要复习了基本语法 hello word 输出语法 输出格式的选择,进制的转换,注释的选择 还预习了变量相关的知识点
- 你知道C++如何在一个函数内返回不同类型吗?
C++ 中要在一个函数内返回不同类型的值,你可以使用 C++17 引入的 std::variant 或 std::any,或者使用模板和多态.下面将分别介绍这些方法. 方法一:使用 std::vari ...
- Quartz核心原理之架构及基本元素介绍
1 什么是Quartz Quartz是一个作业调度框架,它可以与J2EE和J2SE应用相结合,也可以单独使用.它能够创建多个甚至数万个jobs这样复杂的程序,jobs可以做成标准的java组件或EJB ...
- 如何编写一个 Pulsar Broker Interceptor 插件
背景 之前写过一篇文章 VictoriaLogs:一款超低占用的 ElasticSearch 替代方案讲到了我们使用 Victorialogs 来存储 Pulsar 消息队列的消息 trace 信息. ...
- 'parent.relativePath' of POM com.qbb:log_record_elegant:1.0-SNAPSHOT points at com.qbb:qiu_code instead of org.springframework.boot:spring-boot-starter-parent
完整的错误: 'parent.relativePath' of POM com.qbb:log_record_elegant:1.0-SNAPSHOT (F:\QbbCode\qiu_code\log ...
- 5分钟攻略Spring-Retry框架实现经典重试场景
前言 今天分享干货,控制了篇幅,5分钟内就能看完学会. 主题是Spring-Retry框架的应用,做了一个很清晰的案例,代码可下载自测. 框架介绍 Spring-Retry框架是Spring自带的功能 ...
- Celery 定义和调用异步任务Task
https://docs.celeryq.dev/en/stable/userguide/tasks.html 使用app.task装饰器定义 需要通过导入celery app,然后使用@app.ta ...
- vue3组合式api生命周期
生命周期钩子函数 Vue3:https://cn.vuejs.org/api/composition-api-lifecycle.html Vue2:https://v2.cn.vuejs.org/v ...