resulttype与map区别 请说下ibatis中resultClass与resultMap的区别
为了工作中用ibatis更加高效,常见标签还是要搞懂的,特别是经常用的那几个标签
区别1resultClass属于隐式映射,你指定了resultclass="具体某个类",但是select语句得到的结果是一条实体记录,但如果数据库字段与 resultclass="具体某个类"的类属性名字不一致,就会出现映射错误,所以一般SQL的select 表字段 as 属性名字段(这样保证SQL返回字段一定resultClass定义的类属性名称一样)
resultMap是显示定义映射,数据库字段名称和类属性名称自己定义好,定义出错肯定出错。
- resultMap的pojo类与表字段是完全一 一对应的时候,我们用的很爽。
如果下面StudentClass与数据库表Student是一样的
- 但查询的列超出了单表的时候,就需要重新创建一个pojo类来和select返回结果来映射了
如下多了一个班级表的班级名称,这是就麻烦点需要创建一个新的pojo类
区别2
性能方法,resultMap高于resultClass,建议多用resultMap
性能高,我的理解是因为resultClass也需要框架映射成Map来给pojo类属性赋值,而resultMap本身就是Map类型的。
ibatis中#和$符号区别这个面试的时候也经常问
- #: 会进行预编译进行类型匹配,可以防SQL注入
- $: 单纯的参数替换,不进行数据类型匹配
例子 变量name的类型是String,当值“程序汪汪”的时候
$name$=程序汪汪
#name#='程序汪汪'
那么使用$就会异常,正常可以修改成 '$name$'
#和$的使用场景#不用多说了,实际开发中使用最频繁的
$用的少,如当传入表名的时候,就需要$talbeName$
parameterClass="java.util.HashMap"讲了resultClass,肯定要说下parameterClass
parameterClass=“实体对象”另外就是java.util.HashMap
下面是最常见的
<insert parameterClass="java.util.HashMap">
INSERT INTO author (auth_name,auth_age,auth_tel,auth_address) VALUES (#name#,#age#,#telephone#,#address#)
</insert>
非常方便
HashMap paramMap = new HashMap();
paramMap.put("name", "程序汪汪");
paramMap.put("age",new Integer(31));
paramMap.put("address","香港");
paramMap.put("telephone","025-987654321");
sqlMapClient.insert("insertAuthor3", paramMap);
使用HashMap 可以完成两个不同的对象的之间关系耦合
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com