文章目录
一、 resultType和resultMap的区别:
- resultMap 是在
mapper.xml
文件中通过 resultMap 节点定义出来的 - returnType 是 自定义 JavaBean、使用 mybatis 内置 或 jdk 自带的类型、容器。
1.1、resultMap:将sql查询结果映射为java对象
如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置)
<!--
1、定义一个 resultMap
-->
<resultMap id="BaseResultMap" type="com.demo.model.PrpMaxNo" >
<id property="myGroupno" column="groupno" />
<id property="myTablename" column="tablename" />
<id property="myMaxno" column="maxno" />
<id property="myFlag" column="flag"/>
</resultMap>
<!--
2、使用上面的定义好的 resultMap
-->
<select id="genMaxMinNo" resultMap="BaseResultMap">
select groupno,tablename,maxno,flag from TEST where id=#{id}
</select>
1.2、resultType :指定输出结果的类型
指定输出结果的类型,比如 自定义JavaBean、java基本数据类型、使用 mybatis 内置的类型、容器。
需求注意的是 sql查询的列名 必须和 resultType指定pojo的属性名相同,否则 使用 resultMap。
1.2.1、直接自定义的 JavaBean
必须保证结果列的key和model的属性一致
public class Student{
private String groupno;
private String tablename;
private String maxno;
private String flag;
//getter/setter省略
}
<select id="genMaxMinNo" resultType="com.demo.model.Student">
select groupno,tablename,maxno,flag from TEST where id=#{id}
</select>
1.2.2、使用mybatis 内置容器,比如返回一个map、int、String
<select id="genMaxMinNo" resultType="map">
select groupno,tablename,maxno,flag from TEST where id=#{id}
</select>
注意事项:
默认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 可以不写。
————————————————————————————————————————
二、mybatis 内置容器,为什么我们能在 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);