上文 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 对象来完成的