您的位置:首页 > 其它

mybatis常见问题

2016-01-09 02:39 281 查看

parameterType与parameterMap有什么区别?
resultType与resultMap有什么区别?

resultType:可以把结果自动映射到相应的JAVA类中,但无法指定输出字段的类型,会对性能产生轻微的影响。

resultMap:可以预先定义resultMap元素,可以控制数据如何从结果集中取出,以及哪个属性匹配哪个字段。

parameterType属性值是JAVA类的全限定名,目的是限制输入参数的类型为指定的JAVA类,如果不指定,任何带有合适属性(get/set方法)的JAVA BEAN都可以作为输入参数。

parameterMap:预先定义parameterMap的属性值,用于有次序的参数匹配JDBC符号。

<resultMap type="com.csii.ibs.common.ECif" id="loadCifInfoResult">
<result property="id" column="CIFNO" />
<result property="cifSeq" column="CIFSEQ" />
<result property="name" column="CIFNAME" />
<result property="status" column="CIFSTATE" />
<result property="bankSeq" column="BANKSEQ" />
</resultMap>

<select id="loadCifInfo"  resultMap="loadCifInfoResult" parameterType="java.util.HashMap">
select
a.CIFNO,
a.CIFSEQ,
a.CIFSTATE,
a.BANKSEQ,
a.BRANCHSEQ,
from EBANKCIF a
</select>

<resultMap type="java.util.HashMap" id="loadUserInfoResult">
<result property="CifSeq" column="CIFSEQ" />
<result property="UserSeq" column="USERSEQ" />
<result property="UserId" column="USERID" />
</resultMap>
<select id="loadUserInfo"  resultMap="loadUserInfoResult" parameterType="java.util.HashMap">
select  a.CIFSEQ,
a.USERSEQ,
a.USERID
from EUSER a
</select>


自增主键:

<insert id="insert" parameterType="riskmCatalogDO" >
INSERT INTO riskm_catalog( id, title)  VALUES ( #id#, #title#)
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
<!--oracle-->
SELECT key_sequence.nextval() from dual
<!--mysql-->
SELECT last_insert_id() from dual
</selectKey>
</insert>


#和$区别:

1.   $中间的变量就是直接替换成值的,#会根据变量的类型来进行替换
       比如articleTitle的类型是string, 值是"标题"的时候
       $articleTitle$ = 标题
       #articleTitle# = '标题'
2.  $ 的作用实际上是字符串拼接 #用于变量替换
3.  对于一条简单的sql语句,例如:Select * from user where id=#id#,
    Ibatis会把sql预编译为select * from user where id=?
    $符号会把参数原样嵌入sql语句中而不进行预编译,这就使得有可能出现sql注入攻击。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: