通过继承Mybatis-Plus通用Service,实现自己的Service类

114 阅读2分钟

springboot配置了mybatis-plus,定义了map层的代码,并且调用了map对象实现了查询的操作。

按照三层架构的逻辑,应该用service层调用map层,写来写去还是这几个通用的操作,有什么好办法能不让咱自己写呢?

mybatis-plus提供了通用接口和实现类,只需要继承和实现,就可以实现大多数对数据库表的持久化操作。

那如何用service层。

首先咱service层创建User service接口。

image.png

右键 新建 UserService,

然后就得到UserService.java文件在service文件夹下面:

package com.example.demo.service;

public interface UserService {
}

然后他需要去继承那个IServeice接口:

package com.example.demo.service;

public interface UserService extends IServece<User> {
}

导包,把鼠标放到IServiceUser单词上,然后回车就得到:

package com.example.demo.service;

import com.baomidou.mybatisplus.extension.service.IService;


public interface UserService extends IServece<User> {
}

泛型传实体类,就是这个接口需要对哪个实体类进行增删改查。

接着还要创建实现类。

先在这个service里面创建IMPL的实现包。

image.png

右键service,新建com.example.demo.service.impl,这样子就是创建UserService的实现类。然后在impl创建UserServiceImpl:

// UserServiceImpl.java
package com.example.demo.service.impl;

public class UserServiceImpl {
}

在类上添加Service注解:

// UserServiceImpl.java
package com.example.demo.service.impl;

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl {

}

然后当Springboot启动后,就会实例化这个实现类的对象,如果想在spingboot中注入这个service对象,就需要在这个实现类上面添加这个service的注解。

已经学会了两种注入对象的方式了,一种是通过那个control注解,还有一个是通过这个service注解。但是这两种注入方式具有条件,他们只适合在特定的情况下注入对象。

如何把自己的对象注入到springboot上面。

这个实现类需要实现一个接口:

// UserServiceImpl.java
package com.example.demo.service.impl;

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

}

爆红之后:

image.png

然后把这些要实现的方法给他展示出来。

image.png

image.png

image.png

这要是自己一个个写太费劲了,不想写,mybatis-plus给出了实现方法,可以继承通用的实现类,传入实体和map的泛型,就把这个接口的方法给实现了。

所以把刚刚展示的方法给去掉。撤回去。

image.png

然后继承通用的实现类,

// UserServiceImpl.java
package com.example.demo.service.impl;

import com.baomidou.mybatisplus.extension.servie.impl.ServiceImpl;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

image.png

传入两个泛型,它里面有哪些方法。可以打开mybatis-plus官网看一下。baomidou.com/guides/data-interface/#save

看看。

看一下有保存、保存或修改、删除等等。主要是一些增删改查的操作。主要是一些增删改查的操作。

list

// 查询所有
List<T> list();

用这个查询出所有的user对象。

创建测试方法,在测试类里面先注入service对象。

image.png 在测试类里面先注入service对象。 用resource注解,

@SpringBootTest
class DemoApplicationTests {
  
  @Resource
  private UserMapper userMapper;
  @Resource
  private UserService userService;
  
  @Test
  void contextLoads() {
    System.out.println(("----- selectAll method test -----"));
    List<User> userList = userMapper.selectList(queryWrapper: null);
    Assert.isTrue(expression: 5 == userList.size(), message: "");
    userList.forEach(System.out::println);
  }
  
  @Test
  void contextService() {
    List<User> userList = userService.list();
    userLIst.forEach(System.out::println);
  }
}

userService.list();用这个方法list去进行接收。

image.png

image.png