ibatis中常见的sql写法和注意事项

全文概要

本文主要着手于Apache推出的一种轻量级对象关系映射(ORM)框架--ibatis,介绍一些常见的sql配置写法和注意事项,欢迎补充!本文主要内容如下:

  • insert操作返回主键
  • 处理clob大数据类型
  • 调用procedure
  • 调用function
  • 传参为List
  • 返回结果为List

insert操作返回主键

ibatis中有针对插入数据返回主键的配置,在实际开发中是很常见的,配置写法如下:


	
		SELECT RAWTOHEX(HEXTORAW(SYS_GUID()))  AS  OfferId FROM DUAL
	
	INSERT INTO xxx_TABLE
	(
	ID,
	xxx,
	xxx)
	VALUES
	(
	#OfferId#,
	#xxx_value#,
	#xxx_value#
	)
  • 在java代码中调用该sql的写法
return this.getSqlMapClientTemplate().insert("savePolicyData",XXXDTO);//返回Object类型,需强转

处理CLOB类型

在sql查询中,有时会遇到clob类型的数据,针对clob类型的处理,下面通过oracle来引入:






	
	
	
  • sql说明
  1. 在oracle中wm_concat()这个函数,返回的就是clob类型的数据,针对这个函数的用法,各位筒子可以自行百度;
  2. 可以使用to_char()函数将clob类型转换成varchar类型,但是有一个问题是,若该函数返回值超过了varchar的最大长度时,就会出现异常;
    
    	
    	
    	
    
    
    
    	
    
  3. 上面这种写法是解决clob类型比较稳妥的方法,自定义map中colum是sql查询结果,property是对应DTO的成员变量,jdbcType是映射的类型。
  • 在java代码中的调用写法
List this.getSqlMapClientTemplate().queryForList("queryReqPara",xxx_value);

调用存储过程/函数

在ibatis中调用procedure和function,配置如下:

  • 调用procedure

	
	



	{call XXX_procedure(?,?)}
  • 在java中调用存储过程
Map resultMap = new HashMap();
this.getSqlMapClientTemplate().queryForObject("dealData",resultMap);
String  resultCode =  resultMap.get("RESULTCODE");
String resultMessage  = resultMap.get("RESULTMESSAGE");
  • 调用function

	
	
	



	
  • 在java代码中调用function
String result = this.getSqlMapClientTemplate().queryForObject("dealData",resultMap);

传参为List/返回结果为List

在ibatis中参数支持List和数组,本例中用List来介绍,如何处理list类型的参数:

  • ibatis配置写法




  • 说明
  1. 查询结果为List,但resultClass不要写List,应该写List集合中数据的类型,常见返回String,Map,DTO,因为ibatis的queryForList()方法会自动将结果放进List中去;
  2. 比较入参map和list,发现map中多了个property属性,list中是不需要这个属性的,原因就是ibatis底层会根据property去判断,若加了就会在参数中查询对应名称的参数对象,list是一个对象没有属性就会抛出异常。
Cause: com.ibatis.common.beans.ProbeException: Error getting ordinal list from JavaBean. 
Cause java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
  • java代码写法
//参数为List写法
List  resutList = this.getSqlMapClientTemplate().queryForList("getThirdDeptNo",deptNolist);//deptNolist为List

//参数为List>写法
List  resutList = this.getSqlMapClientTemplate().queryForList("getThirdDeptNo",deptNolist);//deptNolist为List

你可能感兴趣的:(ibatis,ibatis,insert返回主键,处理clob类型数据,参数为list,调用存储过程/函数)