一 resultType
如果返回的只是对象,而不是对象的list
<sql id = "Base_Column">
p.id,
p.name,
p.age,
p.gender ,
</sql>
<select id="" resultType="类路径" parameterType="xxx">
select <include refid="Base_Column">
from t_people as p
where id = #{id}
</select>
注解:这条sql语句。等价于
select
p.id,
p.name,
p.age,
p.gender ,
p.has_girl_friend as hasGirlFriend,
from t_people as p
where id = #{id}
注意:
1 <include .....>中的sql放在select语句中是一个完整的sql(当然你也可以直接将查询的字段放在 select 中),博主的意思是,如果你表用了别名,<include .../>不要忘记字段前面加上 "别名.",不然报错啦。
2 <include .../>最后一个字段别多加 "," ,博主以前总是被坑(细心)
二 resultMap
如果返回的是一个实体类的list,就要用resultMap
<resultMap id="BaseMap" type="com.People">
<result column="id" property="id"/>
<result column="name" property="name">
<result column="has_girl_friend" property="hasGirlFriend">
</resultMap>
<select id="" parameterType="" resultMap="BaseMap">
select <include refid="">
from t_people
</select>
注意:
1 resultMap中的column 一定要和表字段一样,property 要和实体类的属性一样,<include ..../里面的字段也要和实体类的属性名一样。。
2 不过是通过sql计算得到的还是直接查询的字段,实体类中一样要有,因为他要将查到的数据映射到实体类中的字段,不然控制台就会报错,初学者刚开始一定要弄清楚!
三 总结
1 实际开发中,很多错是因为 没有和实体类字段对上,一定要和实体类属性对上!
2 很多时候,代码里抛出NullPointException,有时候就是返回的对象或者list中,某些字段为null,可以dubbg调试。这种情况,就要好好查查你的sql了,字段对应实体类的字段。
3 如果你as了一个实体类中不存在的属性,也会报错。
总之,按照总结1 来,细心。
由于水平有限,排版不熟练,请多多指教!