使用 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
    }	

  

原文地址:https://www.cnblogs.com/hong2016/p/7280730.html