mybatis多对多关联,向关联表插入数据方法:
先向主表插入数据后,根据当前插入数据的ID,来向中间表插入数据
主要sql:
<!-- 添加角色数据-->
<insert id="addRole" parameterType="sysRoleVO"
useGeneratedKeys="true" keyProperty="srId">
insert into
sys_role(sr_name,sr_stats,sr_describe,um_id,sr_create_time,sr_type)
values(#{srName},0,#{srDescribe},#{umId},#{srCreateTime},#{srType})
</insert>
<!-- 添加角色和权限中间表数据采用下面的方式插入数据效率比较高;-->
<insert id="addRoleFunction" parameterType="sysRoleVO">
insert into sys_role_function
(
select sr.sr_id,sf.sf_id,sf.sf_type
from
sys_role sr,sys_function sf
where
sr.sr_id = #{srId}
and sf.sf_id IN
<foreach collection="rflst" item="vi" open="(" separator="," close=")">
#{vi}
</foreach>
)
</insert>
实体类:
public class SysRoleVO extends BaseVO implements Serializable{
private static final long serialVersionUID = -9057984582072265699L;
private String srId;//角色ID
private String srName;//角色名称
private String srCreateTime;//添加时间
private List<String> rflst ;
业务层调用:
String roleFunction = instance.getRolefunction();
String[] roleFunctionList = roleFunction.split(",");
List<String> list = Arrays.asList(roleFunctionList);
instance.setRflst(list);
sysRoleService.addRole(instance);//先添加角色
sysRoleService.addRoleFunction(instance);//添加中间表数据,这个时候instance中已经有主键ID信息,list来存储权限集合ID
注意在执行完第一条sql后,在外部访问对象sysRoleVO的主键是已经存在的,类似hibernate持久化后对象已经拥有ID信息
先向主表插入数据后,根据当前插入数据的ID,来向中间表插入数据
主要sql:
<!-- 添加角色数据-->
<insert id="addRole" parameterType="sysRoleVO"
useGeneratedKeys="true" keyProperty="srId">
insert into
sys_role(sr_name,sr_stats,sr_describe,um_id,sr_create_time,sr_type)
values(#{srName},0,#{srDescribe},#{umId},#{srCreateTime},#{srType})
</insert>
<!-- 添加角色和权限中间表数据采用下面的方式插入数据效率比较高;-->
<insert id="addRoleFunction" parameterType="sysRoleVO">
insert into sys_role_function
(
select sr.sr_id,sf.sf_id,sf.sf_type
from
sys_role sr,sys_function sf
where
sr.sr_id = #{srId}
and sf.sf_id IN
<foreach collection="rflst" item="vi" open="(" separator="," close=")">
#{vi}
</foreach>
)
</insert>
实体类:
public class SysRoleVO extends BaseVO implements Serializable{
private static final long serialVersionUID = -9057984582072265699L;
private String srId;//角色ID
private String srName;//角色名称
private String srCreateTime;//添加时间
private List<String> rflst ;
业务层调用:
String roleFunction = instance.getRolefunction();
String[] roleFunctionList = roleFunction.split(",");
List<String> list = Arrays.asList(roleFunctionList);
instance.setRflst(list);
sysRoleService.addRole(instance);//先添加角色
sysRoleService.addRoleFunction(instance);//添加中间表数据,这个时候instance中已经有主键ID信息,list来存储权限集合ID
注意在执行完第一条sql后,在外部访问对象sysRoleVO的主键是已经存在的,类似hibernate持久化后对象已经拥有ID信息