0
点赞
收藏
分享

微信扫一扫

springboot实体类Lombok简化、CRUD操作、业务层快速开发

我是小瘦子哟 2022-04-06 阅读 43

文章目录


一、Lombok工具

实体类的开发可以自动通过工具手工生成get/set方法,然后覆盖toString()方法,方便调试,等等。不过这一套操作书写很繁琐,有对应的工具可以帮助我们简化开发,介绍一个小工具,lombok。 Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发,SpringBoot目前默认集成了lombok技术,并提供了对应的版本控制,所以只需要提供对应的坐标即可,在pom.xml中添加lombok的坐标。

<dependencies>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

使用lombok可以通过一个注解@Data完成一个实体类对应的getter,setter,toString,equals,hashCode等操作的快速添加,无需在实体类中去添加get、set、toString等方法。

package com.itheima.domain;

//lombok


import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;


@Data
@TableName(value = "lib")
public class Book {

//    @TableId(type = IdType.AUTO)
    private Integer id;
    private String type;
    private String name;
    private String description;
}

二、数据层开发——基础CRUD

1、数据层开发使用MyBatisPlus技术,数据源使用Druid
导入对于的坐标

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

2、配置数据库连接相关的数据源配置

server:
  port: 80

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

3、使用MP的标准通用接口BaseMapper加速开发,@Mapper和泛型的指定

package com.itheima.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itheima.domain.Book;
import org.apache.ibatis.annotations.Mapper;


@Mapper
public interface BookMapper extends BaseMapper<Book> {


}

4、测试CRUD

package com.itheima.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.domain.Book;
import com.itheima.mapper.BookMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


import java.util.Arrays;
import java.util.List;

@SpringBootTest
public class BookDaoTest {

    @Autowired
    private BookMapper bookMapper;

    //查询数据
    @Test
    void testGetById(){
        System.out.println(bookMapper.selectById(1));
    }

    //查询所有
    @Test
    void testSelectAll(){
        bookMapper.selectList(null);
    }

    //按条件查询
    @Test
    void testSelectBy(){
        QueryWrapper<Book> wrapper=new QueryWrapper<>();
        wrapper.eq("type","四大名著");

        bookMapper.selectList(wrapper);
    }
    //按条件查询方法2:lambda
    @Test
    void testSelectBy2(){
        String type="四大名著";
        LambdaQueryWrapper<Book> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq((type != null),Book::getType,type);

        bookMapper.selectList(lambdaQueryWrapper);
    }

    //插入数据
    @Test
    void testSave(){
        Book book=new Book();

        book.setName("西游记");
        book.setType("神话小说");
        book.setDescription("师徒四人去西天取经的故事!");
        bookMapper.insert(book);


    }

    //修改数据
    @Test
    void testUpDate(){
        Book book=new Book();
        book.setType("四大名著");
        QueryWrapper<Book> wrapper=new QueryWrapper<>();
        wrapper.eq("name","西游记");
        bookMapper.update(book,wrapper);
    }

    //修改数据
    @Test
    void testUpDateById(){
        Book book=new Book();
        book.setId(1);
        book.setType("四大名著");
        bookMapper.updateById(book);

    }

    //根据id删除
    @Test
    void testDelete(){
        bookMapper.deleteById(14);
    }

    //查询多条数据
    @Test
    void testSelectBatchIds(){
        List<Book> bookList=bookMapper.selectBatchIds(Arrays.asList(1,2,3));
        System.out.println(bookList);
    }



    //分页
    @Test
    void testSelectPage(){
        IPage iPage=new Page(2,5);
        bookMapper.selectPage(iPage,null);
        System.out.println("当前页数:"+iPage.getCurrent());
        System.out.println("当前页数的条数:"+iPage.getSize());
        System.out.println("数据总条数:"+iPage.getTotal());
        System.out.println("数据总页数:"+iPage.getPages());
        System.out.println("查询数据:"+iPage.getRecords());
    }
}

整合MP之后不用再自己去书写sql语句,直接调用BaseMapper中的方法即可

三、业务层快速开发

其实MP技术不仅提供了数据层快速开发方案,业务层MP也给了一个通用接口
业务层接口快速开发:
业务层接口继承了Iservice

package com.itheima.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.domain.Book;

public interface IBookService extends IService<Book> {

    IPage<Book> getPage(int currentPage,int pageSize);
}

业务层接口实现类快速开发,关注继承的类需要传入两个泛型,一个是数据层接口,另一个是实体类

package com.itheima.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.itheima.domain.Book;
import com.itheima.mapper.BookMapper;
import com.itheima.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl02 extends ServiceImpl<BookMapper,Book> implements IBookService {

    @Autowired
    private BookMapper bookMapper;

    @Override
    public IPage<Book> getPage(int currentPage, int pageSize) {
        IPage page=new Page(currentPage,pageSize);
        bookMapper.selectPage(page,null);
        return page;
    }
}

业务层测试:

package com.itheima.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookServiceTestCase {
    @Autowired
    private  IBookService bookService;

    @Test
    void testSelectById(){
        System.out.println(bookService.getById(1));
    }

    @Test
    void testSave(){
        Book book=new Book();
        book.setType("古诗");
        book.setName("蜀道难");
        book.setDescription("蜀道难,难于上青天!");
        bookService.save(book);
    }

    @Test
    void testUpdateById(){
        Book book=new Book();
        book.setId(7);
        book.setType("兵法书");
        bookService.updateById(book);
    }

    @Test
    void testDeleteById(){
        bookService.removeById(16);
    }

    @Test
    void testSelectAll(){
        bookService.list();
    }

    @Test
    void testSelectPage(){
        IPage<Book> page=new Page<>(2,5);
        bookService.page(page);
        System.out.println("当前页数:"+page.getCurrent());
        System.out.println("当前页数的条数:"+page.getSize());
        System.out.println("数据总条数:"+page.getTotal());
        System.out.println("数据总页数:"+page.getPages());
        System.out.println("查询数据:"+page.getRecords());

    }
}

业务层快速开发总结

  1. 接口继承(ISerivce)快速开发Service
  2. 实现类继承(ServiceImpl<M,T>)快速开发ServiceImpl
  3. 可以在通用接口基础上做功能重载或功能追加
  4. 注意重载时不要覆盖原始操作,避免原始提供的功能丢失
举报

相关推荐

0 条评论