Mybatis 的连带操作(注解方式)

一、简述

两张表关联,一张表插入一条新数据,另外一张表也跟着插入一条新数据。关键就是关联表获取到前者新增数据的主键值。

二、如何获取自动生成的(主)键值?

insert 方法总是返回一个 int 值该值表示的是插入的行数。而自动生成的键值在 insert 方法执行完后可以被设置到传入的参数对象中。
示例:

 <insert id="insertName" usegeneratedkeys="true" keyproperty="id"> 
     insert into names (name) values (#{name}) 
 </insert>

关键在于:useGeneratedKeys="true" keyProperty="id"

Name name = new Name(); 
name.setName(“fred”); 
int rows = mapper.insertName(name); 
//完成后,id已经被设置到对象中 
system.out.println("rows inserted = " + rows); 
system.out.println("generated key value = " + name.getId());

三、以角色权限模块中增加功能为例

  1. 概念

连带操作:首先在 Role 表中插入一条数据,拿到 rid,接着往 Role-Acl 表中插入一条数据。

  1. 数据库设计

Role 表 Role表

Role-Acl 表
Role-Acl表

  1. 代码实现

RoleMap

/**
 * 新增角色
 */
@Insert("insert into sys_role(rolename,creator,createtime,remark) VALUES(#{rolename},1,NOW(),#{remark})")
@Options(useGeneratedKeys = true, keyProperty = "rid",keyColumn="rid")
int addRole(SysRole sysRole);

RoleAclMap

 /**
 * 插入到角色权限表
 */
@Insert("INSERT into sys_role_acl(rid,aid) VALUES(#{rid},#{aid})")
int addRoleAcl(SysRoleAcl sysRoleAcl);

RoleService

public Map addRole(SysRole sysRole, String[] aids) {
    int addRole = m_RoleMap.addRole(sysRole);
    Integer rid = sysRole.getRid();
    // SysRoleAcl
    SysRoleAcl sysRoleAcl = new SysRoleAcl();
    sysRoleAcl.setAid(Arrays.toString(aids));
    sysRoleAcl.setRid(rid);
    m_RoleAclMap.addRoleAcl(sysRoleAcl);
    // 调用IRoleAclMap方法
    Map tResultMap = new HashMap();
    tResultMap.put("status", "fail");
    if (addRole <= 0) {
        tResultMap.put("Msg", "添加失败");
        return tResultMap;
    }
    tResultMap.put("status", "success");
    return tResultMap;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值