• SpringBoot+Mybatis+CRUD项目


    一、项目要求

    • 创建一个 SpringBoot 项目,项目名”week11_学号”;
    • 使用 Mybatis 框架,也可以时可用 MybatisPlus 框架;
    • 访问 myschool 数据库;对 student 表进行操作,向 student 插入自己的一条记录,自行设计完成 CRUD操作;
    • 创建相应的 Pojo 层、Mapper 层、Service 层、Controller 层;
    • 在各层中,创建针对 student 表操作的类或接口;
    • 对 stuentController 设置一级和二级对外访问虚拟路径;
    • 启动服务器,测试控制器中的方法,直接将 CRUD 操作结果在后台打印出来;
    • 将运行结果截图,保存在 word 文档中。

    二、下载Postman接口测试工具

    postman可以很好的模拟浏览器并向API发送Request请求,所以一起来下载一下…
    Postman下载地址
    请添加图片描述
    下载好后,注册账户,就可以开始用了,具体使用方法后面测试时讲

    三、实验内容

    1、jsp技术

    Jsp和serlvet是开发动态web的一门技术,特别擅长开发B/S架构的程序,jsp和html文件相似。但是,SpringBoot不推荐使用JSP,所以如果想在SpringBoot中使用JSP,需要自己做一些配置。

    2、Servlet技术

    Servlet本质上就是Java类,但要遵循Servlet规范进行编写,它的创建、调用、销毁都由Servlet容器进行管理(如Tomcat,Jetty, WebLogic Server, JBoss等)。

    3、MVC框架

    在企业级Web项目开发中,标准的三层架构包括:表现层、业务层、数据访问层(持久层)。三层架构中,每一层各司其职,其中:

    • 表现层(UI)
    • 业务层(Service)
    • 数据访问层(持久层)
      请添加图片描述

    MVC

    • 模型(Model)
    • 控制器(Controller)
    • 视图(View)

    4、页面向控制器传递参数

    • 基本类型和 String 类型
    • POJO 类型参数,即实体类
    • 数组,集合类型参数
    • json 格式数据 (非常重要!!!后面在postman里要选择json)

    5、SpringMVC 中常用注解小结

    @Controller
    //作用:修饰类,一个类被它修饰,就成了控制器类,负责接收和处理 HTTP 请求,可以返回页面和数据;
    @RestController (@Controller+@ResponseBody 的组合注解)
    //作用:修饰类,一个类被它修饰,就成了控制器类,只返回给用户数据,默认将返回的对象数据转换为 json 格式
    
    @RequestMapping
    //作用:负责 URL 的路由映射,建立请求 URL 和处理请求方法之间的对应关系,可以修饰类或类中的方法
    @RequestParam 
    //作用:将请求参数绑定到控制器的方法参数上,接收的参数来自http请求体或请求的url的QueryString
    @RequestBody
    //该注解主要用来接收前端传递给后端的 json 字符串中的数据(请求体中的数据的)。
    @PathVaraible
    //作用:处理动态URL,URL的值可以作为控制器中处理方法的参数,主要用于RestFul风格中
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    四、完整代码

    1、配置文件

    application.yml
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/myschool?serverTimezone=Hongkong?characterEncoding=utf8&serverTimezone=GMT%2B8
        username: root
        password: 密码
    
    mybatis:
      mapper-locations: classpath:com/exmaple/mapper/*.xml    #指定sql配置文件的位置
      type-aliases-package: com.example.pojo      #指定实体类所在的包名
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   #输出SQL命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    pom.xml
    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.7.5</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>week11_20201000000</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>week11_20201000000</name>
        <description>week11_20201000000</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.2</version>
            </dependency>
    
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml
                    
                
                
                    src/main/resources
                    
                        **.*
                    
                
            
    
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    
                        
                            
                                org.projectlombok
                                lombok
                            
                        
                    
                
            
        
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    2、代码

    Student.java
    package com.example.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    @Data
    @NoArgsConstructor //自动生成无参构造函数
    @AllArgsConstructor
    public class Student {
        private Long id;
        private String sname;
        private String dept;
        private int age;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    StudentMapper.java
    package com.example.mapper;
    
    import com.example.pojo.Student;
    
    import java.util.List;
    import java.util.Map;
    
    public interface StudentMapper {
        //1
        public List<Student> getAllStudentMap();
    
        //2
        public Student getStudentById(Long id);
    
        //3更新用户信息
        public int updateStudentByDynam(Map<Object,Object> mp);
    
        //4
        public int addStudent(Student student);
    
        //5
        public int deleteStudentById(Long id);
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    StudentMapper.xml
    <?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.example.mapper.StudentMapper">
    
    	<!--1	-->
    	<select id="getAllStudentMap" resultType="Student">
    		SELECT * FROM student
    	</select>
    
    	<!--2	-->
    	<select id="getStudentById" resultType="Student" parameterType="Long">
    		SELECT * FROM student WHERE id=#{0}
    	</select>
    
    	<!--3	-->
    	<update id="updateStudentByDynam"  parameterType="Map">
    		update student
    		<set>
    			<if test="sname!=null">
    				sname=#{sname},
    			</if>
    			<if test="dept!=null">
    				dept=#{dept},
    			</if>
    			<if test="age!=null">
    				age=#{age},
    			</if>
    			id=#{id}
    		</set>
    		where id=#{id}
    	</update>
    
    	<!--4	-->
    	<insert id="addStudent" parameterType="Student">
    		INSERT INTO student SET sname=#{sname},dept=#{dept},age=#{age}
    	</insert>
    
    	<!--5	-->
    	<delete id="deleteStudentById" parameterType="Long">
    		DELETE FROM student
    		where id=#{id}
    	</delete>
    
    </mapper>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    StudentService.java
    package com.example.service;
    
    import com.example.pojo.Student;
    import java.io.IOException;
    import java.util.List;
    import java.util.Map;
    
    public interface StudentService {
    
            //1
            public List<Student> getAllStudentMap();
    
            //2
            public Student getStudentById(Long id);
    
            //3更新用户信息
            public int updateStudentByDynam(Map<Object,Object> mp);
    
            //4
            public int addStudent(Student student);
    
            //5
            public int deleteStudentById(Long id);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    StudentServiceImpl.java
    package com.example.service.impl;
    
    
    import com.example.mapper.StudentMapper;
    import com.example.pojo.Student;
    import com.example.service.StudentService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.io.IOException;
    import java.util.List;
    import java.util.Map;
    
    @Service
    public class StudentServiceImpl implements StudentService {
    
        @Autowired
        private StudentMapper studentMapper;
    
        //根据id查询
        @Override
        public Student getStudentById(Long id){
            return studentMapper.getStudentById(id);
        }
    
        //根据id修改用户信息
        @Override
        public int updateStudentByDynam(Map<Object,Object> mp) {
            return studentMapper.updateStudentByDynam(mp);
        }
    
        @Override
        public int deleteStudentById(Long id){
            return studentMapper.deleteStudentById(id);
        }
    
        //查询用户
        public List<Student> getAllStudentMap() {
            return studentMapper.getAllStudentMap();
        }
    
        public int addStudent(Student student) {
            return studentMapper.addStudent(student);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    StudentController.java
    package com.example.controller;
    
    import com.example.pojo.Student;
    import com.example.service.StudentService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.io.IOException;
    import java.util.List;
    import java.util.Map;
    
    @RestController
    @RequestMapping(value = "/student")
    public class StudentController {
        @Autowired
        private StudentService studentService;
    
        @RequestMapping(value = "/getAllStudent",method = RequestMethod.GET)
        public List<Student> getAllStudent(){
            List<Student> studentList = studentService.getAllStudentMap();
            System.out.println("test");
            return studentList;
        }
    
    
        @RequestMapping(value = "/findStudentById",method =RequestMethod.GET)
        public Student findStudentById(Long id) throws IOException {
            Student studentById = studentService.getStudentById(id);
            System.out.println(studentById);
            return studentById;
    
        }
    
    
        @RequestMapping(value = "/addStudent",method = RequestMethod.POST)
        public int addStudent(Student student) {
            System.out.print(student);
            int num=studentService.addStudent(student);
            System.out.println(num);
            return num;
        }
    
    
        @RequestMapping(value = "/updateStudentByDynam",method =RequestMethod.POST)
        public int updateStudentByDynam(@RequestBody Map<Object,Object> mp){
            System.out.println("mp: ");
            System.out.println(mp);
            int row = studentService.updateStudentByDynam(mp);
            System.out.println(row);
            return row;
        }
    
        @RequestMapping(value = "/deleteStudentById",method =RequestMethod.POST)
        public int deleteStudentById(Long id){
            System.out.println("id: "+id);
            return studentService.deleteStudentById(id);
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    Week1120201000000Application.java
    package com.example;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan(basePackages ="com.example.mapper")
    public class Week1120201000000Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Week1120201000000Application.class, args);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    五、运行结果

    1、postman使用

    选择+输入+Key
    点击Send
    查看运行结果
    请添加图片描述

    2、localhost:8080/student/getAllStudent

    在这里插入图片描述
    在这里插入图片描述

    3、localhost:8080/student/findStudentById?id=20201001111

    在这里插入图片描述

    在这里插入图片描述

    4、localhost:8080/student/addStudent?sname=addtest&dept=depttest&age=10

    在这里插入图片描述
    在这里插入图片描述
    用getAllStudent()查一下
    在这里插入图片描述

    5、localhost:8080/student/updateStudentByDynam

    {
        "id":20201005591,
        "sname": "updatetest",
        "dept": "updatetest"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    在这里插入图片描述

    6、localhost:8080/student/deleteStudentById?id=20201005564

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    最后,部分代码参考自大佬的软件工程综合实践课程第十一周作业( SpringBoot整合Mybatis完成CRUD操作并使用接口调试工具对接口进行测试)

  • 相关阅读:
    程序员属于什么阶级?上升空间如何?
    VL53L5CX驱动开发(4)----运动指示器
    frp使用oidc认证和搭建
    【MySQL】一文带你理解索引事务及其原理
    Nvidia GPU 入门教程之 07 TensorFlow MNiST GPU A100(教程含源码)
    RabbitMQ入门基础篇
    2022.11.25Dungeon Master POJ - 2251
    Panda3d 场景管理
    数据预处理—滑动窗口采样数据
    【Java 基础篇】Java实现文件搜索详解
  • 原文地址:https://blog.csdn.net/weixin_51293984/article/details/127793113