SSMP整合案例(7) MybatisPlus快速service业务层开发

上文 SSMP整合案例(6) 业务service层逻辑编写我们创建并编写了service业务层代码
但是 这样一个一个去写 确实是有点麻烦 重复性工作
但其实这个已经有人帮我们考虑好了 MP就帮我们做了一个 service快捷开发的方式

我们在项目中的service包下创建一个接口 叫 IBookService
其实有些公司要求的标准话开发 就会要求你接口前面 加个I 当然 这个主要还是看个人习惯 其实大部分公司没有那么吹毛求疵

IBookService参考代码如下
也和之前那个dao层的 BaseMapper 一样 很多内置的方法 这里面都给你写好了

package com.example.bookconfig.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.bookconfig.domain.book;

public interface IBookService extends IService<book> {
    
    
}

这样 我们暂时的业务层接口就写好了 当然 这里面只是通用方法 就是一些很基本 只要是项目基本就会用的功能 他跟你封装了 但你以后 项目又更复杂的功能 肯定还是要自己去写的

那么 接口好了 业务层的实现类也要写啊 在 service 下的 impl包 下创建一个类 叫 bookServiceI
很多人可能说 bookServiceImpl不是更好 是更好啊 但是我们之前创过一个bookServiceImpl了
在这里插入图片描述
真的 其实这里叫什么不那么重要 主要是自己能看懂 毕竟说 我们这项目又不需要其他人开发 其他人能不能看懂关我们什么事 是不是?

bookServiceI肯定要实现我们刚创建的接口 IBookService啊
但是 这就带出一个问题 IService中那么多抽象方法 都要实现吗?
在这里插入图片描述
显然是不可能的 官方也做不出这么离谱的事
我们可以继承一个 ServiceImpl 类
这个类需要两个泛型
第一个是 你要用的实现接口 简单说 就是 dao的接口 你做数据操作的工具 第二个就是属性类模板
参考代码如下

package com.example.bookconfig.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.bookconfig.dao.bookDao;
import com.example.bookconfig.domain.book;
import com.example.bookconfig.service.IBookService;
import org.springframework.stereotype.Service;

@Service
public class bookServiceI extends ServiceImpl<bookDao, book> implements IBookService {
    
    
}

这就做完了 非常简单 是不是感觉很梦幻 哈哈哈

那么 别光说不练 来 我们测试一下

然后 我们在测试类编写代码如下

package com.example.bookconfig;

import com.example.bookconfig.service.impl.bookServiceI;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class BookConfigApplicationTests {
    
    

    @Autowired
    private bookServiceI bookServiceI;

    @Test
    void contextLoads() {
    
    
        System.out.println(bookServiceI.getById(1));
    }
}

运行结果如下
在这里插入图片描述
实现类 MP逻辑层 提供给我们 这个 getById 根据id查单条 就这么就成功啦

我们测试类编写代码如下

book book = new book();
book.setType(1);
 book.setName("数据管理");
 book.setDescription("整改方案叙述 加系统新增功能描述");
 System.out.println(bookServiceI.save(book));

声明一个book类 然后 用set方法给每一个字段赋值 然后调用save 业务层提供的公共添加函数
运行结果如下
在这里插入图片描述
它这里非常贴心的给我们改成了 返回 true/false 而不是 影响行数
毕竟说 其实我们执行业务 其实关心的只是有没有成功
在这里插入图片描述
看到数据库 这条数据显然也进去了

然后 我们这样写一下

book book = new book();
book.setId(10);
book.setType(0);
book.setName("知识图谱");
book.setDescription("管理企业结构和知识体现技术收藏");
System.out.println(bookServiceI.updateById(book));

他修改的函数 叫 updateById
我们将刚刚加进去的 id为 10的数据改一下
运行结果如下
在这里插入图片描述
这里面 我是真的想给这个 返回的类型 点个赞
我们看到数据库
在这里插入图片描述
显然 我们的数据就已经OK了

那么 最后 我们把这条数据删了吧 但是 这里的删除已经不叫delete了 而是remove
用jquery 和 写过js dom 的朋友会比较铭感这个词
我们编写代码如下

System.out.println(bookServiceI.removeById(10));

删除id10的
运行结果如下
在这里插入图片描述
这里 返回了 true 我们看数据库
在这里插入图片描述
我们的数据就这么不见了

然后查询全部

System.out.println(bookServiceI.list());

非常的简单粗暴 直接就叫一个list
运行结果如下
在这里插入图片描述
然后 分页查询 我们编写代码如下

IPage<book> pagebook = new Page<>(1,3);
IPage<book> page = bookServiceI.page(pagebook);
System.out.println(page.getRecords());

运行结果如下
在这里插入图片描述
变化其实也不大 也是通过 IPage 对象来完成的

猜你喜欢

转载自blog.csdn.net/weixin_45966674/article/details/131397969