使用 mybatis和oracle 数据库出现的问题
mybatis 官网教程
http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
出现
Could not set parameters for mapping: ParameterMapping{property='ROOM_ID', mode=IN, javaType=class java.lang.Integer, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}
原因在于输入参数非基本类型都要进行映射
解决办法:http://makemyownlife.iteye.com/blog/1610021
在oracle中怎么实现判断有数据则update,没数据则insert?
使用merge into
http://blog.csdn.net/ghgzczxcvxv/article/details/51518509
http://www.cnblogs.com/dongsheng/p/4384754.html
MERGE INTO DORMTEST T1
USING (SELECT 'mmm' as Name,10003 as ID, 109 AS ROOM_ID, 1 AS BED_ID, 1 AS BUILDING_ID from dual) T2
ON ( T1.ID=T2.ID)
WHEN MATCHED THEN
UPDATE SET T1.BED_ID = T2.BED_ID
WHEN NOT MATCHED THEN
INSERT (ID,NAME,ROOM_ID,BED_ID,BUILDING_ID) VALUES(T2.ID,T2.NAME,T2.ROOM_ID,T2.BED_ID,T2.BUILDING_ID);
在mysql中使用on duplicate update
http://www.jquerycn.cn/a_24239
什么是dual?
https://zhidao.baidu.com/question/81214206.html
如何在mybatis中使用merge into
https://stackoverflow.com/questions/19593785/how-can-i-use-oracle-merge-statement-using-mybatis
<update id="setScheme" parameterType="com.xmair.pojo.SchemeUploaded">
MERGE INTO DORMTEST T1
USING dual
ON ( T1.ID=#{ID,jdbcType=NUMERIC})
WHEN MATCHED THEN
UPDATE SET T1.NAME=#{NAME,jdbcType=VARCHAR},T1.ROOM_ID=#{ROOM_ID,jdbcType=NUMERIC},T1.BED_ID=#{BED_ID,jdbcType=NUMERIC},T1.BUILDING_ID=#{BUILDING_ID,jdbcType=NUMERIC}
WHEN NOT MATCHED THEN
INSERT (ID,NAME,ROOM_ID,BED_ID,BUILDING_ID) VALUES(#{ID,jdbcType=NUMERIC},#{NAME,jdbcType=VARCHAR},#{ROOM_ID,jdbcType=NUMERIC} ,#{BED_ID,jdbcType=NUMERIC},#{BUILDING_ID,jdbcType=NUMERIC})
</update>
sql exists用法
http://www.cnblogs.com/mytechblog/articles/2105785.html
怎么设置oracle主键自增长
http://blog.csdn.net/liunian02050328/article/details/40422065/
触发器:可以通过SQL developer来设置
http://blog.csdn.net/indexman/article/details/8023740/
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
序列:
create sequence SEQ_TEST
minvalue 1 --最小值
nomaxvalue --不设置最大值
start with 1 --从1开始计数
increment by 1 --每次加1个
nocycle --一直累加,不循环
nocache; --不建缓冲区
如何在mybatis中写多条SQL语句
https://stackoverflow.com/questions/7174225/mybatis-executing-multiple-sql-statements-in-one-go-is-that-possible
<delete id="deleteUnfinishedData" parameterType="map">
{call
declare
begin
delete from TABLE1 where id = #{valueFromMap1};
delete from TABLE2 where id = #{valueFromMap2};
end
}
</delete>
{call
declare
begin
MERGE INTO DORMTEST T1
USING dual
ON ( T1.ID=#{ID,jdbcType=NUMERIC})
WHEN MATCHED THEN
UPDATE SET T1.NAME=#{NAME,jdbcType=VARCHAR},T1.ROOM_ID=#{ROOM_ID,jdbcType=NUMERIC},T1.BED_ID=#{BED_ID,jdbcType=NUMERIC},T1.BUILDING_ID=#{BUILDING_ID,jdbcType=NUMERIC}
WHEN NOT MATCHED THEN
INSERT (ID,NAME,ROOM_ID,BED_ID,BUILDING_ID) VALUES(#{ID,jdbcType=NUMERIC},#{NAME,jdbcType=VARCHAR},#{ROOM_ID,jdbcType=NUMERIC} ,#{BED_ID,jdbcType=NUMERIC},#{BUILDING_ID,jdbcType=NUMERIC});
MERGE INTO STAFFTEST T2
USING dual
ON ( T2.STAFF_ID=#{ID,jdbcType=NUMERIC})
WHEN MATCHED THEN
UPDATE SET T2.PHONE=#{PHONE,jdbcType=VARCHAR},T2.GENDER=#{GENDER,jdbcType=VARCHAR},T2.ADMIN_PKID=#{ADMIN_PKID,jdbcType=NUMERIC}
WHEN NOT MATCHED THEN
INSERT (STAFF_ID,STAFF_NAME,PHONE,GENDER,ADMIN_PKID) VALUES(#{ID,jdbcType=NUMERIC},#{NAME,jdbcType=VARCHAR},#{PHONE,jdbcType=VARCHAR} ,#{GENDER,jdbcType=VARCHAR},#{ADMIN_PKID,jdbcType=VARCHAR});
end
}
使用 mybatis和oracle 数据库出现的问题的更多相关文章
- 使用mybatis向oracle数据库插入数据异常
遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...
- MyBatis面对Oracle数据库如何实现主键列自增长
因为Oracle数据库而言 不能够像SqlServer和MySql一样主键自增 而且MyBatis也没有提供直接的主键自增方法 所以我们自己使用查询语句来实现自增 实现代码: <insert i ...
- Mybatis在oracle数据库中插入数据后返回自增值ID
1.将id设置成自增序列 CREATE OR REPLACE TRIGGER "DATALIB"."TRIG_USER_ADD" BEFORE INSERT O ...
- Mybatis对oracle数据库进行foreach批量插入操作
MySQL支持的语法 INSERT INTO `tableX` ( `a`, `b`, `c`, `d`, `e` ) VALUES <foreach collection ="lis ...
- SSMybatis整合 --详细解读Mybatis对oracle数据库进行增删改查(一)
Mybatis是现在主流的持久化层框架,与Hibernate不同的是,它鼓励程序员使用原声SQL语句对数据库进行操作.因此提供了非常灵活的功能.特别是当数据库同时访问数过多,需要进行优化时,使用sql ...
- spring boot 集成mybatis连接oracle数据库
1. POM文件添加依赖 <!-- Mybatis --> <dependency> <groupId>org.mybatis.spring.boot</gr ...
- Mybatis操作oracle数据库的一些坑
oracle区分大小写,如果不想区分,必须要用引号包住 使用mybatis的generator生成的时候,建议使用全大写表,中间用下划线隔开,会生成驼峰字段 oracle没有空字符串的概念 写myba ...
- springboot集成druid+mybatis连接oracle数据库
2.1.配置 druid 数据源 2. 随后要进行druid 的数据源的配置,如果要想使用druid 的数据源,那么首先一定要去修改 pom.xml 配置文件,引入以下包: oracle官网下载 oj ...
- MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis 的foreach标签进行循环插入,可是搬照Mysql的批量插入会产生 异常 ### ...
随机推荐
- 微信公众号开发java框架:wx4j(KefuUtils篇)
wx4j-KefuUtils介绍 函数说明:添加客服 参数:Kefu对象 返回值:微信服务器响应的json字符串 public String addKefu(Kefu kefu) 函数说明: 参数:K ...
- java正则表达式 3 -- 查找
用正则表达式执行查找命令,则需要用正则对象,其规则和执行顺序如下: 指定为字符串的正则表达式必须首先被便以为此类的实例.然后,可将得到的正则对象匹配任意的字符串用于创建Mather对象,执行匹配所涉及 ...
- C# 测试代码的运行时间
使用以下方法可以准确的记录代码运行的耗时. System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); / ...
- Activiti工作流(三)——流程变量
流程变量可以是流程中一系列参数,比如办理人(Assignee),消息(message)等.这些流程变量使得activiti能够应用于更为复杂的业务中,使得流程变得更加灵活可控. 场景(一) 图一:没有 ...
- 转:maven常用命令介绍
mvn 3.0.4 创建maven项目命令 mvn archetype:generate -DgroupId=damocles-autocredit -DartifactId=damocles ...
- 深入了解一下Redis的内存模型!
一.前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字 ...
- 接到新数据库时,分析业务常用的SQL语句
USE DataBaseName--清空当前GridView显示,释放内存: SELECT GETDATE() --数据库关系图 SELECT * FROM sysdiagrams --列出所有表 S ...
- 免费的dns服务器(更换dns服务器有时可以解决某些网站(如爱奇艺访问不了的问题))
首先百度提供的dns就是非常好用的dns,小编就把百度的dns作为首选180.76.76.76. 其次是阿里提供的dns223.5.5.5,响应速度非常的快,而且没有广告劫持. 再就是最通用的 ...
- 深入理解Java虚拟机—内存管理机制
前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...
- HDU 1556 线段树/树状数组/区间更新姿势 三种方法处理
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...