标签:
首先,我们写多对多,这个多对多虽然用的没有一对多的多,但是用处也不少
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>
添加多表的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);
就可以了,
回显比较麻烦,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为主
标签:
原文地址:http://www.cnblogs.com/songpinyue/p/4921544.html