springboot

最近在学习springboot框架,利用springboot结合数据库实现基本的增删改查分页

首先是数据库的字段 id,name,type,description,id设置自增,因为是学习的基础的没有加version,deleted,create_time,update_time等字段

其次是导入依赖,因为在创建springboot工程的时候可以选择导入一些坐标,比如

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</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>

结合mybatisplus能使开发更加快速,所以导入其坐标

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

数据源druid坐标

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.3</version>
</dependency>

在application.yml下还要加入配置

#关于连接数据库的

spring:
  datasource:
    druid:
      password: 1234
      username: root
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
      driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tb_   
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 #设置端口为80

server:
  port: 80

 

1.实体类 entity     Book

package com.lh.entity;


import lombok.Data;

@Data
public class Book {

    private  Integer id;
    private  String type;
    private  String name;
    private  String description;

}

2.dao层  BookDao接口

结合mybatisplus,BookDao继承BaseMapper<Book> 开发更加快速,BaseMapper接口中写了若干种方法 增删改查等等

package com.lh.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lh.entity.Book;
import org.apache.ibatis.annotations.Mapper;


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

2.1 测试dao层代码是否正确

使用@springBootTest   , @Test,    @Autowired 注解 

要测试BookDao   所以自动注入BookDao

package com.lh.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.lh.entity.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class testbookdao {


    @Autowired
    private BookDao bookDao;

    @Test
    void testupdate() {
       Book book=new Book();
       book.setId(45);
       book.setName("信503系统");
       book.setType("通3036信");
       book.setDescription("学习666基础");
       bookDao.updateById(book);
    }

    @Test
    void  getall(){
        bookDao.selectList(null);
    }

    @Test //分页查询
    void testgetpage(){
        IPage page=new Page(2,3);
        bookDao.selectPage(page,null);
        System.out.println(page.getCurrent());
        System.out.println(page.getPages());
        System.out.println(page.getRecords());
        System.out.println(page.getSize());
        System.out.println(page.getTotal());

    }


    @Test//条件查询
    void testgetby(){
        String name="信";
        LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<>();
        lqw.like(name!=null,Book::getName,name);
        bookDao.selectList(lqw);
    }
}

2.1.1

这里直接测查询分页显示的还是全部数据

我们要加入一个拦截器

在config包下创建mabatisplusconfig类

package com.lh.config;

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 MybaitisplusConfig {


    @Bean //创建bean 交给spring管理
          //直接使用分页 控制台得不出来数据 需要创建拦截器
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mp=new MybatisPlusInterceptor();
        mp.addInnerInterceptor(new PaginationInnerInterceptor());
        return  mp;
    }

}

3.service层  

  3.1基础操作 BookService   编写各种方法  ,增删改查

 
package com.lh.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lh.entity.Book;
import java.util.List;

public interface BookService {

    boolean save(Book book);
    boolean delete(Integer id);
    boolean update(Book book);
    Book getById(Integer id);
    List<Book>  getall();
    IPage<Book> getpage(int current, int size);
}

下面是BookServiceimpl  实现BookService 

package com.lh.service.impl;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lh.dao.BookDao;
import com.lh.entity.Book;
import com.lh.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class BookServiceimpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public boolean save(Book book) {
        return bookDao.insert(book)>0;
    }

    @Override
    public boolean delete(Integer id) {
        return bookDao.deleteById(id)>0;
    }

    @Override
    public boolean update(Book book) {
        return bookDao.updateById(book)>0;
    }

    @Override
    public Book getById(Integer id) {
        return bookDao.selectById(id);
    }

    @Override
    public List<Book> getall() {
        return bookDao.selectList(null);
    }

    @Override
    public IPage<Book> getpage(int current, int size) {
        IPage<Book> page=new Page<>(current,size);
        return bookDao.selectPage(page,null);
    }
}

3.2  利用mybatisplus快速开发  IBookService1 继承IService<Book>

接口下面可以继续写方法,但是尽量不要覆盖IService里面写的方法,避免加重负担

package com.lh.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lh.entity.Book;

public interface ibookservice1 extends IService<Book> {

    IPage<Book> getpage(Integer current,Integer size);
}

下面是IBookServiceimpl1

这里我重写了一个查询分页的操作 

package com.lh.service.impl;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lh.dao.BookDao;
import com.lh.entity.Book;
import com.lh.service.ibookservice1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service//业务层快速开发
public class ibooserviceimpl1 extends ServiceImpl<BookDao, Book> implements ibookservice1 {


    @Autowired
    private  BookDao bookDao;

    //可以重载或增加   不要覆盖原始操作
    @Override
    public IPage<Book> getpage(Integer  current, Integer size) {
          IPage  page=new Page<>(current,size);
          bookDao.selectPage(page,null);
          return page;
    }
}

3.3测试service层

  3.3.1 测试BookService  创建测试类testbookservice

package com.lh.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lh.entity.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class testbookservice {

    @Autowired
    private  BookService bookService;


    @Test
    void testsave(){
        Book book=new Book();
        book.setName("电子技术");
        book.setType("通信");
        book.setDescription("学习666电子技术基础");
        bookService.save(book);
    }

    @Test
    void testdelete(){
        bookService.delete(46);
    }

    @Test
    void testupdate(){
        Book book=new Book();
        book.setId(45);
        book.setName("模拟电子技术");
        book.setType("通信");
        book.setDescription("学习555电子技术基础");
        bookService.update(book);
    }
    @Test
    void testgetbyid(){
        System.out.println(bookService.getById(45));
    }

    @Test
    void testgetpage(){
        IPage<Book> page = bookService.getpage(1, 3);
        System.out.println(page.getTotal());
        System.out.println(page.getSize());
        System.out.println(page.getCurrent());
        System.out.println(page.getPages());
    }
}

3.3.2 测试ibookservice  

package com.lh.service;

import com.lh.entity.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class testibooservice1 {

    @Autowired
    private  ibookservice1 ibookservice1;

    @Test
    void testinsert(){
        Book book=new Book();
        book.setName("单片adadaadadad机原理");
        book.setType("通信");
        book.setDescription("学习777rggrr电子技术基础");
        ibookservice1.save(book);

    }

    @Test
    void testdelete(){
        ibookservice1.removeById(49);
    }

    @Test
     void testupdate(){
        Book book=new Book();
        book.setId(50);
        book.setName("大学物理");
        book.setType("通信");
        book.setDescription("学习77技术基础");
        ibookservice1.updateById(book);
    }

}

4.controller层   在页面上展示数据

  4.1因为要让前端减少工作量,我们不能返回任意一数据,所以我们可以与前端约定返回的数据格式

所以可以创建一个类R,设置返回的数据格式 

package com.lh.controller.untils;


import lombok.Data;

/***
 * 前后端数据协议
 */
@Data
public class R {

    private  boolean flag;
    private  Object date;

    public  R(){}

    public  R(boolean flag){
        this.flag=flag;

    }

    public R(boolean flag,Object date){
        this.flag=flag;
        this.date=date;

    }

}

 4.2创建BookController  结合restful风格开发

package com.lh.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lh.controller.untils.R;
import com.lh.entity.Book;
import com.lh.service.ibookservice1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/***
* 加入前后端数据协议
*/

@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    private ibookservice1 ibookservice1;

    @GetMapping
    public R selectAll(){
        return new R(true,ibookservice1.list());
    }

    @GetMapping("/{id}")
   public R selectById(@PathVariable Integer id){

        return new R(true,ibookservice1.getById(id));
    }

    @DeleteMapping("/{id}")
    public  R delete(@PathVariable Integer id){

        return new R(ibookservice1.removeById(id));
    }

    @PutMapping
    public R update(@RequestBody Book book){
        return new R(ibookservice1.updateById(book));
    }

    @PostMapping ()
   public R save(@RequestBody Book book){
        return new R(ibookservice1.save(book));
    }

    @GetMapping("/{current}/{size}")
    public R getpage(@PathVariable  Integer current,@PathVariable Integer size){
        return new R(true,ibookservice1.getpage(current, size));

    }
}

4.3  启动引导类 springbootssmapplication利用postman测试BookController

package com.lh;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootssmApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootssmApplication.class, args);
    }

}

4.3.1测试查全部

 4.3.2测试查分页

 

 4.3.3测试新增 

 

4.3.4 测试更新

首先我们先随便插入一个数据

 

 然后在进行更改

 

 

 

 

更改成功!!!

springboot,mybatisplus和注解开发真的很强,增强了开发效率!!!

欢迎大佬教我学习springboot!!!

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值