• SpringBoot SSMP项目搭建保姆级教程


    一、SpringBoot项目创建

    1. Idea中创建New Project,选择Spring Initializr,输入Name、Location、JDK等,下一步。
      在这里插入图片描述
    2. 选择合适的 SpringBoot 版本,点击创建。
      在这里插入图片描述
      此时,SpringBoot基础项目已经创建完毕。

    二、Entity 开发

    1. 引入 lombok org.projectlombok。Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发,SpringBoot目前默认集成了lombok技术,并提供了对应的版本控制,所以只需要提供对应的坐标即可,在pom.xml中添加lombok的坐标。

              <!--lombok-->
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
              </dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
    2. 创建 entity 目录,在其包下创建对应Entity。 由于已经引入 lombok,实体类上可直接使用 @Data 注解。使用lombok可以通过一个注解@Data 完成一个实体类对应的getter,setter,toString,equals,hashCode等操作的快速添加。

      package com.ty.entity;
      
      import lombok.Data;
      
      @Data
      public class User {
      
          private Integer id;
      
          private String name;
      
          private Integer age;
      
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15

    三、DAO 开发

    1、参数配置与Dao创建

    1. 导入MyBatisPlus 对应的starter mybatis-plus-boot-starter 与 mysql 驱动 mysql-connector-java

              <dependency>
                  <groupId>com.baomidou</groupId>
                  <artifactId>mybatis-plus-boot-starter</artifactId>
                  <version>3.4.3</version>
              </dependency>
      
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>8.0.27</version>
                  <scope>runtime</scope>
              </dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    2. 创建对应mapper包,并创建 DemoMapper接口,由于使用MyBatisPlus技术,使用MP的标准通用接口BaseMapper加速开发,并添加注解 @Mapper 和泛型的指定。

      package com.ty.mapper;
      
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.ty.entity.User;
      import org.apache.ibatis.annotations.Mapper;
      
      @Mapper
      public interface DemoMapper extends BaseMapper<User> {
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      接口BaseMapper中默认提供了各种增删改查常用方法,继承后即可直接使用。
      在这里插入图片描述

    3. application.yml 配置文件中,配置数据库连接相关的数据源配置

      id-type: auto : 设置主键id字段的生成策略为参照数据库设定的策略,当前数据库设置id生成策略为自增。

      table-prefix: XX:设置表名通用前缀。

      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ty
          username: root
          password: 123
      
      mybatis-plus:
        global-config:
          db-config:
            table-prefix: tbl_    #设置表名通用前缀
            id-type: auto     #设置主键id字段的生成策略为参照数据库设定的策略,当前数据库设置id生成策略为自增
        configuration:
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   #输出MP运行日志
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

      mybatisplus提供了通过配置的形式就可以查阅执行期SQL语句,配置 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 会将生成 SQL与执行结果输出到控制台,也可选择其提供的各种输出方式。
      在这里插入图片描述

    4. 创建对应dao包,注入之前创建的demoMapper,即可直接使用MyBatisPlus自带的增删改查。

    package com.ty.dao;
    
    import com.ty.entity.User;
    import com.ty.mapper.DemoMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    @Component
    public class DemoDao {
    
        @Autowired
        private DemoMapper demoMapper;
    
        public void deleteUserById(Integer id){
            demoMapper.deleteById(id);
        }
    
        public void updateUser(User user){
            demoMapper.updateById(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2、分页查询

    Mybatis Plus提供了 selectPage 等分页查询方法。其中selectPage方法需传入一个由MybatisPlus封装分页数据的对象,可以通过new的形式创建这个对象 IPage page = new Page(pageNo, pageSize)

    在这里插入图片描述
    创建 dao包,随后创建 DemoDao 。

    package com.ty.dao;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.ty.entity.User;
    import com.ty.mapper.DemoMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class DemoDao {
    
        @Autowired
        private DemoMapper demoMapper;
    
        public IPage selectUserByPage(Integer currentPage, Integer pageSize) {
            IPage page = new Page(currentPage,pageSize);
            return demoMapper.selectPage(page, null);
        }
        
        public void deleteUserById(Integer id){
            demoMapper.deleteById(id);
        }
    
        public void updateUser(User user){
            demoMapper.updateById(user);
        }
    }
    
    • 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

    但对于MySQL,分页使用 limit,但其他数据库却不使用 limit。为提升 mybatis plus的兼容性,故将分页操作进行了拦截器形式优化。

    定义mybatis plus 拦截器:
    创建 Interceptor 包,并创建 MybatisPlusInterceptor 拦截器栈。

    package com.ty.interceptor;
    
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MybatisPlusInterceptorConfig {
    
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
            mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            return mybatisPlusInterceptor;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    通过测试类进行验证,此时分页查询已经生效。

    在这里插入图片描述

    总结

    • 使用IPage封装分页数据
    • 分页操作依赖MyBatisPlus分页拦截器实现功能
    • 借助MyBatisPlus日志查阅执行SQL语句

    3、条件查询

    以往我们写条件查询要自己动态拼写复杂的SQL语句,而 mybatis plus 提供有强大的条件查询功能。

    • 通过一个用于封装查询条件的对象QueryWrapper ,该对象可以动态使用API调用的方法添加条件,最终转化成对应的SQL语句。
    • 针对字段检查,mybatis plus 全面支持Lambda表达式,可代替QueryWrapper ,使用LambdaQueryWrapper对象。
    • 为了便于开发者动态拼写SQL,防止将null数据作为条件使用,userLambdaQueryWrapper.like(boolean condition, R column, Object val) 第一个参数Condition 可作为判空验证。
    package com.ty.dao;
    
    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.ty.entity.User;
    import com.ty.mapper.DemoMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    @Component
    public class DemoDao {
    
        @Autowired
        private DemoMapper demoMapper;
    
        public IPage selectUserByPage(Integer currentPage, Integer pageSize) {
            IPage page = new Page(currentPage,pageSize);
            return demoMapper.selectPage(page, null);
        }
    
        public List<User> selectUserByName(String name) {
            LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
            userLambdaQueryWrapper.like(User::getName, name);
            userLambdaQueryWrapper.like(name != null, User::getName, name);
            return demoMapper.selectList(userLambdaQueryWrapper);
        }
        
        public void deleteUserById(Integer id){
            demoMapper.deleteById(id);
        }
    
        public void updateUser(User user){
            demoMapper.updateById(user);
        }
        
        public void insertUser(User user){
            demoMapper.insert(user);
        }
    }
    
    • 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

    通过测试类进行验证,即可直接进行条件查询。

    package com.ty;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.ty.dao.DemoDaoImpl;
    import com.ty.entity.User;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.util.List;
    
    @SpringBootTest
    class SpringbootSsmpDemoApplicationTests {
    
        @Autowired
        private DemoDaoImpl demoDao;
        @Test
        void selectUserByNameTest() {
            List<User> ty = demoDao.selectUserByName("ty");
            System.out.println(ty);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    四、Service 开发

    创建service包,创建 UserService接口与其对应的UserServiceImpl实现类。其中编写业务逻辑,没啥过多可说的。
    注意使用 @Service 注解,将其加入 SpringBoot bean容器中。

    在这里插入图片描述

    package com.ty.service.impl;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.ty.dao.DemoDao;
    import com.ty.entity.User;
    import com.ty.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private DemoDao demoDao;
    
        public List<User> queryUserByName(String name){
            return demoDao.selectUserByName(name);
        }
    
        public IPage queryUserByPage(Integer pageNo, Integer pageSize){
            return demoDao.selectUserByPage(pageNo, pageSize);
        }
    
        public void deleteUserById(Integer id){
            demoDao.deleteUserById(id);
        }
    
        public void updateUser(User user){
            demoDao.updateUser(user);
        }
        
        public void insertUser(User user){
            demoDao.insertUser(user);
        }
    }
    
    • 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

    五、Controller 开发

    继续创建 controller 包,创建基本的Controller实现类。

    注意引入 @RestController@RequestMapping("/user") 注解,将该Controller注入 Springboot bean容器中,并设置通用访问 url 为 /user

    package com.ty.controller;
    
    import com.ty.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Restful接口开发

    修改使用 @PutMapping,Post请求使用 @PostMapping, 删除使用 @DeleteMapping,Get请求使用 @GetMapping

    package com.ty.controller;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.ty.entity.User;
    import com.ty.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @GetMapping("{name}")
        public List<User> getUserById(@PathVariable String name){
            return userService.queryUserByName(name);
        }
    
        @DeleteMapping("{id}")
        public void deleteUserById(@PathVariable Integer id){
            userService.deleteUserById(id);
        }
        
        /**
         * GET请求传递路径变量,后台实用@PathVariable接收数据**
         * @param pageNo
         * @param pageSize
         * @return
         */
        @GetMapping("{pageNo}/{pageSize}")
        public IPage<User> getUserByPage(@PathVariable Integer pageNo,@PathVariable Integer pageSize){
            return userService.queryUserByPage(pageNo, pageSize);
        }
    
        @PutMapping
        public void updateUser(@RequestBody User user){
            userService.updateUser(user);
        }
        
        /**
         * 实体数据:@RequestBody
         * @param user
         */
        @PostMapping
        public void addUser(@RequestBody User user){
            userService.insertUser(user);
        }
    }
    
    
    • 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
  • 相关阅读:
    xv6-x86在ubuntu14.04 i386下正常编译、调试,在ubuntu23.04下编译各种报错--google镜像
    教你如何使用云服务器搭建我的世界Minecraft服务器(超级简单-10分钟完成)
    华为昇腾云平台适配Baichuan2大模型记录
    Mybatis的分页和动态sql
    win10可以安装CW_MCUs_V6_3吗?求指教
    【Linux基础】2.2 运行级别、找回root密码、帮助、文件目录、查看文件,重定向,查看历史指令
    2018年亚太杯APMCM数学建模大赛B题人才与城市发展求解全过程文档及程序
    期货突破(期货突破交易法)
    Spring Boot学习笔记
    [SpringMVC笔记] SpringMVC-13-表现层与前端数据传输数据协议实现
  • 原文地址:https://blog.csdn.net/weixin_41422086/article/details/133889364