SpringBoot整合SSMP小demo

这篇具有很好参考价值的文章主要介绍了SpringBoot整合SSMP小demo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建项目

spring web,mybatis,mysql勾选

加入mp和druid,依赖见SpringBoot基础认识_阳光明媚UPUP的博客-CSDN博客

yml数据源 

server:
  port: 81
spring:
  datasource:
    druid: #整合方式配置
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/jdbc
      username: root
      password: root123

写个数据表,写个domain包实体类。 

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    private Integer id;
    private String name;
    private String price ;//decimal
}

写个mappr包接口@Mapper生成实现类,继承mp 

@Mapper
public interface BookMapper extends BaseMapper<Book> {
}

新增报错

//mybatis-plus默认生成的id的方式为自己自订的雪花算法
//而数据库提供的id自增的方法  yml中配置id自增的方式:设置为auto自增:id-type:auto

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

测试用例

@SpringBootTest
class SpringbootBeginQuickstartApplicationTests {
	@Autowired
	private BookMapper bookMapper;
	@Test
	void contextLoads() {
		System.out.println(bookMapper.selectById(1));
		System.out.println(bookMapper.insert(new Book(null,"ddd","12")));
		System.out.println(bookMapper.updateById(new Book(1,"update","12")));//返回值 成功1,失败0
		System.out.println(bookMapper.deleteById(1)); //成功1,失败0
		System.out.println(bookMapper.selectList(null));
		//mybatis-plus默认生成的id的方式为自己自订的雪花算法
		//而数据库提供的id自增的方法  yml中配置id自增的方式:设置为auto自增:id-type:auto
	}
}

开启mp日志

运行测试程序后,控制台打印sql语句和预编译参数和结果。

不开就只有结果。

mybatis-plus:
  global-config:
    db-config:
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出控制台

mp的分页查询

配置分页拦截: 

Mp在进行查询的时候是通过拦截器进行拼接sql语句来实现的:

我们先创建一个拦截器的包:创建一个放拦截器的配置类:MPConfig:

配置类放入引导类所在的包及子包中才能被读取加载到spring容器中:

@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

配置类定义详见Spring_阳光明媚UPUP的博客-CSDN博客 

会把page(1,5)拼接sql的limit

mp的Page对象

@SpringBootTest(classes = SpringbootBeginQuickstartApplication.class)
class SpringbootBeginQuickstartApplicationTests {
	@Autowired
	private BookMapper bookMapper;
	@Test
	void contextLoads() {
		Page page = new Page(1, 5);
		System.out.println(bookMapper.selectPage(page,null));
		//mybatis-plus默认生成的id的方式为自己自订的雪花算法
		//而数据库提供的id自增的方法  yml中配置id自增的方式:设置为auto自增:id-type:auto
		System.out.println(page);//com.baomidou.mybatisplus.extension.plugins.pagination.Page@6413d7e7
		System.out.println(page.getCurrent());//1
		System.out.println(page.getSize());//5
		System.out.println(page.getTotal());//13
		System.out.println(page.getPages());//3
		System.out.println(page.getRecords());//[Book(id=2, name=ghet, price=78), Book(id=3, name=ddd, price=12), Book(id=4, name=ddd, price=12), Book(id=5, name=ddd, price=12), Book(id=6, name=ddd, price=12)]
	}
}

条件查询

使用的like %预编译拼接的sql的

@SpringBootTest(classes = SpringbootBeginQuickstartApplication.class)
class SpringbootBeginQuickstartApplicationTests {
    @Autowired
    private BookMapper bookMapper;
    @Test
    void contextLoads() {
        String name="ddd";
        QueryWrapper<Book> qw = new QueryWrapper<>();
        qw.like("name", name);//实际中,name可能为null
        //qw.eq , qw.ne , lt , gt , le , ge , between , group
        List<Book> bookList = bookMapper.selectList(qw);
        System.out.println(bookList);
        //防止参数name误写错,我们可以借助lambda表达式的Qw查询:
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
        //if(name!=null)lqw.like(Book::getName,name);//方法引用:只要保证lambda的入参可用放入Book类的成员方法getName中的入参中即可。
        lqw.like(name != null, Book::getName, name);
        List<Book> books = bookMapper.selectList(lqw);
        System.out.println(books);
    }
}

对于上面分页查询后面也能拿国家qw或lqw

        System.out.println(bookMapper.selectPage(page,qw或lqw));

MP简化业务层Service层

普通service

@Service
public class BookServiceImpl implements BookService{
    @Autowired
    private BookMapper bookMapper;
    public Boolean save(Book book){
        return bookMapper.insert(book)>0;
    }
    public Boolean update(Book book){
        return bookMapper.updateById(book)>0;
    }
    public Boolean delete(Integer id){
        return bookMapper.deleteById(id)>0;
    }
    public Book getById(Integer id){
        return bookMapper.selectById(id);
    }
    public List<Book> getAll(Integer id){
        return bookMapper.selectList(null);
    }
    public IPage<Book> getPage(int currentPage,int pageSize){
        Page page = new Page(currentPage, pageSize);
        bookMapper.selectPage(page,null);
        return page;
    }
}

service接口层只需继承

public interface BookService extends IService<Book> {
}

impl除了实现接口层还需继承

@Service
public class BookServiceImpl extends ServiceImpl<BookMapper,Book> implements BookService{
}

ctrl+f12勾选第一个框,即可看到里面继承的方法

mp业务层有的方法直接用,没有的接着写。尽量不与Mp的业务层方法重名,可以使用@Override进行检查有无重名覆盖。

然后就可贼测试类注入service接口并测试了。

表现层开发

@RestController//restful风格的controller
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;
    @GetMapping
    public List<Book> getAll(){
        return bookService.list();
    }
    @PostMapping
    public Boolean save(@RequestBody Book book){//RequestBody接收json
        return bookService.save(book);
    }
    @PutMapping
    public Boolean update(@RequestBody Book book){//RequestBody接收json
        return bookService.updateById(book);
    }
    @DeleteMapping("/{id}")
    public Boolean delete(@PathVariable Integer id){//RequestBody接收json
        return bookService.removeById(id);
    }
    @GetMapping("/{id}")
    public Book getById(@PathVariable Integer id){//RequestBody接收json
        return bookService.getById(id);
    }
    @GetMapping("{currentPage}/{pageSize}")
    public IPage<Book> getPage(@PathVariable int currentPage,@PathVariable int pageSize){
        Page<Book> page = new Page<>(1,5);
        return bookService.page(page);
    }
}

postman测试

选择REST动作GET/...

POST/PUT请求body里面加上json数据{ "":"",  "":""}

DELETE请求路径传参/1

表现层消息一致性处理

查询返回list<user>的数据、新增返回true,修改返回true,删除返回true,分页查询返回IPage<Book>

由于:

查询id不存在的数据,返回null,查询过程中抛出异常,catch中返回null。

这时:

我们就不知道这个null,是查询数据库返回的,还是报异常返回的。

我们可以设置一个flag,如果是正常查询就返回true:如果报异常没正常查询返回false:

设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议

我们需要加一个返回结果的数据的模型类:

util包下

@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {
    private Boolean flag;
    private Object data;
    public R(Boolean flag) {
        this.flag = flag;
    }
}
@RestController//restful风格的controller
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;
    @GetMapping
    public R getAll(){
        return new R(true,bookService.list());
    }
    @PostMapping
    public R save(@RequestBody Book book){//RequestBody接收json
        R r = new R();
        boolean flag = bookService.save(book);
        r.setFlag(flag);
        return r;
    }
    @PutMapping
    public R update(@RequestBody Book book){//RequestBody接收json
        return new R(bookService.updateById(book));
    }
    @DeleteMapping("/{id}")
    public R delete(@PathVariable Integer id){
        return new R(bookService.removeById(id));
    }
    @GetMapping("/{id}")
    public R getById(@PathVariable Integer id){
        return new R(true,bookService.getById(id));
    }
    @GetMapping("{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage,@PathVariable int pageSize){
        Page<Book> page = new Page<>(1,5);
        return new R(true,bookService.page(page));
    }
}

现在查询成功或失败都会有状态了。

前后端联调

先不整这块了

前后端分离结构设计中页面归属前端服务器
单体工程中页面放置在resources目录下的static目录中(建议执行clean)

异常消息处理

当抛异常就不返回R了,接着springmvc异常处理

util包下的R先加个属性private String msg;

util包下创建一个异常处理器作为springmvc异常处理器

@RestControllerAdvice
public class ProjectRxceptionAdvice {
    @ExceptionHandler
    public  R doException(Exception e){
        //记录日志
        //通知运维
        //通知开发
        e.printStackTrace();
        return new R("服务器故障,请稍后再试");
    }
}

controller的某个资源随便造一个异常,postman访问测试。文章来源地址https://www.toymoban.com/news/detail-619721.html

到了这里,关于SpringBoot整合SSMP小demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 实践(13)spring boot 整合RabbitMq

    前文讲解了RabbitMQ的下载和安装,此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目,名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件,添加amqp使用jar包    !--  RabbitMQ --         dependency             groupIdorg.springframework.boot/groupId         

    2024年02月09日
    浏览(56)
  • 【SpringBoot】Spring Boot 项目中整合 MyBatis 和 PageHelper

    目录 前言         步骤 1: 添加依赖 步骤 2: 配置数据源和 MyBatis 步骤 3: 配置 PageHelper 步骤 4: 使用 PageHelper 进行分页查询 IDEA指定端口启动 总结         Spring Boot 与 MyBatis 的整合是 Java 开发中常见的需求,特别是在使用分页插件如 PageHelper 时。PageHelper 是一个针对 MyBat

    2024年04月25日
    浏览(51)
  • 【Spring Boot】SpringBoot 优雅整合Swagger Api 自动生成文档

    Swagger 是一套 RESTful API 文档生成工具,可以方便地生成 API 文档并提供 API 调试页面。 而 Spring Boot 是一款非常优秀的 Java Web 开发框架,它可以非常方便地构建 Web 应用程序。 在本文中,我们将介绍如何使用 Swagger 以及如何在 Spring Boot 中整合 Swagger 。 首先,在 pom.xml 文件中添

    2023年04月22日
    浏览(46)
  • SpringBoot 整合 RabbitMQ demo

    Rabbit Windows安装教程 本文只做Demo案例的分享,具体知识需自行百度 1.application.properties 配置Rabbit的基本信息 2.pom文件 导入两个maven依赖 第一个是SpringBoot集成的rabbit 第二个是web依赖,用来方便发消息 3.Rabbit配置类 这里用的是主题模式,也就是模糊匹配的模式 这里设置的是只

    2024年02月17日
    浏览(41)
  • SpringBoot整合Gateway 的Demo(附源码)

    Gateway模块 Gateway 的父pom.xml Gateway 的pom.xml 添加注册中心和配置中心配置 添加路由配置信息(放在配置中心) 服务模块 添加一个service服务 配置注册中心和配置中心 配置中心的配置文件内容 效果 不通过gateway访问 通过gateway访问 本文由博客一文多发平台 OpenWrite 发布!

    2024年02月08日
    浏览(30)
  • Spring Boot集成WebSocket Demo,简单明了

    如果是初次搭建Spring Boot+WebSocket项目,不需要太复杂,只需要快速上手,那么你搜到的大部分文章可能都不适合你,我的这篇文章以最精简的方式搭建一个可以运行并通信的Spring Boot+WebSocket的Demo项目,有了根基之后再进行复杂化就不是难事了。 搭建Spring Boot项目都会吧,下面

    2024年02月09日
    浏览(37)
  • Spring Boot集成Graphql快速入门Demo

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。 优势 GraphQL 速度快,并且比较稳定,GraphQL 的操作是在数据层面的,

    2024年04月13日
    浏览(42)
  • SSMP整合案例(11) 在界面中实现添加操作

    上文 SSMP整合案例(10) vue端调整项目环境 发送请求 基本界面编写我们搭建了基本的页面结构 然后 我们来做个新增的功能 首先 新增 我们肯定是用户点击了这个新建之后 我们再来处理这个逻辑 我们之前的代码 新增是有绑定 一个事件的 但是这个 AddBook中并没有内容 首先 我们

    2024年02月12日
    浏览(35)
  • SSMP整合案例(8) Restful开发表现层接口

    之前几篇文章后面 我们的数据层 和 业务层基本就搭好了 然后 我们就要处理表现层 表现层开发 我们就还是用之前讲过的 Restful 然后 用Postman来做我们接口的测试 那话不多说 直接开干 在启动类同目录下创建一个 controller 包 下面创建一个类 叫 BookController BookController 参考代码

    2024年02月11日
    浏览(36)
  • SSMP整合案例(9) 统一表现层数据返回格式

    上文 SSMP整合案例(8) Restful开发表现层接口 我们就已经是把表现层的接口写完了 但是 我们会发现 现在前端人员拿到我们的数据 格式看着非常的乱 我们 数据库 添加 修改 删除 就是但数据的格式 一个 布尔值 查询 就是 查多个 一个集合 查询 全部 则就是 一个对象的格式 还有

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包