mybatis配置文件中resultType和resultMap的区别、mybatis自带的别名

resultType和resultMap的区别:

  1. resultMap 是在 mapper.xml 文件中通过 resultMap 节点定义出来的
  2. returnType 是自定义的类 或者 jdk 自带的类、基本数据类型(int、double、String)

resultMap:将sql查询结果映射为java对象。
如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置)

resultType :指定输出结果的类型(pojo、java基本数据类型、hashmap..),将sql查询结果映射为java对象 。
使用resultType注意:sql查询的列名要和resultType指定pojo的属性名相同,指定相同 属性方可映射成功,如果sql查询的列名要和resultType指定pojo的属性名全部不相同,List中无法创建pojo对象的。

定义一个 resultMap:

<resultMap id="BaseResultMap" type="com.reins.model.PrpMaxNo" >
    <id column="GROUPNO" property="groupno" jdbcType="VARCHAR" />
    <id column="TABLENAME" property="tablename" jdbcType="VARCHAR" />
    <id column="MAXNO" property="maxno" jdbcType="VARCHAR" />
    <id column="FLAG" property="flag" jdbcType="VARCHAR" />
</resultMap>

1、直接使用上面的定义好的 resultMap 的id

例如:

<select id="genMaxMinNo" resultMap="BaseResultMap">
  select GROUPNO,TABLENAME,MAXNO,FLAG from TEST where id=#{id}
</select>

2、如果没有定义resultMap 时,直接返回 pojo

必须保证结果列的key和model的属性一致

<select id="genMaxMinNo" resultType="com.reins.model.PrpMaxNo">
  select GROUPNO,TABLENAME,MAXNO,FLAG from TEST where id=#{id}
</select>

3、没有定义resultMap 时,也可以使用mybatis的默认机制,返回一个map

<select id="genMaxMinNo" resultType="map">
  select GROUPNO,TABLENAME,MAXNO,FLAG from TEST where id=#{id}
</select>

注意事项:

  • 可以将返回值强转成HashMap,
  • 默认key是大写的可以通过起别名使得key变成小写,(别名可不加引号,as用不用必须写,自己去测验吧)
<select id="genMaxMinNo" resultType="map">
  select GROUPNO as "groupNo", TABLENAME as "tableName", MAXNO as "maxNo", FLAG as "flag" 
  from TEST where id=#{id}
</select>

以上就是我们常用的三种方式。

——————————————————————————————————————————

mybatis配置文件偷懒的几个点:

  • 如果参数只有一个且是简单类型可以不写prameterType

  • 如果返回值是简单类型resultType 或者 resultMap可以不写

————————————————————————————————————————

为什么我们能在 mapper.xml 中使用简写int,string等等??

是因为 mybatis 默认在 org.apache.ibatis.type.TypeAliasRegistry 中为我们定义了类的别名:

registerAlias("string", String.class);
registerAlias("byte", Byte.class);
registerAlias("long", Long.class);
registerAlias("short", Short.class);
registerAlias("int", Integer.class);
registerAlias("integer", Integer.class);
registerAlias("double", Double.class);
registerAlias("float", Float.class);
registerAlias("boolean", Boolean.class);
registerAlias("byte[]", Byte[].class);
registerAlias("long[]", Long[].class);
registerAlias("short[]", Short[].class);
registerAlias("int[]", Integer[].class);
registerAlias("integer[]", Integer[].class);
registerAlias("double[]", Double[].class);
registerAlias("float[]", Float[].class);
registerAlias("boolean[]", Boolean[].class);
registerAlias("_byte", byte.class);
registerAlias("_long", long.class);
registerAlias("_short", short.class);
registerAlias("_int", int.class);
registerAlias("_integer", int.class);
registerAlias("_double", double.class);
registerAlias("_float", float.class);
registerAlias("_boolean", boolean.class);
registerAlias("_byte[]", byte[].class);
registerAlias("_long[]", long[].class);
registerAlias("_short[]", short[].class);
registerAlias("_int[]", int[].class);
registerAlias("_integer[]", int[].class);
registerAlias("_double[]", double[].class);
registerAlias("_float[]", float[].class);
registerAlias("_boolean[]", boolean[].class);
registerAlias("date", Date.class);
registerAlias("decimal", BigDecimal.class);
registerAlias("bigdecimal", BigDecimal.class);
registerAlias("biginteger", BigInteger.class);
registerAlias("object", Object.class);
registerAlias("date[]", Date[].class);
registerAlias("decimal[]", BigDecimal[].class);
registerAlias("bigdecimal[]", BigDecimal[].class);
registerAlias("biginteger[]", BigInteger[].class);
registerAlias("object[]", Object[].class);
registerAlias("map", Map.class);
registerAlias("hashmap", HashMap.class);
registerAlias("list", List.class);
registerAlias("arraylist", ArrayList.class);
registerAlias("collection", Collection.class);
registerAlias("iterator", Iterator.class);
registerAlias("ResultSet", ResultSet.class);

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/81056560