一、mybatis映射文件调用Oracle存储过程问题
如果结果集是放在一个游标里,dao层在传参数时要多一个游标的值,其值为返回的结果集的类型,比如:
public Parameters<String,Object> getData(ParaBean paraBean){
Map<String,Object> paraMap = new HashMap<String,Object>();
paraMap.put("para1",paraBean.getPara1);
paraMap.put("para2",paraBean.getPara2);
paraMap.put("cur_out",new ArrayList<ParaBean>());
getSqlSession().selectList(sqlmapNamespace+".getData",paraMap);
return paraMap.get("cur_out");
}
而mapper.xml文件中:
...
<mapper namespace="该mapper文件的路径">
<resultMap id="getResult" type="ParaBean的包名">
<result property="ParaBean中的属性名" colume="查询结果的字段名"/>
....
</resultMap>
<select id="getData" parameterType="map" statementType="CALLABLE">
<![CDATA[
{CALL 存储过程名(
#{para1,jdbcType=VARCHAR,javaType=String,mod=IN},
#{para2,jdbcType=VARCHAR,javaType=String,mod=IN},
#{cur_out,jdbcType=CURSOR,resultMap="该mapper文件的路径+getResult",mod=OUT}
)}
]]>
</select>
</mapper>
注意:这时select语句的返回类型应该用属性:statementType="CALLABLE",而不是resultMap=“getResult”
二、Mybatis获取insert方法插入记录的自增长ID
在Mybatis Mapper文件中添加属性“useGeneratedKeys=true”和“keyProperty=id”,其中keyProperty是Java对象的属性名,而不是数据表的字段名。然后就可以通过新增对象的get方法得到id的值。
三、Mybatis中javaType和jdbcType对应关系问题
mybatis的映射数据库里数据类型为bigint对应java中的long
所有的对应关系:
JDBC Type | Java Type |
CHAR | String |
VARCHAR | String |
LONGVARCHAR | String |
NUMERIC | java.math.BigDecimal |
DECIMAL | java.math.BigDecimal |
BIT | boolean |
BOOLEAN | boolean |
TINYINT | byte |
SMALLINT | short |
INTEGER | int |
BIGINT | long |
REAL | float |
FLOAT | double |
DOUBLE | double |
BINARY | byte[] |
VARBINARY | byte[] |
LONGVARBINARY | byte[] |
DATE | java.sql.Date |
TIME | java.sql.Time |
TIMESTAMP | java.sql.Timestamp |
CLOB | Clob |
BLOB | Blob |
ARRAY | Array |
DISTINCT | mapping of underlying type |
STRUCT | Struct |
REF | Ref |
DATALINK | java.net.URL[color=red][/color] |
四、传参数时#{}和${}的区别