现在的位置: 首页 > 综合 > 正文

Mybatis 配置常见情况(入门总结篇)

2018年02月23日 ⁄ 综合 ⁄ 共 3248字 ⁄ 字号 评论关闭
  在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文档,也可以给我留言哦..

抱歉!评论已关闭.