SpringCloud基础架构构建过程(二)__配置数据库、flyway、MybatisPlus插件

前述

        本次微服务架构的构建过程以Mysql来作为关系型数据库,flyway进行数据库版本控制。

引入基础依赖

        此微服务架构在设计上使用分服务分库的的模式,即每个服务都有一个单独的数据库模块,为减少代码冗余,将相关依赖引入到common中。

        <!-- 集成mysql -->    
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--mybatis-plus dao框架-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

        <!-- 集成flyway -->
        <dependency>
          <groupId>org.flywaydb</groupId>
          <artifactId>flyway-core</artifactId>
        </dependency>

        在相应的服务中的resources目录下创建db/migration目录,如果在创建服务时选择了flyway插件,会自动创建此目录。因为开发环境的数据库变动更频繁,但是生产环境的变动频率很低,所以在生产环境中没有必要创建很多的sql文件。所以可以再migration目录下创建各环境的目录:local、test、prod

        配置相关连接

        在yml文件中对Mysql连接数据、flyway基础配置进行配置

#在application.yml文件中配置
spring:
  #设置flyway
  flyway:
    enabled: true
    #执行文件夹位置
    locations: classpath:db/migration/@spring.active@
    # 当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移
    baseline-on-migrate: true
    # 是否允许无序的迁移 开发环境最好开启, 生产环境关闭
    out-of-order: true
    # 关闭占位符替换,因为插入的sql里边可能包含${}关键字
    placeholder-replacement: false


#在application-${profile}.yml文件中配置
spring:
  #数据库链接
  datasource:
    url: jdbc:mysql://127.0.0.1:33062/micro-base?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true
    username: root
    password: root
    # 连接池大小根据实际情况调整
    max-active: 100
    max-pool-prepared-statement-per-connection-size: 100

        因为flyway文件配置对环境没有什么差异性配置,所以作为基础配置在application.yml文件中进行配置,但是不同的环境的数据库链接不同,所以在不同的环境文件中进行配置。

        使用flyway进行数据库管理

        flyway有严格的命名规则「V<VERSION>__<NAME>.sql」,在对应的文件中创建初始化sql语句。

        创建 yl-base-moudle 用于存放请求体和结果返回体,避免多服务之间互相依赖,其创建步骤与common相同,不做赘述【SpringCloud基础架构构建过程(一)__构建基础服务架构_Black Michael的博客-CSDN博客】,在实体类之外创建 BaseRequest.java 用于存放请求时的一些公共字段.

package micro.model;

import lombok.Data;

import java.io.Serializable;

/**
 * 请求基类,所有接口请求可继承此类
 *
 * @author Black Michael
 * @date 2021/8/15
 */
@Data
public class BaseRequest implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 开始时间
     */
    private String searchBeginTime;

    /**
     * 结束时间
     */
    private String searchEndTime;

    /**
     * 分页:每页大小(默认20)
     */
    private Integer pageSize;

    /**
     * 分页:第几页(从1开始)
     */
    private Integer pageNo;

    /**
     * 排序字段
     */
    private String orderBy;

    /**
     * 正序或者倒序排列(asc 或 desc)
     */
    private String sortBy;

}

        创建一个空数据库 micro-base。

        启动项目, 此时flyway会自动在数据库执行文件中的sql语句,并在第一次执行时生成  flyway_schema_history 表结构,用于存储flyway的版本数据以及文件校验的校验值。同时,通过控制台我们能够看到fkyway的具体执行步骤以及执行结果。

        至此,flyway的简单集成已经完成。

集成MybatisPlus

        下面开始集成MybatisPlus。

        根据生成的表结构生成或手动创建文件SysUser.java 、SysUserParam.java 、SysUserResult .java、SysUserController.java 、SysUserService.java 、SysUserSserviceImpl.java 、SysUserMapper.java 、 SysUserMapper.xml。如下图:

具体代码如下:

package com.dgh.micro.model.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 系统用户
 * </p>
 *
 * @author DGH DEMO
 * @since 2021-11-01
 */
@Data
@TableName("sys_user")
public class SysUser implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "user_id", type = IdType.ID_WORKER)
    private Long userId;

    /**
     * 集团id
     */
    @TableField("group_id")
    private Long groupId;

    /**
     * 姓名
     */
    @TableField("real_name")
    private String realName;

    /**
     * 昵称
     */
    @TableField("nick_name")
    private String nickName;

    /**
     * 账号
     */
    @TableField("account")
    private String account;

    /**
     * 工号
     */
    @TableField("work_no")
    private String workNo;

    /**
     * 密码,加密方式为BCrypt
     */
    @TableField("password")
    private String password;

    /**
     * 头像,存的为文件id
     */
    @TableField("avatar")
    private Long avatar;

    /**
     * 生日
     */
    @TableField("birthday")
    private Date birthday;

    /**
     * 性别:M-男,F-女
     */
    @TableField("sex")
    private String sex;

    /**
     * 邮箱
     */
    @TableField("email")
    private String email;

    /**
     * 手机
     */
    @TableField("phone")
    private String phone;

    /**
     * 电话
     */
    @TableField("tel")
    private String tel;

    /**
     * 是否是超级管理员:Y-是,N-否
     */
    @TableField("super_admin_flag")
    private String superAdminFlag;

    /**
     * 状态:1-正常,2-冻结
     */
    @TableField("status_flag")
    private Integer statusFlag;

    /**
     * 最后登陆IP
     */
    @TableField("last_login_ip")
    private String lastLoginIp;

    /**
     * 最后登陆时间
     */
    @TableField("last_login_time")
    private Date lastLoginTime;

    /**
     * 删除标记:Y-已删除,N-未删除
     */
    @TableField("del_flag")
    private String delFlag;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 创建人
     */
    @TableField(value = "create_user", fill = FieldFill.INSERT)
    private Long createUser;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    private Date updateTime;

    /**
     * 更新人
     */
    @TableField(value = "update_user", fill = FieldFill.UPDATE)
    private Long updateUser;


    @Override
    public String toString() {
        return "SysUser{" +
                "userId=" + userId +
                ", groupId=" + groupId +
                ", realName=" + realName +
                ", nickName=" + nickName +
                ", account=" + account +
                ", workNo=" + workNo +
                ", password=" + password +
                ", avatar=" + avatar +
                ", birthday=" + birthday +
                ", sex=" + sex +
                ", email=" + email +
                ", phone=" + phone +
                ", tel=" + tel +
                ", superAdminFlag=" + superAdminFlag +
                ", statusFlag=" + statusFlag +
                ", lastLoginIp=" + lastLoginIp +
                ", lastLoginTime=" + lastLoginTime +
                ", delFlag=" + delFlag +
                ", createTime=" + createTime +
                ", createUser=" + createUser +
                ", updateTime=" + updateTime +
                ", updateUser=" + updateUser +
                "}";
    }
}

package com.dgh.micro.model.vo.param;

import com.dgh.micro.model.BaseRequest;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 系统用户
 * </p>
 *
 * @author DGH DEMO
 * @since 2021-11-01
 */
@Data
@ApiModel
public class SysUserParam extends BaseRequest implements Serializable {

    private static final long serialVersionUID = 1L;


    /**
     * 主键
     */
    @ApiModelProperty("主键")
    private Long userId;

    /**
     * 集团id
     */
    @ApiModelProperty("集团id")
    private Long groupId;

    /**
     * 姓名
     */
    @ApiModelProperty("姓名")
    private String realName;

    /**
     * 昵称
     */
    @ApiModelProperty("昵称")
    private String nickName;

    /**
     * 账号
     */
    @ApiModelProperty("账号")
    private String account;

    /**
     * 工号
     */
    @ApiModelProperty("工号")
    private String workNo;

    /**
     * 密码,加密方式为BCrypt
     */
    @ApiModelProperty("密码,加密方式为BCrypt")
    private String password;

    /**
     * 头像,存的为文件id
     */
    @ApiModelProperty("头像,存的为文件id")
    private Long avatar;

    /**
     * 生日
     */
    @ApiModelProperty("生日")
    private Date birthday;

    /**
     * 性别:M-男,F-女
     */
    @ApiModelProperty("性别:M-男,F-女")
    private String sex;

    /**
     * 邮箱
     */
    @ApiModelProperty("邮箱")
    private String email;

    /**
     * 手机
     */
    @ApiModelProperty("手机")
    private String phone;

    /**
     * 电话
     */
    @ApiModelProperty("电话")
    private String tel;

    /**
     * 是否是超级管理员:Y-是,N-否
     */
    @ApiModelProperty("是否是超级管理员:Y-是,N-否")
    private String superAdminFlag;

    /**
     * 状态:1-正常,2-冻结
     */
    @ApiModelProperty("状态:1-正常,2-冻结")
    private Integer statusFlag;

    /**
     * 最后登陆IP
     */
    @ApiModelProperty("最后登陆IP")
    private String lastLoginIp;

    /**
     * 最后登陆时间
     */
    @ApiModelProperty("最后登陆时间")
    private Date lastLoginTime;

    /**
     * 删除标记:Y-已删除,N-未删除
     */
    @ApiModelProperty(hidden = true)
    private String delFlag;

    /**
     * 创建时间
     */
    @ApiModelProperty(hidden = true)
    private Date createTime;

    /**
     * 创建人
     */
    @ApiModelProperty(hidden = true)
    private Long createUser;

    /**
     * 更新时间
     */
    @ApiModelProperty(hidden = true)
    private Date updateTime;

    /**
     * 更新人
     */
    @ApiModelProperty(hidden = true)
    private Long updateUser;


}


package com.dgh.micro.model.vo.result;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 系统用户
 * </p>
 *
 * @author DGH DEMO
 * @since 2021-11-01
 */
@Data
@ApiModel
public class SysUserResult implements Serializable {

    private static final long serialVersionUID = 1L;


    /**
     * 主键
     */
    @ApiModelProperty("主键")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long userId;

    /**
     * 集团id
     */
    @ApiModelProperty("集团id")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long groupId;

    /**
     * 姓名
     */
    @ApiModelProperty("姓名")
    private String realName;

    /**
     * 昵称
     */
    @ApiModelProperty("昵称")
    private String nickName;

    /**
     * 账号
     */
    @ApiModelProperty("账号")
    private String account;

    /**
     * 工号
     */
    @ApiModelProperty("工号")
    private String workNo;

    /**
     * 密码,加密方式为BCrypt
     */
    @ApiModelProperty("密码,加密方式为BCrypt")
    private String password;

    /**
     * 头像,存的为文件id
     */
    @ApiModelProperty("头像,存的为文件id")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long avatar;

    /**
     * 生日
     */
    @ApiModelProperty("生日")
    private Date birthday;

    /**
     * 性别:M-男,F-女
     */
    @ApiModelProperty("性别:M-男,F-女")
    private String sex;

    /**
     * 邮箱
     */
    @ApiModelProperty("邮箱")
    private String email;

    /**
     * 手机
     */
    @ApiModelProperty("手机")
    private String phone;

    /**
     * 电话
     */
    @ApiModelProperty("电话")
    private String tel;

    /**
     * 是否是超级管理员:Y-是,N-否
     */
    @ApiModelProperty("是否是超级管理员:Y-是,N-否")
    private String superAdminFlag;

    /**
     * 状态:1-正常,2-冻结
     */
    @ApiModelProperty("状态:1-正常,2-冻结")
    private Integer statusFlag;

    /**
     * 最后登陆IP
     */
    @ApiModelProperty("最后登陆IP")
    private String lastLoginIp;

    /**
     * 最后登陆时间
     */
    @ApiModelProperty("最后登陆时间")
    private Date lastLoginTime;

    /**
     * 删除标记:Y-已删除,N-未删除
     */
    @ApiModelProperty(hidden = true)
    private String delFlag;

    /**
     * 创建时间
     */
    @ApiModelProperty(hidden = true)
    private Date createTime;

    /**
     * 创建人
     */
    @ApiModelProperty(hidden = true)
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long createUser;

    /**
     * 更新时间
     */
    @ApiModelProperty(hidden = true)
    private Date updateTime;

    /**
     * 更新人
     */
    @ApiModelProperty(hidden = true)
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long updateUser;

}


package com.dgh.micro.controller;

import com.dgh.micro.model.ResponseData;
import com.dgh.micro.model.SuccessResponseData;
import com.dgh.micro.model.vo.PageResult;
import com.dgh.micro.model.vo.param.SysUserParam;
import com.dgh.micro.model.vo.result.SysUserResult;
import com.dgh.micro.service.interf.SysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 系统用户控制器
 *
 * @author DGH DEMO
 * @Date 2021-11-01 11:03:55
 */
@Slf4j
@RestController
@RequestMapping(name = "系统用户管理", path = "/sysUser")
@Api(tags = "系统用户")
public class SysUserController {


    @Autowired
    private SysUserService sysUserService;

    /**
     * 新增系统用户
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    @PostMapping(name = "添加系统用户", path = "/add")
    @ApiOperation("新增系统用户")
    public ResponseData add(@RequestBody SysUserParam param) {
        sysUserService.add(param);
        return new SuccessResponseData();
    }

    /**
     * 新增或修改[全字段更新,没有值的字段会被更新为null]
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    @PostMapping(name = "新增或修改系统用户", path = "/addOrUpdate")
    @ApiOperation("新增或修改[全字段更新,没有值的字段会被更新为null]")
    public ResponseData addOrUpdate(@RequestBody SysUserParam param) {
        sysUserService.addOrUpdate(param);
        return new SuccessResponseData();
    }

    /**
     * 修改系统用户
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    @PostMapping(name = "修改系统用户", path = "/update")
    @ApiOperation("修改系统用户")
    public ResponseData update(@RequestBody SysUserParam param) {
        sysUserService.update(param);
        return new SuccessResponseData();
    }

    /**
     * 删除系统用户
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    @PostMapping(name = "删除系统用户", path = "/delete")
    @ApiOperation("删除系统用户")
    public ResponseData delete(@RequestBody SysUserParam param) {
        sysUserService.delete(param);
        return new SuccessResponseData();
    }

    /**
     * 查询单条系统用户详情
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    @PostMapping(name = "查询系统用户详情", path = "/queryDetail")
    @ApiOperation(value = "查询系统用户详情", response = SysUserResult.class)
    public ResponseData queryDetail(@RequestBody SysUserParam param) {
        SysUserResult result = sysUserService.findBySpec(param);
        return new SuccessResponseData(result);
    }

    /**
     * 查询系统用户列表
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    @PostMapping(name = "查询系统用户列表", path = "/queryList")
    @ApiOperation(value = "查询系统用户列表", response = SysUserResult.class)
    public ResponseData queryList(@RequestBody SysUserParam param) {
        List<SysUserResult> listBySpec = sysUserService.findListBySpec(param);
        return new SuccessResponseData(listBySpec);
    }

    /**
     * 分页查询系统用户列表
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    @PostMapping(name = "分页查询系统用户列表", path = "/queryListPage")
    @ApiOperation(value = "分页查询系统用户列表", response = SysUserResult.class)
    public ResponseData queryListPage(@RequestBody SysUserParam param) {
        PageResult<SysUserResult> pageBySpec = sysUserService.findPageBySpec(param);
        return new SuccessResponseData(pageBySpec);
    }

}


package com.dgh.micro.service.interf;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dgh.micro.model.domain.SysUser;
import com.dgh.micro.model.vo.PageResult;
import com.dgh.micro.model.vo.param.SysUserParam;
import com.dgh.micro.model.vo.result.SysUserResult;

import java.util.List;

/**
 * <p>
 * 系统用户 服务类
 * </p>
 *
 * @author DGH DEMO
 * @since 2021-11-01
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 新增
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    void add(SysUserParam param);

    /**
     * 新增或更新
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    void addOrUpdate(SysUserParam param);

    /**
     * 删除
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    void delete(SysUserParam param);

    /**
     * 更新
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    void update(SysUserParam param);

    /**
     * 查询单条数据,Specification模式
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    SysUserResult findBySpec(SysUserParam param);

    /**
     * 查询列表,Specification模式
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    List<SysUserResult> findListBySpec(SysUserParam param);

    /**
     * 查询分页数据,Specification模式
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    PageResult<SysUserResult> findPageBySpec(SysUserParam param);

    /**
     * 根据主键全字段更新
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    Boolean updateByPrimaryKey(SysUserParam param);
}



package com.dgh.micro.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dgh.micro.mapper.SysUserMapper;
import com.dgh.micro.model.PageResultFactory;
import com.dgh.micro.model.domain.SysUser;
import com.dgh.micro.model.vo.PageResult;
import com.dgh.micro.model.vo.param.SysUserParam;
import com.dgh.micro.model.vo.result.SysUserResult;
import com.dgh.micro.service.interf.SysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 系统用户 服务实现类
 * </p>
 *
 * @author DGH DEMO
 * @since 2021-11-01
 */
@Slf4j
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {

    @Override
    public void add(SysUserParam param) {
        SysUser entity = getEntity(param);
        this.save(entity);
    }

    @Override
    public void addOrUpdate(SysUserParam param) {
        SysUser entity = getEntity(param);
        if (ObjectUtil.isNotEmpty(param.getUserId())) {
            this.updateByPrimaryKey(param);
        } else {
            this.save(entity);
        }
    }

    @Override
    public void delete(SysUserParam param) {
        this.removeById(getKey(param));
    }

    @Override
    public void update(SysUserParam param) {
        SysUser oldEntity = getOldEntity(param);
        SysUser newEntity = getEntity(param);
        BeanUtil.copyProperties(newEntity, oldEntity);
        this.updateById(newEntity);
    }

    @Override
    public SysUserResult findBySpec(SysUserParam param) {
        return null;
    }

    @Override
    public List<SysUserResult> findListBySpec(SysUserParam param) {

        List<SysUserResult> results = this.baseMapper.customList(param);
        return results;
    }

    @Override
    public PageResult<SysUserResult> findPageBySpec(SysUserParam param) {
        Page pageContext = getPageContext(param);
        IPage<SysUserResult> page = this.baseMapper.customPageList(pageContext, param);
        return PageResultFactory.createPageResult(page);
    }

    @Override
    public Boolean updateByPrimaryKey(SysUserParam param) {

        Integer count = this.baseMapper.updateByPrimaryKey(param);
        return count > 0;
    }

    private Serializable getKey(SysUserParam param) {
        return param.getUserId();
    }

    private Page getPageContext(SysUserParam param) {
        int pageSize = 20;
        int pageNo = 1;

        //每页条数
        Integer pageSizeString = param.getPageSize();
        if (ObjectUtil.isNotEmpty(pageSizeString)) {
            pageSize = pageSizeString;
        }

        //第几页
        Integer pageNoString = param.getPageNo();
        if (ObjectUtil.isNotEmpty(pageNoString)) {
            pageNo = pageNoString;
        }

        return new Page<>(pageNo, pageSize);
    }

    private SysUser getOldEntity(SysUserParam param) {
        return this.getById(getKey(param));
    }

    private SysUser getEntity(SysUserParam param) {
        SysUser entity = new SysUser();
        BeanUtil.copyProperties(param, entity);
        return entity;
    }

}



package com.dgh.micro.mapper;

import com.dgh.micro.model.domain.SysUser;
import com.dgh.micro.model.vo.param.SysUserParam;
import com.dgh.micro.model.vo.result.SysUserResult;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 系统用户 Mapper 接口
 * </p>
 *
 * @author DGH DEMO
 * @since 2021-11-01
 */
public interface SysUserMapper extends BaseMapper<SysUser> {

    /**
     * 获取列表
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    List<SysUserResult> customList(@Param("paramCondition") SysUserParam paramCondition);

    /**
     * 获取map列表
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    List<Map<String, Object>> customMapList(@Param("paramCondition") SysUserParam paramCondition);

    /**
     * 获取分页实体列表
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    Page<SysUserResult> customPageList(@Param("page") Page page, @Param("paramCondition") SysUserParam paramCondition);

    /**
     * 获取分页map列表
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    Page<Map<String, Object>> customPageMapList(@Param("page") Page page, @Param("paramCondition") SysUserParam paramCondition);

    /**
     * 根据主键全字段更新
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    Integer updateByPrimaryKey(@Param("paramCondition") SysUserParam paramCondition);

}



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dgh.micro.mapper.SysUserMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.dgh.micro.model.domain.SysUser">
        <id column="user_id" property="userId" />
        <result column="group_id" property="groupId" />
        <result column="real_name" property="realName" />
        <result column="nick_name" property="nickName" />
        <result column="account" property="account" />
        <result column="work_no" property="workNo" />
        <result column="password" property="password" />
        <result column="avatar" property="avatar" />
        <result column="birthday" property="birthday" />
        <result column="sex" property="sex" />
        <result column="email" property="email" />
        <result column="phone" property="phone" />
        <result column="tel" property="tel" />
        <result column="super_admin_flag" property="superAdminFlag" />
        <result column="status_flag" property="statusFlag" />
        <result column="last_login_ip" property="lastLoginIp" />
        <result column="last_login_time" property="lastLoginTime" />
        <result column="del_flag" property="delFlag" />
        <result column="create_time" property="createTime" />
        <result column="create_user" property="createUser" />
        <result column="update_time" property="updateTime" />
        <result column="update_user" property="updateUser" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        user_id AS "userId", group_id AS "groupId", real_name AS "realName", nick_name AS "nickName", account AS "account", work_no AS "workNo", password AS "password", avatar AS "avatar", birthday AS "birthday", sex AS "sex", email AS "email", phone AS "phone", tel AS "tel", super_admin_flag AS "superAdminFlag", status_flag AS "statusFlag", last_login_ip AS "lastLoginIp", last_login_time AS "lastLoginTime", del_flag AS "delFlag", create_time AS "createTime", create_user AS "createUser", update_time AS "updateTime", update_user AS "updateUser"
    </sql>

    <!-- 通用查询 -->
    <sql id="Base_Query_Clause">
        <if test="paramCondition.userId != null">
            and <![CDATA[ user_id = #{paramCondition.userId} ]]>
        </if>
        <if test="paramCondition.groupId != null">
            and <![CDATA[ group_id = #{paramCondition.groupId} ]]>
        </if>
        <if test="paramCondition.realName != null and paramCondition.realName != ''">
            and <![CDATA[ real_name like CONCAT('%', #{paramCondition.realName} ,'%') ]]>
        </if>
        <if test="paramCondition.nickName != null and paramCondition.nickName != ''">
            and <![CDATA[ nick_name like CONCAT('%', #{paramCondition.nickName} ,'%') ]]>
        </if>
        <if test="paramCondition.account != null and paramCondition.account != ''">
            and <![CDATA[ account like CONCAT('%', #{paramCondition.account} ,'%') ]]>
        </if>
        <if test="paramCondition.workNo != null and paramCondition.workNo != ''">
            and <![CDATA[ work_no like CONCAT('%', #{paramCondition.workNo} ,'%') ]]>
        </if>
        <if test="paramCondition.password != null and paramCondition.password != ''">
            and <![CDATA[ password like CONCAT('%', #{paramCondition.password} ,'%') ]]>
        </if>
        <if test="paramCondition.avatar != null">
            and <![CDATA[ avatar = #{paramCondition.avatar} ]]>
        </if>
        <if test="paramCondition.birthday != null">
            and <![CDATA[ birthday =  #{paramCondition.birthday} ]]>
        </if>
        <if test="paramCondition.sex != null and paramCondition.sex != ''">
            and <![CDATA[ sex like CONCAT('%', #{paramCondition.sex} ,'%') ]]>
        </if>
        <if test="paramCondition.email != null and paramCondition.email != ''">
            and <![CDATA[ email like CONCAT('%', #{paramCondition.email} ,'%') ]]>
        </if>
        <if test="paramCondition.phone != null and paramCondition.phone != ''">
            and <![CDATA[ phone like CONCAT('%', #{paramCondition.phone} ,'%') ]]>
        </if>
        <if test="paramCondition.tel != null and paramCondition.tel != ''">
            and <![CDATA[ tel like CONCAT('%', #{paramCondition.tel} ,'%') ]]>
        </if>
        <if test="paramCondition.superAdminFlag != null and paramCondition.superAdminFlag != ''">
            and <![CDATA[ super_admin_flag like CONCAT('%', #{paramCondition.superAdminFlag} ,'%') ]]>
        </if>
        <if test="paramCondition.statusFlag != null">
            and <![CDATA[ status_flag = #{paramCondition.statusFlag} ]]>
        </if>
        <if test="paramCondition.lastLoginIp != null and paramCondition.lastLoginIp != ''">
            and <![CDATA[ last_login_ip like CONCAT('%', #{paramCondition.lastLoginIp} ,'%') ]]>
        </if>
        <if test="paramCondition.lastLoginTime != null">
            and <![CDATA[ last_login_time =  #{paramCondition.lastLoginTime} ]]>
        </if>
        <if test="paramCondition.delFlag != null and paramCondition.delFlag != ''">
            and <![CDATA[ del_flag like CONCAT('%', #{paramCondition.delFlag} ,'%') ]]>
        </if>
        <if test="paramCondition.createTime != null">
            and <![CDATA[ create_time =  #{paramCondition.createTime} ]]>
        </if>
        <if test="paramCondition.createUser != null">
            and <![CDATA[ create_user = #{paramCondition.createUser} ]]>
        </if>
        <if test="paramCondition.updateTime != null">
            and <![CDATA[ update_time =  #{paramCondition.updateTime} ]]>
        </if>
        <if test="paramCondition.updateUser != null">
            and <![CDATA[ update_user = #{paramCondition.updateUser} ]]>
        </if>
        <!-- 排序 -->
        <if test="paramCondition.sort != null">
             <![CDATA[ order by #{paramCondition.sort} #{paramCondition.order} ]]>
        </if>
    </sql>

    <select id="customList" resultType="com.dgh.micro.model.vo.result.SysUserResult" parameterType="com.dgh.micro.model.vo.param.SysUserParam">
        select
        <include refid="Base_Column_List"/>
        from sys_user where 1 = 1
        <include refid="Base_Query_Clause"/>
    </select>

    <select id="customMapList" resultType="map" parameterType="com.dgh.micro.model.vo.param.SysUserParam">
        select
        <include refid="Base_Column_List"/>
        from sys_user where 1 = 1

        <include refid="Base_Query_Clause"/>
    </select>

    <select id="customPageList" resultType="com.dgh.micro.model.vo.result.SysUserResult" parameterType="com.dgh.micro.model.vo.param.SysUserParam">
        select
        <include refid="Base_Column_List"/>
        from sys_user where 1 = 1
        <include refid="Base_Query_Clause"/>
    </select>

    <select id="customPageMapList" resultType="map" parameterType="com.dgh.micro.model.vo.param.SysUserParam">
        select
        <include refid="Base_Column_List"/>
        from sys_user where 1 = 1
        <include refid="Base_Query_Clause"/>
    </select>
    <update id="updateByPrimaryKey" parameterType="com.dgh.micro.model.vo.param.SysUserParam">
        update sys_user
        set
            group_id = #{paramCondition.groupId},
            real_name = #{paramCondition.realName},
            nick_name = #{paramCondition.nickName},
            account = #{paramCondition.account},
            work_no = #{paramCondition.workNo},
            password = #{paramCondition.password},
            avatar = #{paramCondition.avatar},
            birthday = #{paramCondition.birthday},
            sex = #{paramCondition.sex},
            email = #{paramCondition.email},
            phone = #{paramCondition.phone},
            tel = #{paramCondition.tel},
            super_admin_flag = #{paramCondition.superAdminFlag},
            status_flag = #{paramCondition.statusFlag},
            last_login_ip = #{paramCondition.lastLoginIp},
            last_login_time = #{paramCondition.lastLoginTime},
            del_flag = #{paramCondition.delFlag},
            create_time = #{paramCondition.createTime},
            create_user = #{paramCondition.createUser},
            update_time = #{paramCondition.updateTime},
            update_user = #{paramCondition.updateUser}
        where
                    user_id = #{paramCondition.userId}
    </update>

</mapper>

        集成 MybatisPlus最主要的实在service层继承 ServiceImpl<XxxxMapper, XxxxUser> 以此来使用MybatisPlus自带的已经集成的一些基础方法,比如saveBatch、saveOrUpdate、saveOrUpdateBatch等,同时在Mapper.java的类中继承BaseMapper<Xxxxx> 。这里出现了BaseMapper、ServiceImpl两个MybatisPlus接口和类,其中的区别是:BaseMapper 针对dao层的方法封装 CRUD,ServiceImpl 针对业务逻辑层的实现,需要指定Dao层类和对应的实体类,是在BaseMapper基础上的加强

        具体方法演示MybatisPlus的使用:

        在Controller层创建一个方法  add 

 @PostMapping(name = "添加系统用户", path = "/add")
    @ApiOperation("新增系统用户")
    public ResponseData add(@RequestBody SysUserParam param) {
        sysUserService.add(param);
        return new SuccessResponseData();
    }

        在Service中创建接口方法

 /**
     * 新增
     *
     * @author DGH DEMO
     * @Date 2021-11-01
     */
    void add(SysUserParam param);

        并在Impl中进行实现。注意,在实现类中使用的 this.save(entity); 方法便是MybatisPlus集成的方法,其使用的是BaseMapper中的方法。


    @Override
    public void add(SysUserParam param) {
        SysUser entity = getEntity(param);
        this.save(entity);
    }

        在启动类中配置包扫描的路径。

@SpringBootApplication(scanBasePackages = {"com.dgh.micro"})
@MapperScan("com.dgh.micro")
@Slf4j
public class MicroBaseServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicroBaseServiceApplication.class, args);
        log.info("项目启动成功");
    }

}

         在yml配置文件中配置MybatisPlus的配置数据

mybatis-plus:
  mapper-locations: classpath*:com/dgh/**/mapping/*.xml
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true
    lazy-loading-enabled: true
    multiple-result-sets-enabled: true
  global-config:
    banner: false
    enable-sql-runner: true
    db-config:
      id-type: assign_id
      table-underline: true

本章内容,到此结束,后续开始对redis以及mongoDB进行集成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值