resulttype与map区别 请说下ibatis中resultClass与resultMap的区别

ibatis天天用,resultClass与resultMap的区别真还不清楚

为了工作中用ibatis更加高效,常见标签还是要搞懂的,特别是经常用的那几个标签

区别1

resultClass属于隐式映射,你指定了resultclass="具体某个类",但是select语句得到的结果是一条实体记录,但如果数据库字段与 resultclass="具体某个类"的类属性名字不一致,就会出现映射错误,所以一般SQL的select 表字段 as 属性名字段(这样保证SQL返回字段一定resultClass定义的类属性名称一样)

resultMap是显示定义映射,数据库字段名称和类属性名称自己定义好,定义出错肯定出错。

resulttype与map区别 请说下ibatis中resultClass与resultMap的区别(1)

  • resultMap的pojo类与表字段是完全一 一对应的时候,我们用的很爽。

如果下面StudentClass与数据库表Student是一样的

resulttype与map区别 请说下ibatis中resultClass与resultMap的区别(2)

  • 但查询的列超出了单表的时候,就需要重新创建一个pojo类来和select返回结果来映射了

如下多了一个班级表的班级名称,这是就麻烦点需要创建一个新的pojo类

resulttype与map区别 请说下ibatis中resultClass与resultMap的区别(3)

区别2

性能方法,resultMap高于resultClass,建议多用resultMap

resulttype与map区别 请说下ibatis中resultClass与resultMap的区别(4)

性能高,我的理解是因为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 可以完成两个不同的对象的之间关系耦合

resulttype与map区别 请说下ibatis中resultClass与resultMap的区别(5)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页