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日
    浏览(60)
  • 【SpringBoot】Spring Boot 项目中整合 MyBatis 和 PageHelper

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月11日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包