SpringBoot SSMP项目搭建保姆级教程

一、SpringBoot项目创建

  1. Idea中创建New Project,选择Spring Initializr,输入Name、Location、JDK等,下一步。
    SpringBoot SSMP项目搭建保姆级教程_第1张图片
  2. 选择合适的 SpringBoot 版本,点击创建。
    SpringBoot SSMP项目搭建保姆级教程_第2张图片
    此时,SpringBoot基础项目已经创建完毕。

二、Entity 开发

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

            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
  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;
    
    }
    
    

三、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>
    
  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> {
    }
    

    接口BaseMapper中默认提供了各种增删改查常用方法,继承后即可直接使用。
    SpringBoot SSMP项目搭建保姆级教程_第3张图片

  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运行日志
    

    mybatisplus提供了通过配置的形式就可以查阅执行期SQL语句,配置 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 会将生成 SQL与执行结果输出到控制台,也可选择其提供的各种输出方式。
    SpringBoot SSMP项目搭建保姆级教程_第4张图片

  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);
    }
}

2、分页查询

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

SpringBoot SSMP项目搭建保姆级教程_第5张图片
创建 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);
    }
}

但对于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;
    }

}

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

SpringBoot SSMP项目搭建保姆级教程_第6张图片

总结

  • 使用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);
    }
}

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

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);
    }
}

SpringBoot SSMP项目搭建保姆级教程_第7张图片

四、Service 开发

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

SpringBoot SSMP项目搭建保姆级教程_第8张图片

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);
    }
}

五、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;
    
}

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);
    }
}

你可能感兴趣的:(spring,boot,后端,java)