SpringBoot(六) Mybatis - 通用Service

此前,我们操作数据库都在Service中进行,不可避免的就要写出大量重复的CRUD方法,如果能有一个通用的Service,肯定也会减少很多工作量。

通用Mapper介绍

通用 Mapper4 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。

官方文档

通用Service介绍

  1. 通用Service 可减少很多工作量。
  2. 通用Service 需搭配 通用Mapper 一起使用。

pom.xml

添加 Mapper 依赖

1
2
3
4
5
6
<!--添加通用Mapper依赖 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>

BaseService

根据实际需求来添加常用的CURD接口方法
BaseService.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @author Ray
* @date 2018/7/24 0024
* 通用Service
*/
public interface BaseService<T> {

T selectByKey(Object key);

List<T> selectAll();

int save(T entity);

int delete(Object key);

int update(T entity);

//TODO 其他...
}

BaseServiceImpl

Mapper 默认提供了很多常用的CURD方法
BaseServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* @author Ray
* @date 2018/7/24 0024
* 通用Service 封装常用的CRUD方法
*/
public class BaseServiceImpl<T> implements BaseService<T> {

@Autowired
private Mapper<T> mapper; //泛型装配


@Override
public T selectByKey(Object key) {
return mapper.selectByPrimaryKey(key);
}

@Override
public List<T> selectAll() {
return mapper.selectAll();
}

@Override
public int save(T entity) {
return mapper.insert(entity);
}

@Override
public int delete(Object key) {
return mapper.deleteByPrimaryKey(key);
}

@Override
public int update(T entity) {
return mapper.updateByPrimaryKey(entity);
}
}

继承Mapper

在原来的基础上,继承Mapper<T> 即可

1
2
3
public interface CityDao extends Mapper<City> {
...
}

Service业务层

CityService.java

1
2
3
4
5
6
/**
* @author Ray
* @date 2018/7/24 0024
*/
public interface CityService extends BaseService<City> {
}

Service业务层实现类

CityServiceImpl.java

1
2
3
4
5
6
7
/**
* @author Ray
* @date 2018/7/24 0024
*/
public class CityServiceImpl extends BaseServiceImpl<City> implements CityService {

}

SpringBoot启动类

注意包: import tk.mybatis.spring.annotation.MapperScan;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.ray.springboot206;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.ray.springboot206.dao") // 扫描Mapper接口
public class Springboot206Application {

public static void main(String[] args) {
SpringApplication.run(Springboot206Application.class, args);
}

}

Controller控制层

提供RestFul API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @author Ray
* @date 2018/7/24 0024
* 数据控制层
*/
@RestController
public class CityController {

@Autowired
private CityService cityService;

/**
* 查询所有城市信息
* localhost:8080/cities
*/
@GetMapping("/cities")
public List<City> list(){
return cityService.selectAll();
}
}

结果:

-------------- 本文结束  感谢您的阅读 --------------