springboot通过mybatisPlus调用存储过程实现

使用场景

对于一个CRUD的操作需要涉及多条sql语句甚至多个表的关联,如果使用持久层框架去做一个个查询,会使得业务逻辑变得复杂冗余,这里我们可以使用mysql的存储过程对象(不同的数据库直接的存储过程函数有一定的语法差别),使用存储过程不仅可以简化我们后端业务逻辑操作,还可以通过使用mysql内置的函数去简化我们的sql之间的值传递的操作
比如 last_insert_id() 获取通过数据库主键自增策略插入数据的id(如果是自定义主键,手动输入,则last_insert_id() 依旧是上一次通过自增策略获取的id值)

项目使用

1、Controller层

@ApiOperation(value = "添加部门")  
  @PostMapping("/")
  public RespBean addDep(@RequestBody Department dep){
    
    
    return departmentService.addDep(dep);
  }

2、serviceImpl

@Override
public RespBean addDep(Department dep) {
    
    

  dep.setEnabled(true);
  departmentMapper.addDep(dep);
  if (dep.getResult() == 1) {
    
    
    return RespBean.success("添加部门成功!", dep);
  }
  return RespBean.error("添加部门失败");
}

3、mapper.xml

<!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.shuang.server.pojo.Department">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="parentId" property="parentId" />
        <result column="depPath" property="depPath" />
        <result column="enabled" property="enabled" />
        <result column="isParent" property="isParent" />
    </resultMap>

    <resultMap id="DepartmentWithChildren" type="com.shuang.server.pojo.Department" extends="BaseResultMap">
        <collection property="children" ofType="com.shuang.server.pojo.Department"
                    select="com.shuang.server.mapper.DepartmentMapper.getAllDepartments" column="id"/>
    </resultMap>
    
<!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, parentId, depPath, enabled, isParent
    </sql>
    
<!--获取所有部门-->
    <select id="getAllDepartments" resultMap="DepartmentWithChildren">
        select
        <include refid="Base_Column_List"/>
        from t_department
        where parentId = #{parentId}
    </select>

4、存储过程函数

CREATE DEFINER=`root`@`%` PROCEDURE `addDep`(in depName varchar(32),in parentId int,in enabled boolean,out result int,out result2 int)
begin
declare did int;
declare pDepPath varchar(64);
insert into t_department set name=depName,parentId=parentId,enabled=enabled;
select row_count() into result;
select last_insert_id() into did;
set result2=did;
select depPath into pDepPath from t_department where id=parentId;
update t_department set depPath=concat(pDepPath,'.',did) where id=did;
update t_department set isParent=true where id=parentId;
end

猜你喜欢

转载自blog.csdn.net/weixin_46195957/article/details/118542074
今日推荐