多对多的添加修改,显示,的逻辑步骤

首先,我们写多对多,这个多对多虽然用的没有一对多的多,但是用处也不少

 

SQL的显示,我们主要的不是关于表结构,而是看SQL怎么谢,需要用到那些函数,和这些应该怎么联系起来

    select a.*,b.fname from (
    select a.*,b.aname from
    (select a.*,b.name tname from t_order a left join t_time b
    on a.time_id = b.id) a left join t_address b
    on a.address_id = b.aid limit #{index},#{limit} ) a left join
    (select order_id,group_concat(f.name) fname from t_order_foot a left join
    t_foot f
    on a.foot_id = f.id group by order_id) b
    on a.id = b.order_id

下面我们来看添加,其实添加的话,一般都会直接添加单表或一对多的,但是多对多的基本上用于多选框中,所以,这个就有步骤了,

添加的SQL(标红重点)

  <insert id="saveOrder" useGeneratedKeys="true" keyProperty="id" parameterType="com.baidu.foot.entity.Order" >
    insert into t_order (id, name, tel, 
      datea, time_id, address_id
      )
    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{tel,jdbcType=VARCHAR}, 
      sysdate(), #{timeId,jdbcType=INTEGER}, #{addressId,jdbcType=INTEGER}
      )
  </insert>

 添加的话只有把这两个属性放入才可以,因为你是以这张表为主表,你需要取到他们关联的ID

添加多表的SQL

<!-- 添加多表 -->
  <insert id="saveT_O_F" parameterType="list">
      insert into t_order_foot(order_id,foot_id) values
          <foreach collection="list" item="item" separator=",">
              (#{item.orderId},#{item.footId})
          </foreach>
  </insert>

在逻辑层中,只需要给他传一个选取的多选的Id进行遍历循环放入list即可

//添加多表
        String[] split = ids.split(",");
        List list = new ArrayList();
        for (String str : split) {
            T_O_F tOF = new T_O_F(Integer.parseInt(str), order.getId());
            list.add(tOF);
        }
        orderMapper.saveT_O_F(list);

就可以了,

删除,就比较简单了,你主表是通过Id进行删除的,那么多表就通过主表关联的外键的Id进行删除就可以了,参数也是相同的

回显

回显比较麻烦,SQL也要比较注意的,不多说,直接代码

    select a.*,b.footids from
    (select * from t_order where id = #{id}) a left join
    (select order_id,group_concat(cast(foot_id as char)) footids from t_order_foot
    GROUP by order_id ) b
    on a.id = b.order_id 

多表把不是主表的关联Id给弄成一个char型,效果是这样的

在主表实体类中重新定义一个这样的字段
在前台这样回显
$(document).ready(function(){
                var aa = "${order.footids}".split(",")
                  for (  i = 0; i < aa.length; i++) {
                    $('#'+aa[i]).attr('checked',true);
                }            
        })

就可以了,

修改

修改的其实没有什么逻辑性的,其实就是删除的多表和添加的多表进行结合就行了,

一般就是,先定义一个主表单表的修改方法,然后调用删除多表的方法,在调用添加多表的就可以了,参数都一样,以主表的Id为主

posted @ 2015-10-29 19:04  小心火烛  阅读(860)  评论(0编辑  收藏  举报