项目总结(后端)

1.多对一的查询

	对于处理一方是通过使用   **association**   来处理关系的
  <select id="queryData" parameterType="PermissionQuery" resultMap="permissionMap">
        select
        p.id,
        p.name,
        p.sn,
        mn.id mid,
        mn.sn msn,
        mn.name mname,
        mn.icon,
        mn.url,
        mn.parent_id,
        mn.intro
        from permission p left join menu mn on p.menu_id=mn.id
        <where>
            <if test="name!=null and name!=''">
                and p.name like concat('%',#{name},'%')
            </if>
        </where>
        LIMIT #{start},#{pageSize}
    </select>
  <resultMap id="permissionMap" type="Permission">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <result column="sn" property="sn"></result>
        <!--处理一方-->
        <association property="mn" javaType="Menu">
            <id column="mid" property="id"></id>
            <result column="msn" property="sn"></result>
            <result column="mname" property="name"></result>
            <result column="icon" property="icon"></result>
            <result column="url" property="url"></result>
            <result column="parent_id" property="parent_id"></result>
            <result column="intro" property="intro"></result>
        </association>
    </resultMap>

2.多对一的添加

下面的permission是多,menu是一,添加一的属性直接 .字段名

 <insert id="save" parameterType="Permission">
        insert into permission(name,sn,menu_id) values(#{name},#{sn},#{mn.id})
    </insert>

3.多对一的修改

对于多对一的修改一方的数据时候和添加的时候处理方式是一样的,主要是看代码

  <!--修改-->
    <update id="update" parameterType="Permission">
        update permission set name=#{name},sn=#{sn},menu_id=#{mn.id} where id=#{id}
    </update>

4.多对多的查询

注意多对多的分页查询应该使用下面使用的这种嵌套查询的方法才行
先第一张表关联中间表

 <select id="queryData" parameterType="RoleQuery" resultMap="RoleMap">
        select
        distinct
        r.id ,
        r.name,
        r.sn
        from role r
        left join role_permission rp on r.id = rp.role_id
        <where>
            <include refid="sqlWhere"></include>
        </where>
        LIMIT #{start},#{pageSize}
    </select>

高级查询

<!--高级查询,判断是否传入来了name值-->
    <sql id="sqlWhere">
        <if test="name!=null and name!=''">
            and r.name like concat('%',#{name},'%')
        </if>
    </sql>

然后再处理关系封装

 <resultMap id="RoleMap" type="Role">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="sn" column="sn"></result>
        <collection property="permissions" ofType="Permission"  column="id" select="queryPermissionsByRoleid" >

        </collection>
    </resultMap>

然后再把第二张表关联中间表

<select id="queryPermissionsByRoleid" parameterType="long" resultMap="PermissionMap">
        select p.id pid,p.name pname, p.sn psn
        from role_permission rp
        join permission p on p.id = rp.permission_id
        where rp.role_id = #{id}
</select>

然后再处理关系封装

<resultMap id="PermissionMap" type="Permission">
        <id property="id" column="pid"></id>
        <result property="name" column="pname" ></result>
        <result property="sn"  column="psn"></result>
    </resultMap>

5.多对多的保存

先保存中间表

 <!--保存中间表方法  list-->
    <insert id="saveRolePermission" parameterType="arrayList">
        insert into role_permission(role_id,permission_id) values
        <foreach collection="list" item="item" separator=",">
            (#{item.roleId},#{item.permissionId})
        </foreach>
    </insert>

再保存自己那个表

   <!--添加-->
    <insert id="save" parameterType="Role" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into role(name,sn) values(#{name},#{sn})
    </insert>

6.多对多的删除

先删除中间表

<delete id="deleteRolePermission" parameterType="long">
        delete from role_permission where role_id=#{roleid}
    </delete>

然后再删除自己的

<!--删除-->
    <delete id="delete" parameterType="long">
        delete from role where id=#{id}
    </delete>

7.多对多的修改

先调用多对多删除的方法,再调用多对多添加的方法重新添加

8.自关联查询(多对一)

<select id="queryData" parameterType="MenuQuery" resultMap="MenuMap">
        select m.id,m.sn,m.name,m.intro,m.url,m.icon,n.id pid,n.name pname from menu m left join menu n on m.parent_id=n.id
        <where>
            <include refid="sqlWhere"></include>
        </where>
        LIMIT #{start},#{pageSize}
    </select>
    
 <!--高级查询,判断是否传入来了name值-->
    <sql id="sqlWhere">
        <if test="name!=null and name!=''">
            and m.name like concat('%',#{name},'%')
        </if>
    </sql>

处理结果集+处理一方

<resultMap id="MenuMap" type="Menu">
        <id column="id" property="id"></id>
        <result column="sn" property="sn"></result>
        <result column="name" property="name"></result>
        <result column="intro" property="intro"></result>
        <result column="url" property="url"></result>
        <result column="icon" property="icon"></result>
        <!--处理一方-->
        <association property="parent_id" javaType="Menu">
            <id column="pid" property="id"></id>
            <result column="pname" property="name"></result>
        </association>
    </resultMap>

9.多对一自关联的添加

就是普通的添加方式

 <!--添加-->
    <insert id="save" parameterType="Menu">
        insert into menu(id,sn,name,icon,url,parent_id,intro) values(#{id},#{sn},#{name},#{icon},#{url},#{parent_id.id},#{intro})
    </insert>

10.多对一自关联的修改

 <update id="update" parameterType="Menu">
        update menu set id=#{id},sn=#{sn},name=#{name},icon=#{icon},url=#{url},parent_id=#{parent_id.id},intro=#{intro} where id=#{id}
    </update>

11.多对一自关联的删除

如果不考虑其他的关联表的话,首先就得判断删除得那个是不是一的那个对象,如果是就得把一下面对应的所有多先全部删除,
比如:如果是菜单的话,多个子菜单对应一个父菜单,那么如果删除的是父菜单的话,那么就得先把父菜单下面的所有子菜单删除,再删除父菜单

<!--删除父菜单对应的子菜单-->
    <delete id="deleteChildren" parameterType="long">
        delete from menu where parent_id=#{id}
    </delete>
 <!--删除-->
    <delete id="delete" parameterType="long">
        delete from menu where id=#{id}
    </delete>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值