mybatis多对多关联,向关联表插入数据方法

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信息
使用MyBatis Plus进行多关联查询,可以借助MyBatis Plus的Wrapper对象来构建查询条件。下面是一个示例,假设有两张:user和order,user中有id和name字段,order中有id、user_id和order_no字段。 ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> getUsersAndOrders() { QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.select("user.id", "user.name", "order.order_no") .eq("user.id", "order.user_id") .orderByDesc("user.id"); return userMapper.getUsersAndOrders(wrapper); } } ``` 在上述示例中,我们通过QueryWrapper对象构建了一个查询条件。通过select方法指定了需要查询的字段,可以使用别名来区分不同的。eq方法用于指定关联条件,这里我们使用了user.id与order.user_id进行关联。orderByDesc方法用于指定结果按照user.id进行降序排序。 接下来,我们需要在Mapper中编写对应的SQL语句。假设UserMapper中已经定义了getUsersAndOrders方法: ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT ${ew.sqlSelect} FROM user, `order` ${ew.customSqlSegment}") List<User> getUsersAndOrders(@Param("ew") QueryWrapper<User> queryWrapper); } ``` 在UserMapper中,我们使用了@Select注解来指定SQL语句。`${ew.sqlSelect}`用于动态插入select后面的字段部分,`${ew.customSqlSegment}`用于动态插入where后面的条件部分。 通过调用getUsersAndOrders方法,即可获得关联查询的结果列。 以上示例演示了使用MyBatis Plus进行多关联查询的方法,你可以根据实际情况进行调整和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值