今天我們主要講在實際開發中所用到的一些方法,不知道怎麼整合的可以看我上一篇部落格
項目已已上傳gitee,請移步gitee下載下傳完整項目
SpringBoot快速內建MyBatis-plus—(第一篇)
最終目錄結構

整合Swagger文檔 引入坐标依賴
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在目前目錄下建立一個util處理Swagger文檔
entity
package com.gxh.modules.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Objects;
@TableName("sys_user")//mybatisPlus 注解:映射表名
@Data// lombok代碼簡化注解,包裝Get/Set/構造器
public class SysUser implements Serializable {
//@TableId(type = IdType.ASSIGN_ID) //雪花算法--->MyBatisPlus 支援的Id政策
//@TableId(type = IdType.ASSIGN_UUID) //雪花算法_不含中劃線的UUID--->MyBatisPlus 支援的Id政策
//@TableId(type = IdType.ID_WORKER_STR) //利用了雪花算法--->MyBatisPlus 支援的Id政策
/**ID*/
@TableId(type = IdType.AUTO) //自增--->MyBatisPlus 支援的Id政策
private Integer id;
/**使用者名*/
private String username;
/**密碼*/
private String password;
//請不要在意單詞拼寫是否正确
//虛拟字段-代表在資料庫中不存在(不會被MybatisPlus抛出Know Null Column異常)
@TableField(exist = false)//Type Is boolean(there defaultValue is true)
private String note;
/**
* 重寫父類Object 提供的 toString方法,友善測試
* @return
*/
@Override
public String toString() {
return "SysUser{" +
"id='" + id + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SysUser sysUser = (SysUser) o;
return Objects.equals(id, sysUser.id) &&
Objects.equals(username, sysUser.username) &&
Objects.equals(password, sysUser.password);
}
@Override
public int hashCode() {
return Objects.hash(id, username, password);
}
}
附上SwaggerConfig
```java
package com.gxh.modules.util;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @Author gxh
* @Data 2021/8/23
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")
.select()
.apis(RequestHandlerSelectors.basePackage("com.gxh.modules.controller"))
.paths(PathSelectors.any())
.build().apiInfo(new ApiInfoBuilder()
.title("SpringBoot-MyBatisPlus")
.description("MyBatis-Plus在開發中常用的方法")
.version("1.0")
.licenseUrl("http://www.lxito.com")
.build());
}
}
在SpringBoot啟動類打開Swagger文檔
package com.gxh;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.net.InetAddress;
/***
* @author gxh
* @date 2021-8-21
*/
@EnableSwagger2 //開啟swagger文檔
@EnableScheduling //開啟異步
@SpringBootApplication
public class SpringBootAndMpApplication {
public static void main(String[] args) throws Exception{
Long s1 = System.currentTimeMillis();
ConfigurableApplicationContext application = SpringApplication.run(SpringBootAndMpApplication.class, args);
Long s2 = System.currentTimeMillis();
Environment env = application.getEnvironment();
String ip = InetAddress.getLocalHost().getHostAddress();
String port = env.getProperty("server.port");
String path = env.getProperty("server.servlet.context-path");
System.out.println("=======================================>");
System.out.println("啟動耗時=======>"+(s2-s1));
System.out.println("Local:http://localhost:" + port + "/swagger-ui.html");
System.out.println("serve start-up success");
System.out.println("=======================================>");
}
}
定義Result
package com.gxh.modules.constant;
/**
* 響應結果 常量接口
* @Author gxh
* @Data 2021/8/23
*/
// interface 不會繼承 Object,所有作為常量效率會好點.
public interface ResultMessageConstant {
/**添加成功*/
//接口常量預設就是被 public static final String 修飾
String MESSAGE_ADD_SUCCESS = "添加成功";
/**200*/
String MESSAGE_SUCCESS_200 = "200";
/**删除成功*/
String MESSAGE_DEL_SUCCESS = "删除成功";
}
1,使用MyBatisPlus的分頁清單查詢
/***
* 使用MybatisPlus QueryWapper 分頁查詢
* @return
*/
@GetMapping("/pageList")
public Map<String,Object> pageList(@RequestParam(value = "pageNo",defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize){
QueryWrapper<SysUser> query = new QueryWrapper<SysUser>();
IPage<SysUser> page = new Page<SysUser>(pageNo,pageSize);
IPage<SysUser> pageList = sysUserService.page(page, query);
result.put("code",ResultMessageConstant.MESSAGE_SUCCESS_200);
result.put("success",true);
result.put("data",pageList);
return result;
}
2.使用MyBatisPlus的不分頁list查詢
/**
* 不分頁list查詢
* @return
*/
@GetMapping("/list")
public Map<String,Object> userList(){
List<SysUser> users = this.sysUserService.list();
result.put("userList",users);
return result;
}
3.自定義添加
/**
* 添加使用者 1
* 使用自定義SQL + DTO
* @param userDto
* @return
*/
@PostMapping("/addByDto")
public Map<String,Object> addByDto(@RequestBody UserDto userDto){
//調用業務層自定義的添加方法
boolean isFlag = this.sysUserService.insertUser(userDto);
if (isFlag){
result.put("code",ResultMessageConstant.MESSAGE_SUCCESS_200);
result.put("success",true);
result.put("msg", ResultMessageConstant.MESSAGE_ADD_SUCCESS);
result.put("data",userDto);
}
return result;
}
3.1接口層
/**
* 添加使用者
* @param userDto
* @return
*/
boolean insertUser(UserDto userDto);
3.1.1接口實作層
@Override
public boolean insertUser(UserDto userDto) {
boolean isFlag = false;
Integer count = this.sysUserMapper.insertUserByDto(userDto);
if (null !=count || count>0){
isFlag = true;
}
return isFlag;
}
4.Dao(Mapper)層
/**
* 添加使用者
* @param userDto
* @return
*/
Integer insertUserByDto(@Param("userDto") UserDto userDto);
4.1 xml映射
<insert id="insertUserByDto" parameterType="com.gxh.modules.entity.dto.UserDto">
insert into sys_user(`username`,`password`)
values (#{userDto.username},#{userDto.password})
</insert>
5.使用MyBatisPlus的save方法進行添加操作
/**
* 添加使用者 2
* 使用MyBatisPlus + entity(SysUser)
* @param sysUser
* @return
*/
@PostMapping("/add")
public Map<String,Object> add(@RequestBody SysUser sysUser){
boolean save = sysUserService.save(sysUser);
//更新
//sysUserService.update(sysUser);
if (save){
result.put("code",ResultMessageConstant.MESSAGE_SUCCESS_200);
result.put("success",true);
//這裡使用一下 當時SysUser定義的虛拟字段 SysUser note(虛拟字段,不存在于資料表中)
sysUser.setNote("添加成功");
result.put("sysUser.note", sysUser.getNote());
result.put("data",sysUser);
}
return result;
}
6.使用MyBatisPlus的removeId放法進行删除操作
/***
* 根據id删除資訊
* @param id
* @return
*/
@GetMapping("deleteById")
public Map<String,Object> deleteById(@RequestParam("id") Integer id){
boolean isDel = sysUserService.removeById(id);
if (isDel){
result.put("code",ResultMessageConstant.MESSAGE_SUCCESS_200);
result.put("success",true);
result.put("msg", ResultMessageConstant.MESSAGE_DEL_SUCCESS);
}
return result;
}
7.使用MyBatisPlus的removeByIds方法進行批量删除
/***
* MyBatisPlus 批量删除
* @param id
* @return
*/
@GetMapping("deleteByIds")
public Map<String,Object> deleteByIds(@RequestParam("id") String id){
List<String> idList = Arrays.asList(id.split(","));
boolean isDel = this.sysUserService.removeByIds(idList);
if (isDel){
result.put("code",ResultMessageConstant.MESSAGE_SUCCESS_200);
result.put("success",true);
result.put("msg", ResultMessageConstant.MESSAGE_DEL_SUCCESS);
}
return result;
}
8.使用自定義的批量删除方法
8.1controller
/***
* 自定義SQL 批量删除
* @param id
* @return
*/
@GetMapping("deleteBatch")
public Map<String,Object> deleteBatch(@RequestParam("id") String id){
List<String> idList = Arrays.asList(id.split(","));
this.sysUserService.deleteBatchByIds(idList);
result.put("code",ResultMessageConstant.MESSAGE_SUCCESS_200);
result.put("success",true);
result.put("msg", ResultMessageConstant.MESSAGE_DEL_SUCCESS);
return result;
}
8.2 Service層
/**
* 自定義SQL 批量删除
* @param idList
*/
@Async//Spring 的異步注解
//異步執行
//使用此注解需要在 啟動類上開啟 @EnableScheduling
void deleteBatchByIds(List<String> idList);
8.2.1ServiceImpl(業務實作層)
@Override
public void deleteBatchByIds(List<String> idList) {
sysUserMapper.deleteBatchByIds(idList);
}
8.3Dao(Mapper)層
/**
* 通過 id 集合批量删除
* @param idList
*/
void deleteBatchByIds(@Param("idList") List<String> idList);
8.3.1xml映射
<!--通過id 集合批量删除-->
<delete id="deleteBatchByIds" parameterType="java.lang.String">
delete from `sys_user`
<where>
<if test="idList !=null and idList.size() > 0">
id in
<foreach collection="idList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</where>
</delete>