在Mybatis中,在查询结果集中,单个对象的封装已经远远不能满足业务的要求,于是,可以使用ResultMap:
如果在ResultMap中未使用到<association />标签,就是子对象结果映射,你可以不必将一级对象的属性一一映射,也可以完成结果集的自动填充!
当然,如果在ResultMap中使用到<association />标签,那每个实体字段和表字段必须对应,否则值为空或默认值!
<!-- 映射ActivityResultMap -->
<resultMap type="Activity" id="ActivityresultMap">
<result property="id" column="id"/>
<result property="bid" column="bid"/>
<result property="cid" column="cid"/>
<result property="activity_name" column="activity_name"/>
<result property="award_rate" column="award_rate"/>
<result property="activity_desc" column="activity_desc"/>
<result property="activity_list_img" column="activity_list_img"/>
<result property="activity_detail_img" column="activity_detail_img"/>
<result property="start_time" column="start_time"/>
<result property="end_time" column="end_time"/>
<result property="activity_type" column="activity_type"/>
<result property="activity_state" column="activity_state"/>
<result property="activity_url" column="activity_url"/>
<result property="activity_rule" column="activity_rule"/>
<result property="name" column="name"/>
<result property="award_time_astrict" column="award_time_astrict"/>
<result property="award_start_time" column="award_start_time"/>
<result property="award_end_time" column="award_end_time"/>
<result property="personal_img" column="personal_img"/>
<result property="theme_img" column="theme_img"/>
<result property="count_join" column="count_join"/>
<result property="serial_num_count" column="serial_num_count"/>
<result property="usable_count" column="usable_count"/>
<association property="bankInfo" javaType="BankInfo">
<result property="bank_name" column="bank_name"/>
</association>
<association property="card" javaType="CreditCard">
<result property="card_name" column="card_name"/>
</association>
<association property="activitype" javaType="ActivityType">
<result property="type_name" column="type_name"/>
</association>
</resultMap>
在插入数据时,可以使用<selectKey />标签将产生的自增ID返回出来,当然,ID将自动封装到对象的ID字段中,而并非你方法的返回类型 int 中(当时就被这个坑了很久):
在其中MySQL是这样子的,它的Order属性为After,表示先执行插入语句,然后在获得ID值:
<insert id="saveActivity" parameterType="Activity" keyProperty="id" keyColumn="id">
insert into kk_activity(bid,cid,activity_name,award_rate,activity_desc,activity_list_img,activity_detail_img,start_time,end_time,activity_type,activity_state,activity_url,activity_rule,name,award_time_astrict,award_start_time,award_end_time,personal_img,theme_img,count_join)
values(#{bid},#{cid},#{activity_name},#{award_rate},#{activity_desc},#{activity_list_img},#{activity_detail_img},#{start_time},#{end_time},#{activity_type},#{activity_state},#{activity_url},#{activity_rule},#{name},#{award_time_astrict},#{award_start_time},#{award_end_time},#{personal_img},#{theme_img},#{count_join})
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
</insert>
而在 Oracle 中,因为ID自增有sequance (序列)产生,则需这样:order="BEFORE",先获得ID值,然后进行插入:
在Mappler.java 的抽象方法中,如果有多个参数,你可以使用@Param()注解:
public List<Activity> getActivityByPage(@Param(value="page")UIPage page, @Param(value="activity")Activity activity);
在Mapper.xml中,你可以使用ONGL表达式,也可以使用EL表达式,是不是很方便呢!
如果你想有程序来组装你想要的SQL,然后由Mybatis执行,你大可这样做:
接口方法:
public HashMap<String, Object> getOrderCardInfoBySQL(@Param(value="excusql")String excusql);
在Mapper.xml 文件映射:
<select id="getOrderCardInfoBySQL" resultType="map">
${excusql}
</select>
是不是很简单呢,如果有不懂,可以去参考Mybatis文档,也可以给我留言哦..
Mybatis 配置常见情况(入门总结篇),布布扣,bubuko.com
原文:http://blog.csdn.net/oydaybreak/article/details/22783267