业务层开发
对于业务层的制作有个误区
Service层接口定义与数据层接口定义具有较大差别 不要混用
业务层接口关注的是业务名称
数据层接口关注的是数据层名称
操作是不难
但是有些东西还是要掌握的
业务层接口如果是业务方法 就按照业务名称来代替
如果是数据操作 直接用操作名称来代替
写接口
package com.bigdata1421.ssmp.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bigdata1421.ssmp.domain.User;
import java.util.List;
public interface UserService {
Boolean save(User user);
Boolean update(User user);
Boolean delete(Integer id);
User getById(Integer id);
List<User> geTAll();
IPage<User> getPage(int currentPage , int pageSize);
}
接口写完了我们去写实现类
实现方法
@service 注解 定义成数据层对于的bean
@Autowired 注入
package com.bigdata1421.ssmp.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bigdata1421.ssmp.dao.UserDao;
import com.bigdata1421.ssmp.domain.User;
import com.bigdata1421.ssmp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
// 定义成业务层对应的bean
@Service
public class UserServiceImpl implements UserService {
//注入
@Autowired
private UserDao userDao;
@Override
public Boolean save(User user) {
return userDao.insert(user)>0;
}
@Override
public Boolean update(User user) {
return userDao.updateById(user)>0;
}
@Override
public Boolean delete(Integer id) {
return userDao.deleteById(id)>0;
}
@Override
public User getById(Integer id) {
return userDao.selectById(id);
}
@Override
public List<User> geTAll() {
return userDao.selectList(null);
}
@Override
public IPage<User> getPage(int currentPage, int pageSize) {
IPage page = new Page(currentPage,pageSize);
userDao.selectPage(page,null);
return page;
}
}
测试
业务层的逻辑必须书写测试方法
package com.bigdata1421.ssmp.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bigdata1421.ssmp.dao.UserDao;
import com.bigdata1421.ssmp.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.xml.ws.soap.Addressing;
@SpringBootTest
public class UserserviceTestCase {
@Autowired
private UserService userService;
@Test
void testGetById(){
System.out.println(userService.getById(1));
}
@Test
void testSave(){
User user=new User();
user.setId(11);
user.setName("王连扬");
user.setAge(21);
user.setGender(1);
userService.save(user);
}
@Test
void testUpdate(){
User user=new User();
user.setId(11);
user.setName("王连扬");
user.setAge(21);
user.setGender(1);
userService.update(user);
}
@Test
void testDelete(){
userService.delete(11);
}
@Test
void testGetAll(){
userService.geTAll();
}
@Test
void testGetPage(){
IPage<User>page=userService.getPage(2,5);
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());
}
}
测试已经通过
小结
定义方法
实现类
测试类
业务层快速开发
业务层的开发快死死了
我们一个一个的写
其实不用
我们用Mybatis提供的业务层提供的公共接口即可实现功能的拓展
重写业务层接口
package com.bigdata1421.ssmp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bigdata1421.ssmp.domain.User;
public interface IUserService extends IService<User> {
}
直接写实现类
在通用类的基础上做功能重载和功能追加
impl 实现接口
package com.bigdata1421.ssmp.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bigdata1421.ssmp.dao.UserDao;
import com.bigdata1421.ssmp.service.IUserService;
import com.bigdata1421.ssmp.domain.User;
import org.springframework.stereotype.Service;
@Service//定义成业务层的bean
public class UserServiceImpl extends ServiceImpl<UserDao,User> implements IUserService {
}
开发测试
package com.bigdata1421.ssmp.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bigdata1421.ssmp.dao.UserDao;
import com.bigdata1421.ssmp.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.xml.ws.soap.Addressing;
@SpringBootTest
public class UserServiceTest {
@Autowired
private IUserService iUserService ;
@Test
void testGetById(){
System.out.println(iUserService.getById(1));
}
@Test
void testSave(){
User user=new User();
user.setId(11);
user.setName("王连扬");
user.setAge(21);
user.setGender(1);
iUserService.save(user);
}
@Test
void testUpdate(){
User user=new User();
user.setId(11);
user.setName("王连扬");
user.setAge(21);
user.setGender(1);
iUserService.updateById(user);
}
@Test
void testDelete(){
iUserService.removeById(1);
}
@Test
void testGetAll(){
iUserService.list();
}
@Test
void testGetPage(){
IPage<User>page=new Page<User>(2,5);
iUserService.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());
}
}
测试通过
对于我们现在业务层接口和实现类
我们都是用提供的统用功能来实现的
我们有时候不一定要这样
我们需要在接口里手工编辑
在接口的实现类中实现方法
各种各样
所以我们在以后开发中是混合着用
小结