在线教育2--后端开发CRUD

思路分析
增删改查 前后端分离
1 首先 想要实现增删改查 那么数据库是资料是不可少的 明确要对哪些表,列,属性进行crud
2 创建项目的结构
》创建父工程一般为springboot工程(管理依赖版本和放公共依赖)
》创建子模块一般为maven工程

父工程 用来管理依赖 和版本的 我们导入相关要求的依赖
(注意 遇到个问题 中午创建的application.properties 没有叶子 原因是 过早创建了 需要把依赖引进来先 再创建application.properties)

工程截图
注意看层级

父工程依赖示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <modules>
        <module>service</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mumu</groupId>
    <artifactId>edu-parent</artifactId>
    <packaging>pom</packaging>

    <version>0.0.1-SNAPSHOT</version>
    <name>edu-parent</name>
    <description>Demo project for Spring Boot</description>


    <properties>

        <java.version>11</java.version>

        <guli.version>0.0.1-SNAPSHOT</guli.version>

        <mybatis-plus.version>3.0.5</mybatis-plus.version>

        <velocity.version>2.0</velocity.version>

        <swagger.version>2.7.0</swagger.version>

        <aliyun.oss.version>2.8.3</aliyun.oss.version>

        <jodatime.version>2.10.1</jodatime.version>

        <poi.version>3.17</poi.version>

        <commons-fileupload.version>1.3.1</commons-fileupload.version>

        <commons-io.version>2.6</commons-io.version>

        <httpclient.version>4.5.1</httpclient.version>

        <jwt.version>0.7.0</jwt.version>

        <aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version>

        <aliyun-sdk-oss.version>3.1.0</aliyun-sdk-oss.version>

        <aliyun-java-sdk-vod.version>2.15.2</aliyun-java-sdk-vod.version>

        <aliyun-java-vod-upload.version>1.4.11</aliyun-java-vod-upload.version>

        <aliyun-sdk-vod-upload.version>1.4.11</aliyun-sdk-vod-upload.version>

        <fastjson.version>1.2.28</fastjson.version>

        <gson.version>2.8.2</gson.version>

        <json.version>20170516</json.version>

        <commons-dbutils.version>1.7</commons-dbutils.version>

        <canal.client.version>1.1.0</canal.client.version>

        <docker.image.prefix>zx</docker.image.prefix>

        <cloud-alibaba.version>0.2.2.RELEASE</cloud-alibaba.version>

    </properties>

    <dependencyManagement>

        <dependencies>

            <!--Spring Cloud-->

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Hoxton.RELEASE</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-alibaba-dependencies</artifactId>

                <version>${cloud-alibaba.version}</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

            <!--mybatis-plus 持久层-->

            <dependency>

                <groupId>com.baomidou</groupId>

                <artifactId>mybatis-plus-boot-starter</artifactId>

                <version>${mybatis-plus.version}</version>

            </dependency>

            <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->

            <dependency>

                <groupId>org.apache.velocity</groupId>

                <artifactId>velocity-engine-core</artifactId>

                <version>${velocity.version}</version>

            </dependency>

            <!--swagger-->

            <dependency>

                <groupId>io.springfox</groupId>

                <artifactId>springfox-swagger2</artifactId>

                <version>${swagger.version}</version>

            </dependency>

            <!--swagger ui-->

            <dependency>

                <groupId>io.springfox</groupId>

                <artifactId>springfox-swagger-ui</artifactId>

                <version>${swagger.version}</version>

            </dependency>

            <!--aliyunOSS-->

            <dependency>

                <groupId>com.aliyun.oss</groupId>

                <artifactId>aliyun-sdk-oss</artifactId>

                <version>${aliyun.oss.version}</version>

            </dependency>

            <!--日期时间工具-->

            <dependency>

                <groupId>joda-time</groupId>

                <artifactId>joda-time</artifactId>

                <version>${jodatime.version}</version>

            </dependency>

            <!--xls-->

            <dependency>

                <groupId>org.apache.poi</groupId>

                <artifactId>poi</artifactId>

                <version>${poi.version}</version>

            </dependency>

            <!--xlsx-->

            <dependency>

                <groupId>org.apache.poi</groupId>

                <artifactId>poi-ooxml</artifactId>

                <version>${poi.version}</version>

            </dependency>

            <!--文件上传-->

            <dependency>

                <groupId>commons-fileupload</groupId>

                <artifactId>commons-fileupload</artifactId>

                <version>${commons-fileupload.version}</version>

            </dependency>

            <!--commons-io-->

            <dependency>

                <groupId>commons-io</groupId>

                <artifactId>commons-io</artifactId>

                <version>${commons-io.version}</version>

            </dependency>

            <!--httpclient-->

            <dependency>

                <groupId>org.apache.httpcomponents</groupId>

                <artifactId>httpclient</artifactId>

                <version>${httpclient.version}</version>

            </dependency>

            <dependency>

                <groupId>com.google.code.gson</groupId>

                <artifactId>gson</artifactId>

                <version>${gson.version}</version>

            </dependency>

            <!-- JWT -->

            <dependency>

                <groupId>io.jsonwebtoken</groupId>

                <artifactId>jjwt</artifactId>

                <version>${jwt.version}</version>

            </dependency>

            <!--aliyun-->

            <dependency>

                <groupId>com.aliyun</groupId>

                <artifactId>aliyun-java-sdk-core</artifactId>

                <version>${aliyun-java-sdk-core.version}</version>

            </dependency>

            <dependency>

                <groupId>com.aliyun.oss</groupId>

                <artifactId>aliyun-sdk-oss</artifactId>

                <version>${aliyun-sdk-oss.version}</version>

            </dependency>

            <dependency>

                <groupId>com.aliyun</groupId>

                <artifactId>aliyun-java-sdk-vod</artifactId>

                <version>${aliyun-java-sdk-vod.version}</version>

            </dependency>

            <dependency>

                <groupId>com.aliyun</groupId>

                <artifactId>aliyun-java-vod-upload</artifactId>

                <version>${aliyun-java-vod-upload.version}</version>

            </dependency>

            <dependency>

                <groupId>com.aliyun</groupId>

                <artifactId>aliyun-sdk-vod-upload</artifactId>

                <version>${aliyun-sdk-vod-upload.version}</version>

            </dependency>

            <dependency>

                <groupId>com.alibaba</groupId>

                <artifactId>fastjson</artifactId>

                <version>${fastjson.version}</version>

            </dependency>

            <dependency>

                <groupId>org.json</groupId>

                <artifactId>json</artifactId>

                <version>${json.version}</version>

            </dependency>


            <dependency>

                <groupId>commons-dbutils</groupId>

                <artifactId>commons-dbutils</artifactId>

                <version>${commons-dbutils.version}</version>

            </dependency>

            <dependency>

                <groupId>com.alibaba.otter</groupId>

                <artifactId>canal.client</artifactId>

                <version>${canal.client.version}</version>

            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.2.14.RELEASE</version>
            </dependency>

        </dependencies>

    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

子模块依赖示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>edu-parent</artifactId>
        <groupId>com.mumu</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>service_edu</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>





    <!--        <dependency>-->
    <!--            <groupId>com.mumu</groupId>-->
    <!--            <artifactId>common_untils</artifactId>-->
    <!--            <version>0.0.1-SNAPSHOT</version>-->
    <!--        </dependency>-->

    <!--        <dependency>-->

    <!--            <groupId>org.springframework.cloud</groupId>-->

    <!--            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>-->

    <!--        </dependency>-->

    <!--hystrix依赖,主要是用  @HystrixCommand -->

    <!--        <dependency>-->

    <!--            <groupId>org.springframework.cloud</groupId>-->

    <!--            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>-->

    <!--        </dependency>-->


    <!--服务注册-->

    <!--        <dependency>-->

    <!--            <groupId>org.springframework.cloud</groupId>-->

    <!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->

    <!--        </dependency>-->

    <!--服务调用-->

    <!--        <dependency>-->

    <!--            <groupId>org.springframework.cloud</groupId>-->

    <!--            <artifactId>spring-cloud-starter-openfeign</artifactId>-->

    <!--        </dependency>-->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>


    <!--mybatis-plus-->

    <dependency>

        <groupId>com.baomidou</groupId>

        <artifactId>mybatis-plus-boot-starter</artifactId>

    </dependency>


    <!--mysql-->

    <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

    </dependency>

    <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->

    <dependency>

        <groupId>org.apache.velocity</groupId>

        <artifactId>velocity-engine-core</artifactId>

    </dependency>

    <!--swagger-->

    <dependency>

        <groupId>io.springfox</groupId>

        <artifactId>springfox-swagger2</artifactId>

    </dependency>

    <dependency>

        <groupId>io.springfox</groupId>

        <artifactId>springfox-swagger-ui</artifactId>

    </dependency>

    <!--lombok用来简化实体类:需要安装lombok插件-->

    <dependency>

        <groupId>org.projectlombok</groupId>

        <artifactId>lombok</artifactId>

    </dependency>

    <!--xls-->

    <dependency>

        <groupId>org.apache.poi</groupId>

        <artifactId>poi</artifactId>

    </dependency>

    <dependency>

        <groupId>org.apache.poi</groupId>

        <artifactId>poi-ooxml</artifactId>

    </dependency>

    <dependency>

        <groupId>commons-fileupload</groupId>

        <artifactId>commons-fileupload</artifactId>

    </dependency>

    <!--httpclient-->

    <dependency>

        <groupId>org.apache.httpcomponents</groupId>

        <artifactId>httpclient</artifactId>

    </dependency>

    <!--commons-io-->

    <dependency>

        <groupId>commons-io</groupId>

        <artifactId>commons-io</artifactId>

    </dependency>

    <!--gson-->

    <dependency>

        <groupId>com.google.code.gson</groupId>

        <artifactId>gson</artifactId>

    </dependency>

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.12</version>

    </dependency>





</dependencies>

</project>

配置好依赖后 开始建子子模块 垒代码了
首先 创建applicatio.properties 文件
注意 文件的数据库连接要与要操作的库相对应

# 服务端口
server.port=8001
# 服务名
spring.application.name=service-edu
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/guli_edu?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=0218
#mybatis日志

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

注意点

然后 开始编写相关的业务代码
但是 在实际的开发中 这种代码很可能都是用代码生成器来写的 直接给我们搭建好框架

代码生成器 一般放在test的 那个绿色的java处 作为测试类来使用 因为打包的时候 不需要它 所以 直接用一次就丢的
注意一些要改的地方 根据自己的实际情况

生成后 分析它的结构
有controller层 service层 实体类的entity层 还有对数据库的持久层mapper(dao)

因为service接口实现了IService接口 所以 我们直接就可以调用它的一些增删改查的方法
serice接口

做法
1 在controller层将接口注入进来

    @Autowired
  private   EduTeacherService eduTeacherService;

查询表中所有数据的操作

package com.mumu.eduservice.controller;


import com.mumu.eduservice.entity.EduTeacher;
import com.mumu.eduservice.service.EduTeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * <p>
 * 讲师 前端控制器
 * </p>
 * @author testjava
 * @since 2021-06-07
 */
@RestController
@RequestMapping("/eduservice/edu-teacher")
public class EduTeacherController {
    @Autowired
  private   EduTeacherService eduTeacherService;
    @GetMapping("/")
    public List sele(){
       List<EduTeacher> list = eduTeacherService.list(null);
        list.forEach(System.out::println);
        return list;
    }
}

查询的结果发现 时间格式不对
去配置文件中 添加时间格式

#配置全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

讲师删除功能 逻辑删除
1 添加逻辑删除插件

   /**
     * 逻辑删除插件
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

2 在实体类中的逻辑删除属性中 添加逻辑注解

 @ApiModelProperty(value = "逻辑删除 1(true)已删除, 0(false)未删除")
    @TableLogic
    private Boolean isDeleted;

3 编写逻辑删除功能

为了测试方便 我们用swagger 做测试整合
做法
1 创建公共模块 导入相关依赖 整合swagger 为了所有模块都能使用


    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

            <scope>provided </scope>

        </dependency>

        <!--mybatis-plus-->

        <dependency>

            <groupId>com.baomidou</groupId>

            <artifactId>mybatis-plus-boot-starter</artifactId>

            <scope>provided </scope>

        </dependency>

        <!--lombok用来简化实体类:需要安装lombok插件-->

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

            <scope>provided </scope>

        </dependency>

        <!--swagger-->

        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger2</artifactId>

            <scope>provided </scope>

        </dependency>

        <dependency>

            <groupId>io.springfox</groupId>

            <artifactId>springfox-swagger-ui</artifactId>

            <scope>provided </scope>

        </dependency>

        <!-- redis -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-redis</artifactId>

        </dependency>

        <!-- spring2.X集成redis所需common-pool2
41
        <dependency>
42
            <groupId>org.apache.commons</groupId>
43
            <artifactId>commons-pool2</artifactId>
44
            <version>2.6.0</version>
45
        </dependency>-->

    </dependencies>


2 在公共模块中 编写swagger 的配置类方法

package com.mumu.config;


import com.google.common.base.Predicates;
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.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration//配置类
@EnableSwagger2//swagger的注解  表示做Swagger整合
public class SwaggerConfig {
    @Bean
    public Docket webApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
                .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build();
    }
    private ApiInfo webApiInfo(){
        return new ApiInfoBuilder()
                .title("网站-课程中心API文档")
                .description("本文档描述了课程中心微服务接口定义")
                .version("1.0")
                .contact(new Contact("Helen", "http://mumu.com", "55317332@qq.com"))
                .build();
    }
}

3 在需要用到swagger 的地方 引入swagger 所在模块的依赖

      <dependency>
            <groupId>com.mumu</groupId>
            <artifactId>service-base01</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

这样还不够 因为启动类还没去扫描swagger 所以要在启动类 中 加入一个注解 扫描包路径下的相应信息

@ComponentScan(basePackages = {"com.mumu"})

swagger 访问的固定地址
http://localhost:8001/swagger-ui.html
端口号 加 /swagger-ui.html

整合完/swagger 后 我们实际的开发中 都是分工合作的 所以 我们需要统一的返回结果 可以方便前端人员测试之类的
所以需要在公共的模块中 创建一个统一的返回结果 返回的样式由部门决定统一返回什么样的结果
做法
1 在公共模块中 创建专门的模块 创建一个接口 定义成功失败的返回值

package com.mumu.commonutils;

public interface ResultCode {

    public static Integer SUCCESS = 20000;//成功

    public static Integer ERROR = 20001;//失败
}

2 创建四个属性
3 将构造器私有化
4 对外提供一个成功 一个失败方法
5 编写相应的方法
具体代码

package com.mumu.commonutils;


import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

//统一返回结果的类
@Data
public class R {

    @ApiModelProperty(value = "是否成功")
    private Boolean success;

    @ApiModelProperty(value = "返回码")
    private Integer code;

    @ApiModelProperty(value = "返回消息")
    private String message;

    @ApiModelProperty(value = "返回数据")
    private Map<String, Object> data = new HashMap<String, Object>();



    private R(){}


    //成功的 静态方法
    public static R ok(){

        R r = new R();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("成功");
        return r;

    }

    //失败的 静态方法
    public static R error(){

        R r = new R();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("失败");
        return r;

    }


    public R success(Boolean success){
        this.setSuccess(success);
        return this;

    }

    public R message(String message){
        this.setMessage(message);
        return this;

    }

    public R code(Integer code){

        this.setCode(code);

        return this;

    }


    public R data(String key, Object value){

        this.data.put(key, value);

        return this;

    }

    public R data(Map<String, Object> map){

        this.setData(map);

        return this;

    }
}

想要使用统一返回结果 跟swagger一样 将依赖引入到需要用的地方

   <dependency>
            <groupId>com.mumu</groupId>
            <artifactId>common-util</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

改造后 查询 删除的方法 改成了这样

package com.mumu.eduservice.controller;
import com.mumu.R;
import com.mumu.eduservice.entity.EduTeacher;
import com.mumu.eduservice.service.EduTeacherService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author testjava
 * @since 2021-06-07
 */
@RestController
@RequestMapping("/eduservice/edu-teacher")
public class EduTeacherController {
    @Autowired
  private   EduTeacherService eduTeacherService;
    @GetMapping("/")
    public R sele(){
        List<EduTeacher> list = eduTeacherService.list(null);
        list.forEach(System.out::println);
        return R.ok().data("所有",list);
    }
    @ApiOperation(value = "所有讲师列表")
    @DeleteMapping("{id}")
    public R delete(@ApiParam(name = "id", value = "讲师ID", required = true) @PathVariable String id){
        boolean b = eduTeacherService.removeById(id);
            if (b){
                return R.ok();
            }return  R.error();
    }
}

做分页查询
做法
1 配置分页插件

/**
 * 分页插件
 */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

2 编写分页查询的代码
由于分页查询 我们不应该把页数和显示条数写死 所以我们用路径传值的方式 结合注解@
给参数传值
(要根据公司的实际要求来 看需要返回些什么数据 一般都需要return 个 list 和数量 给人家)

    @GetMapping("pageTeacher/{cunm}/{limit}")
    public  R page(@PathVariable long cunm,@PathVariable long limit){

        //  创建page 对象   参数表示  参数1;当前页   参数2;每页记录数
        Page<EduTeacher> page=new Page<>(cunm,limit);

         eduTeacherService.page(page, null);

         //根据公司的文档  看需要返回什么数据 比如记录数 条数什么的
        long total = page.getTotal();
        List<EduTeacher> records = page.getRecords();

        if (page!=null){
            return R.ok().data("total",total).data("list",records);
        }return R.error();

    }

2 编写按条件 分页查询
注意 按条件分页 看开发文档中要求的条件 我们常常将这些条件封装成一个实体类对象 这样方便我们传值
条件的实体类

 //条件查询 带分页方法
//    @ApiOperation(value = "条件查询 带分页方法")
    @PostMapping ("pageTeacherCondition/{current}/{limit}")                        //required = false  表示参数值可以为空
    public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit,@RequestBody(required = false)
            TeacherQuery teacherQuery){

        //创建page对象
        Page<EduTeacher> pageTeacher=new Page<>(current,limit);

        //构建条件
        QueryWrapper wrapper = new QueryWrapper<>();

        String name=teacherQuery.getName();
        Integer level = teacherQuery.getLevel();
        String begin = teacherQuery.getBegin();
        String end = teacherQuery.getEnd();

        //判断条件是否为空
        if (!StringUtils.isEmpty(name)){
            wrapper.like("name",name);
        }
        if (!StringUtils.isEmpty(level)){
            wrapper.eq("level",level);
        }
        if (!StringUtils.isEmpty(begin)){
            wrapper.ge("gmt_create",begin);
        }
        if (!StringUtils.isEmpty(end)){
            wrapper.le("gmt_create",end);
        }

        //排序
        wrapper.orderByDesc("gmt_create");
//        wrapper.orderByAsc()

        //调用方法实现条件查询分页
        eduTeacherService.page(pageTeacher,wrapper);

        long total = pageTeacher.getTotal();// 总记录数

        List<EduTeacher> records = pageTeacher.getRecords();//list 集合
        return R.ok().data("total",total).data("rows",records);
    }

添加功能 注意 由于 我们的数据库表是根据阿里巴巴的样式进行编写的 所以有创建时间 和修改时间 两栏 所以需要我们自己去设置,一旦我们添加数据 那么创建时间的那一栏会自动填充new Data 而修改也是如此
做法
1 在实体类中的创建时间 和修改时间的属性处 添加注解@TableField(fill =


    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间")
    private Date gmtCreate;


    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间")
    private Date gmtModified;

2 在公共模块中创建一个包 包中写个类去实现MetaObjectHandler 接口
用来动态的设置创建时间 和修改时间 这两个值 记得 加@Component 交给spring管理

package com.mumu.common.config.handelr;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyMetaObject implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {

        this.setFieldValByName("gmtCreate",new Date(),metaObject);
        this.setFieldValByName("gmtModified",new Date(),metaObject);


    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified",new Date(),metaObject);
    }
}

编写添加的方法


    @PostMapping("addteacher")
    public  R addTeacher(@RequestBody EduTeacher eduTeacher){

        boolean save = eduTeacherService.save(eduTeacher);

        if (save){
            return R.ok();
        }else  {
            return R.error();
        }


    }


编写根据id查询方法

    @GetMapping("seleid/{id}")
    public R seleById(@PathVariable String id){

        EduTeacher byId = eduTeacherService.getById(id);

        return R.ok().data("id",byId);


    }

编写修改方法

 @PostMapping("update")
    public R update(@RequestBody(required = false) EduTeacher eduTeacher){

        boolean b = eduTeacherService.updateById(eduTeacher);

        if (b=true){
            return  R.ok();
        }return  R.error();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值