javascript
SpringBoot后台搭建-创建restful接口,使用mybatisPlus实现分页
1、創(chuàng)建一個父類工程
1、刪除src文件夾,并引入pom文件
<!-- springboot依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.0.RELEASE</version></parent><!--依賴版本管理--><properties><mybatis-plus.version>3.3.2</mybatis-plus.version><druid.version>1.1.21</druid.version><fastjson.version>1.2.8</fastjson.version><commons-lang.version>2.6</commons-lang.version><commons-collections.version>3.2.2</commons-collections.version><commons-io.version>2.6</commons-io.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- Java版本號--><java.version>1.8</java.version></properties><!--實際依賴--><dependencies><!--mybatis-plus啟動器--><!-- mybatis PLus是對Mybatis進行封裝 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--生成setter,getter--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--druid連接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><!--Spring Seucrity 加密模塊--><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-crypto</artifactId></dependency><!-- yml配置處理器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!-- 工具類依賴 --><!-- 阿里巴巴的Json轉(zhuǎn)化工具--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!-- 對基本數(shù)據(jù)類型的包裝的工具類--><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>${commons-lang.version}</version></dependency><!-- 集合的工具處理--><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>${commons-collections.version}</version></dependency><!-- 文件io處理--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency></dependencies>2、創(chuàng)建一個子工程(存放工具類)
創(chuàng)建一個子工程jhj-member-util,這個工程的作用是裝一些工具類
右擊父工程——>new——>Module(創(chuàng)建子類工程)
一、添加日志信息
在jhj-member-util工程的resources下面添加logback.xml文件
xml信息如下
二、添加restful工具類
創(chuàng)建com.jhj.member.base包,下面創(chuàng)建一個ResultEnum 構(gòu)造器,
@Getter ——創(chuàng)建getter 方法,下面Lombok 介紹了這個
@AllArgsConstructor ——這個Lombok 里面的添加所有構(gòu)造器的方法
在創(chuàng)建的base包下面創(chuàng)建Result類
package com.jhj.member.base;import com.alibaba.fastjson.JSON;import lombok.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.io.Serializable;/*** @program: jhjmember* @ClassName Result* @description:* @author:蔣皓潔* @create: 2020-08-04 20:07* @Version 1.0**/ //返回結(jié)果 // implements Serializable 實現(xiàn)一下序列化接口 // 統(tǒng)一進行管理響應(yīng)的數(shù)據(jù) @Data public class Result implements Serializable {private static final Logger logger = LoggerFactory.getLogger(Result.class);/*** 因為下面引入是靜態(tài)的*/private static final long serialVersionUID = 1L;/*** 響應(yīng)業(yè)務(wù)狀態(tài)碼*/private Integer code;/*** 是否正常*/private Boolean flag;/*** 響應(yīng)信息*/private String message;/*** 響應(yīng)中的數(shù)據(jù)* 第三章 Api 接口模塊搭建 mengxuegu-member-api*/private Object data;public Result(Integer code, String message, Object data) {this.code = code;this.message = message;this.data = data;this.flag = code == ResultEnum.SUCCESS.getCode() ? true : false;}public static Result ok() {return new Result(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getDesc(),null);}public static Result ok(Object data) {return new Result(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getDesc(),data);}public static Result ok(String message, Object data) {return new Result(ResultEnum.SUCCESS.getCode(), message, data);}public static Result error(String message) {logger.debug("返回錯誤:code={}, message={}", ResultEnum.ERROR.getCode(), message);return new Result(ResultEnum.ERROR.getCode(), message, null);}public static Result build(int code, String message) {logger.debug("返回結(jié)果:code={}, message={}", code, message);return new Result(code, message, null);}public static Result build(ResultEnum resultEnum) {logger.debug("返回結(jié)果:code={}, message={}", resultEnum.getCode(),resultEnum.getDesc());return new Result(resultEnum.getCode(), resultEnum.getDesc(), null);}public String toString() {return JSON.toJSONString(this);} }3、Lombok 介紹
官方網(wǎng)址: https://www.projectlombok.org/features/all
Lombok 工具提供一系列的注解,使用這些注解可以不用定義getter、setter、equals、構(gòu)造方法等,可以消除
java代碼的臃腫,它會在編譯時在字節(jié)碼文件自動生成這些通用的方法,簡化開發(fā) 人員的工作。
@Getter 生成 getter 方法。
@Setter 生成 setter 方法。
@ToString 生成 toString 方法。
@NoArgsConstructor 生成無參構(gòu)造方法。
@AllArgsConstructor 生成包含所有屬性的構(gòu)造方法。
@RequiredArgsConstructor 會一個包含常量,和標識了NotNull的變量的構(gòu)造方法。生成的構(gòu)造方法是私有
的private。
主要使用 @NoArgsConstructor 和 @AllArgsConstructor 兩個注解,這樣就不需要自己寫構(gòu)造方法,代碼簡
潔規(guī)范。
@Data 生成setter 、getter 、toString 、hashCode 、equals 和 @RequiredArgsConstructor 實現(xiàn)方
法。
@Accessors(chain = true) 生成的 setter 方法返回當前對象,如下:
類上加了 @Accessors(chain = true) ,對應(yīng)生成的 setter 方法有返回值 this , 如下:
類上沒加 @Accessors(chain = true) ,void 無返回值,如下:
public void setName(String name) { this.name = name; }4、創(chuàng)建一個子工程(存放api)
創(chuàng)建jhj- member-api的子工程一、創(chuàng)建jhj- member-api工程的啟動類
創(chuàng)建com.jhj.member包下面創(chuàng)建MemberApplication 啟動類
二、創(chuàng)建mybatisPlus的工具類
com.jhj.member文件夾下面創(chuàng)建config文件夾,并創(chuàng)建MybaitisPlusConfig類,用于整合mybatis插件配置
參考mybatisPlus官網(wǎng)
https://baomidou.com/guide/page.html
下面是整合mybatisPlus的分頁插件
三、創(chuàng)建實體類Member
其中注意的幾點
1、@Accessors(chain = true),set方法有返回值
2、@Data、生成setter 、getter 、toString 、hashCode 、equals 和 @RequiredArgsConstructor 實現(xiàn)方法。
3、@TableName("")里面放數(shù)據(jù)庫的表名稱
4、@TableId(value = “id”, type = IdType.AUTO)
private Integer id;//TableId放在id上面,IdType.AUTO實現(xiàn)ID自增
5、Member implements Serializable 中Member 實現(xiàn)序列化接口,方便遠程調(diào)用
四、創(chuàng)建mapper數(shù)據(jù)庫連接層
com.jhj.member文件夾下面創(chuàng)建mapper文件夾,并在該文件夾下創(chuàng)建xml文件夾(用于存放xml文件)
在mapper文件夾下面,創(chuàng)建MemberMapper 類,
接口繼承 MybatisPlus的BaseMapper泛型,這個里面封裝了單表的增刪改查的方法
在xml文件夾下面創(chuàng)建MemberMapper.xml文件,并namespace后引入com.jhj.member.mapper.MemberMapper
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.jhj.member.mapper.MemberMapper"></mapper>五、更改jhj- member-api工程的pom文件夾
加入的依賴如下
引入jhj-member-util工具工程
<dependency><groupId>com.jhj</groupId><artifactId>jhj-member-util</artifactId><version>1.0-SNAPSHOT</version></dependency>加入web啟動器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>指定啟動類
<plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.jhj.member.MemberApplication</mainClass></configuration></plugin></plugins>下面這個關(guān)鍵!!
將原本xml文件目錄替換,本來指定的xml文件存放目錄在src/main/resources下面
現(xiàn)在存放在mapper的xml文件夾下面,目錄改變,所以這個配置一定要加上
六、添加application.yml文件
server:port: 6666# 數(shù)據(jù)源配置 spring:datasource:username: rootpassword: rooturl: jdbc:mysql://127.0.0.1:3306/mxg_member?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8#mysql8版本以上驅(qū)動包指定新的驅(qū)動類driver-class-name: com.mysql.cj.jdbc.Driver# 數(shù)據(jù)源其他配置, 在 DruidConfig配置類中手動綁定initialSize: 8minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALmybatis-plus:# 掃描實體類所在的包,這樣在mapper.xml文件中就不用配置實體類全路徑,直接寫類名就行type-aliases-package: com.jhj.member.entity# 掃描xml包下面的xml文件mapper-locations: classpath:com/jhj/member/mapper/xml/**.xml# 配置日志級別logging:level:com.jhj.member.mapper: debug #打印sql的日志信息添加mybatisplus的配置,
mybatis-plus:# 掃描實體類所在的包,這樣在mapper.xml文件中就不用配置實體類全路徑,直接寫類名就行type-aliases-package: com.jhj.member.entity# 掃描xml包下面的xml文件mapper-locations: classpath:com/jhj/member/mapper/xml/**.xml打印日志級別
logging:level:com.jhj.member.mapper: debug #打印sql的日志信息七、配置service層實現(xiàn)分頁
在com.jhj.member創(chuàng)建service文件夾,并文件夾下面創(chuàng)建impl文件夾
service文件夾下面創(chuàng)建IMemberService 并繼承IService< Member >
在impl文件夾下面創(chuàng)建MermberServiceImpl 文件,繼承IMemberService 接口,
但是!IMemberService 接口繼承了IService接口,里面包含增刪改查一些接口,這不可能一一去實現(xiàn),所以
繼承ServiceImpl實現(xiàn)父接口里面的方法來實現(xiàn)IService接口的方法。
baseMapper.selectPage接收一個分頁對象和查詢條件
baseMapper是MemberMapper一個實例,可以點進ServiceImpl里面去看、能看到大致下面這樣的
前端傳過來的請求參數(shù)封裝到MemberREQ ,在將MemberREQ 的參數(shù)判斷是否為空,并拼接成查詢條件封裝到query 中
package com.jhj.member.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.jhj.member.base.Page; import com.jhj.member.base.Result; import com.jhj.member.entity.Member; import com.jhj.member.mapper.MemberMapper; import com.jhj.member.req.MemberREQ; import com.jhj.member.service.IMemberService;import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service;/*** @program: jhjmember* @ClassName MermberServiceImpl* @description:* @author:蔣皓潔* @create: 2020-08-05 17:33* @Version 1.0* 繼承ServiceImpl實現(xiàn)父接口里面的方法* 實現(xiàn)IMemberService里面的方法* ServiceImpl是泛型,第一個是mapper的接口,第二個是實體類**/@Service public class MermberServiceImpl extends ServiceImpl<MemberMapper, Member> implements IMemberService {@Overridepublic Result seach(Long page, Long size, MemberREQ req) {QueryWrapper query = new QueryWrapper();if (req != null) {// 判斷入果不是空的則if (StringUtils.isNotBlank(req.getName())) {// query.like進行,模糊查詢的條件拼接query.like("name", req.getName());}if (StringUtils.isNotBlank(req.getCardNum())) {query.like("card_num", req.getCardNum());}//查詢生日if (req.getBirthday() != null) {query.eq("birthday", req.getBirthday());}if (StringUtils.isNotBlank(req.getPayType())) {query.eq("pay_type", req.getPayType());}}// IPage<Member> p封裝一個分頁對象 pIPage<Member> p = new Page<>(page, size);//baseMapper.selectPage接收一個分頁對象和查詢條件// baseMapper是MemberMapper一個實例,可以點進ServiceImpl里面去看、// ServiceImpl<M extends BaseMapper<T>, T>// protected M baseMapper;IPage<Member> data = baseMapper.selectPage(p, query);// 返回data值,并以resultful格式返回return Result.ok(data);} }八、創(chuàng)建請求類,用于接收請求參數(shù)
創(chuàng)建的請求類,接收請求前端傳過來的參數(shù)
九、controller層
1、 @PostMapping("/list/seach/{page}/{size}")分頁查詢采用post方式傳參,
2、 @RequestBody MemberREQ req,采用前端傳參,并將參數(shù)封裝在MemberREQ 這個類中,
十、傳參測試分頁效果
使用postman工具測試
請求方式:post
請求地址:http://127.0.0.1:6666/Member/list/seach/1/3
查詢結(jié)果如下
因為前端接收的為row,而不是records,為了適應(yīng)前端,所以要對page方法做改變
十一、修改page方法,改變返回結(jié)果
在jhj-member util這個子工程(存放工具)的下面的base包下面創(chuàng)建Page類
1、 Page< T>繼承mybatisplus包下面的Page
2、覆寫父類的方法getRecords使得getRecords返回值為null,records值為null
3、復(fù)寫父類Page方法
4、自定義一個getRows()方法,返回super.getRecords();,返回父類getRecords()的值,
5、如果定義的是getRows()方法,則返回rows,如果定義的是getRowws()方法,則返回rowws,
修改引入的page
總結(jié)
以上是生活随笔為你收集整理的SpringBoot后台搭建-创建restful接口,使用mybatisPlus实现分页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java简介与JDK安装
- 下一篇: JS实现浏览器打印、打印预览