✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取项目下载方式🍅
链接点击直达:下载链接
只需要继承或者实现某一个抽象类或者接口就可以直接使用所有的CRUD方法,就好比我们使用过的通用的Mapper和通用的spring data jpa一样呢?
答案当然是肯定可以滴,接下来我们来解决下。-
思路如下:-
-
解释:
编写接口和抽象类
--- 接口定义操作行为和方法
--- 抽象类提供具体操作行为和方法 与此同时通过泛型来实现操作的具体对象 由子类提供
编写子类实现类 继承抽象类
--- 子类具体实现 向上调用super方法进行赋值,给予抽象类的具体操作类型即可
以上图 指定的是service的操作方式。与此同时controller的操作方式也是类似
项目结构如下-
1.父工程搭建
创建父工程 tk-parent ,pom.xml文件中增加配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>tk-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>common</module>
<module>common-db</module>
<module>core</module>
<module>service</module>
</modules>
<!--打包方式-->
<packaging>pom</packaging>
<description>版本统一管理的所有工程的父工程</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!--manve打包的时候 跳过测试不执行-->
<skipTests>true</skipTests>
</properties>
<!--spring-boot父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<!--依赖包-->
<dependencies>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<!--解决包冲突的问题-->
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-metadata</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<!--swagger文档依赖-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
<exclusions>
<exclusion>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-metadata</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!--鉴权-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
</dependencies>
<!--SpringCloud包依赖管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
删除src文件夹-
pom.xml中打pom包
2.公共模块搭建
pom.xml依赖
创建公共子模块common,pom.xml引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tk-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common</artifactId>
<dependencies>
<!--web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
公共子模块引入这些依赖后,其他微服务引入common后也自动引入了这些依赖
常用对象
创建entity包 ,在entity包下创建返回状态码实体类
package entity;
/**
* 返回码
*/
public class StatusCode {
public static final int OK = 20000;//成功
public static final int ERROR = 20001;//失败
public static final int LOGINERROR = 20002;//用户名或密码错误
public static final int ACCESSERROR = 20003;//权限不足
public static final int REMOTEERROR = 20004;//远程调用失败
public static final int REPERROR = 20005;//重复操作
public static final int NOTFOUNDERROR = 20006;//没有对应的抢购数据
}
包下建立类Result用于微服务返回结果给前端
package entity;
import java.io.Serializable;
public class Result<T> implements Serializable {
private boolean flag;//是否成功
private Integer code;//返回码
private String message;//返回消息
private T data;//返回数据
public static <T>Result ok(T data){
return new Result(true,StatusCode.OK,"操作成功",data);
}
public static <T>Result ok(){
return new Result(true,StatusCode.OK,"操作成功");
}
public Result(boolean flag, Integer code, String message, T data) {
this.flag = flag;
this.code = code;
this.message = message;
this.data = data;
}
public Result(boolean flag, Integer code, String message) {
this.flag = flag;
this.code = code;
this.message = message;
}
public Result() {
this.flag = true;
this.code = StatusCode.OK;
this.message = "操作成功!";
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
3.数据访问工程搭建
创建公共模块common-db ,pom文件引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tk-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-db</artifactId>
<!--依赖-->
<dependencies>
<!--对common的依赖-->
<dependency>
<artifactId>common</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--通用mapper起步依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
<!--MySQL数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
4.抽取service和controller
(1)创建core工程打包方式为pom
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tk-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>core-service</module>
<module>core-controller</module>
</modules>
<artifactId>core</artifactId>
</project>
(2创建changgou-core-service 打包方式为jar-
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>core</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>core-service</artifactId>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>common-db</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
定义借口和抽象类-
-
CoreService
package cn.zhengjiewen.core.service;
public interface CoreService<T> extends
DeleteService<T>,
InsertService<T>,
PagingService<T>,
SelectService<T>,
UpdateService<T> {
}
DeleteService
package cn.zhengjiewen.core.service;
/**
* 删除相关
*/
public interface DeleteService<T> {
/**
* 根据条件删除
*
* @param record
* @return
*/
int delete(T record);
/**
* 根据ID 删除
*
* @param id
* @return
*/
int deleteById(Object id);
}
InsertService
package cn.zhengjiewen.core.service;
/***
* 描述
*/
public interface InsertService<T> {
/**
* 添加记录
* @param record
* @return
*/
int insert(T record);
}
PagingService
package cn.zhengjiewen.core.service;
import com.github.pagehelper.PageInfo;
/**
* 描述
*/
public interface PagingService<T> {
/**
* 查询所有并分页
*
* @param pageNo
* @param pageSize
* @return
*/
PageInfo<T> findByPage(Integer pageNo, Integer pageSize);
/**
* 根据查询条件 record 分页查询
*
* @param pageNo
* @param pageSize
* @param record
* @return
*/
PageInfo<T> findByPage(Integer pageNo, Integer pageSize, T record);
/**
* 根据查询条件exmaple来分页查询
*
* @param pageNo
* @param pageSize
* @param example
* @return
*/
PageInfo<T> findByPageExample(Integer pageNo, Integer pageSize, Object example);
}
SelectService
package cn.zhengjiewen.core.service;
import java.util.List;
/**
* 描述
*
*/
public interface SelectService<T> {
/**
* 查询所有
*
* @return
*/
public List<T> selectAll();
/**
* 查询一个对象
*
* @param id
* @return
*/
public T selectByPrimaryKey(Object id);
/**
* 根据条件查询
*
* @param record
* @return
*/
public List<T> select(T record);
}
UpdateService
package cn.zhengjiewen.core.service;
/***
* 描述
*/
public interface UpdateService<T> {
/**
* 根据对象进行更新
*
* @param record
* @return
*/
int updateByPrimaryKey(T record);
}
CoreServiceImpl
package cn.zhengjiewen.core.service.impl;
import cn.zhengjiewen.core.service.CoreService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.util.List;
public abstract class CoreServiceImpl<T> implements CoreService<T> {
//通用mapepr
protected Mapper<T> baseMapper;
//操作的实体类
protected Class<T> clazz;
public CoreServiceImpl(Mapper<T> baseMapper, Class<T> clazz) {
this.baseMapper = baseMapper;
this.clazz = clazz;
}
@Override
public int delete(T record) {
return baseMapper.delete(record);
}
@Override
public int deleteById(Object id) {
return baseMapper.deleteByPrimaryKey(id);
}
@Override
public int insert(T record) {
return baseMapper.insertSelective(record);
}
@Override
public List<T> selectAll() {
return baseMapper.selectAll();
}
@Override
public T selectByPrimaryKey(Object id) {
return baseMapper.selectByPrimaryKey(id);
}
@Override
public List<T> select(T record) {
return baseMapper.select(record);
}
@Override
public int updateByPrimaryKey(T record) {
return baseMapper.updateByPrimaryKeySelective(record);
}
@Override
public PageInfo<T> findByPage(Integer pageNo, Integer pageSize) {
PageHelper.startPage(pageNo, pageSize);
List<T> list = baseMapper.selectAll();
PageInfo<T> pageInfo = new PageInfo<T>(list);
return pageInfo;
}
@Override
public PageInfo<T> findByPage(Integer pageNo, Integer pageSize, T record) {
Example example = new Example(clazz);
Example.Criteria criteria = example.createCriteria();
Field[] declaredFields = record.getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {
try {
//遇到 id注解 和 transient注解 不需要进行值的设置 直接跳过。
if (declaredField.isAnnotationPresent(Transient.class) || declaredField.isAnnotationPresent(Id.class)) {
//遇到
continue;
}
//属性描述器 record.getClass()
PropertyDescriptor propDesc = new PropertyDescriptor(declaredField.getName(), record.getClass());
//获取这个值 先获取读方法的方法对象,并调用获取里面的值
Object value = propDesc.getReadMethod().invoke(record);
//Object value = propDesc.getValue(declaredField.getName());
//如果是字符串
if (value != null && value.getClass().getName().equals("java.lang.String")) {
Column columnAnnotation = declaredField.getAnnotation(Column.class);
//判断如果是长度为1 则 执行=号
int length = columnAnnotation.length();
if (length == 1) {
criteria.andEqualTo(declaredField.getName(), value);
} else {
criteria.andLike(declaredField.getName(), "%" + value + "%");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
PageHelper.startPage(pageNo, pageSize);
List<T> ts = baseMapper.selectByExample(example);
PageInfo<T> info = new PageInfo<T>(ts);
return info;
}
@Override
public PageInfo<T> findByPageExample(Integer pageNo, Integer pageSize, Object example) {
PageHelper.startPage(pageNo, pageSize);
List<T> list = baseMapper.selectByExample(example);
PageInfo<T> info = new PageInfo<T>(list);
return info;
}
}
(3)创建core-controller工程-
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>core</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>core-controller</artifactId>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>core-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--spring web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
-
ICoreController
package cn.zhengjiewen.core.controller;
public interface ICoreController<T> extends
ISelectController<T>,
IInsertController<T>,
IPagingController<T>,
IDeleteController<T>,
IUpdateController<T> {
}
IDeleteController
package cn.zhengjiewen.core.controller;
import entity.Result;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
public interface IDeleteController<T> {
/**
* 根据ID 删除
*
* @param id
* @return
*/
Result deleteById(Object id);
}
IInsertController
package cn.zhengjiewen.core.controller;
import entity.Result;
public interface IInsertController<T> {
/**
* 添加记录
* @param record
* @return
*/
Result insert(T record);
}
IPagingController
package cn.zhengjiewen.core.controller;
import com.github.pagehelper.PageInfo;
import entity.Result;
public interface IPagingController<T> {
/**
* 查询所有并分页
*
* @param pageNo
* @param pageSize
* @return
*/
Result<PageInfo<T>> findByPage(Integer pageNo, Integer pageSize);
/**
* 根据查询条件 record 分页查询
*
* @param pageNo
* @param pageSize
* @param record
* @return
*/
Result<PageInfo<T>> findByPage(Integer pageNo, Integer pageSize, T record);
}
ISelectController
package cn.zhengjiewen.core.controller;
import entity.Result;
import java.util.List;
public interface ISelectController<T> {
//根据ID 获取信息
public Result<T> findById(Object id);
//根据ID 获取信息列表
public Result<List<T>> findAll();
}
IUpdateController
package cn.zhengjiewen.core.controller;
import com.github.pagehelper.PageInfo;
import entity.Result;
public interface IUpdateController<T> {
/**
* 根据对象进行更新 根据ID
*
* @param record
* @return
*/
Result updateByPrimaryKey(T record);
}
AbstractCoreController
package cn.zhengjiewen.core.controller;
import cn.zhengjiewen.core.service.CoreService;
import com.github.pagehelper.PageInfo;
import entity.Result;
import entity.StatusCode;
import org.springframework.web.bind.annotation.*;
import java.util.List;
public abstract class AbstractCoreController<T> implements ICoreController<T> {
//调用方的service
protected CoreService<T> coreService;
//调用方的类型
protected Class<T> clazz;
public AbstractCoreController(CoreService<T> coreService, Class<T> clazz) {
this.coreService = coreService;
this.clazz = clazz;
}
/**
* 删除记录
*
* @param id
* @return
*/
@DeleteMapping("/{id}")
@Override
public Result deleteById(@PathVariable(name = "id") Object id) {
coreService.deleteById(id);
return new Result(true, StatusCode.OK, "删除成功");
}
/**
* 添加记录
*
* @param record
* @return
*/
@PostMapping
@Override
public Result insert(@RequestBody T record) {
coreService.insert(record);
return new Result(true, StatusCode.OK, "添加成功");
}
/**
* 分页查询记录
*
* @param pageNo
* @param pageSize
* @return
*/
@GetMapping(value = "/search/{page}/{size}")
@Override
public Result<PageInfo<T>> findByPage(@PathVariable(name = "page") Integer pageNo,
@PathVariable(name = "size") Integer pageSize) {
PageInfo<T> pageInfo = coreService.findByPage(pageNo, pageSize);
return new Result<PageInfo<T>>(true, StatusCode.OK, "分页查询成功", pageInfo);
}
@PostMapping(value = "/search/{page}/{size}")
@Override
public Result<PageInfo<T>> findByPage(@PathVariable(name = "page") Integer pageNo,
@PathVariable(name = "size") Integer pageSize,
@RequestBody T record) {
PageInfo<T> pageInfo = coreService.findByPage(pageNo, pageSize, record);
return new Result<PageInfo<T>>(true, StatusCode.OK, "条件分页查询成功", pageInfo);
}
@Override
@GetMapping("/{id}")
public Result<T> findById(@PathVariable(name = "id") Object id) {
T t = coreService.selectByPrimaryKey(id);
return new Result<T>(true, StatusCode.OK, "查询单个数据成功", t);
}
@Override
@GetMapping
public Result<List<T>> findAll() {
List<T> list = coreService.selectAll();
return new Result<List<T>>(true, StatusCode.OK, "查询所有数据成功", list);
}
//更新数据
@Override
@PutMapping
public Result updateByPrimaryKey(@RequestBody T record) {
coreService.updateByPrimaryKey(record);
return new Result(true, StatusCode.OK, "更新成功");
}
}
5.service工程公共模块搭建
创建service工程,工程全部为pom工程,并将所有工程的src文件删除。-
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tk-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>user-service</module>
</modules>
<artifactId>service</artifactId>
</project>
6.user-service工程模块搭建
创建service工程-
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>service</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>user-service</artifactId>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>core-controller</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
-
UserApplication
package cn.zhengjiewen;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(basePackages = "cn.zhengjiewen.dao")
public class UserApplication {
public static void main(String[] args) {
new SpringApplication().run(UserApplication.class,args);
}
}
User
package cn.zhengjiewen.pojo;
import javax.persistence.*;
import java.io.Serializable;
@Table(name="user")
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;//
@Column(name = "username")
private String username;//
@Column(name = "password")
private String password;//
@Column(name = "name")
private String name;//
//get方法
public Integer getId() {
return id;
}
//set方法
public void setId(Integer id) {
this.id = id;
}
//get方法
public String getUsername() {
return username;
}
//set方法
public void setUsername(String username) {
this.username = username;
}
//get方法
public String getPassword() {
return password;
}
//set方法
public void setPassword(String password) {
this.password = password;
}
//get方法
public String getName() {
return name;
}
//set方法
public void setName(String name) {
this.name = name;
}
}
UserMapper
package cn.zhengjiewen.dao;
import cn.zhengjiewen.pojo.User;
import tk.mybatis.mapper.common.Mapper;
public interface UserMapper extends Mapper<User> {
}
UserService
package cn.zhengjiewen.service;
import cn.zhengjiewen.core.service.CoreService;
import cn.zhengjiewen.pojo.User;
public interface UserService extends CoreService<User> {
}
UserServiceImpl
package cn.zhengjiewen.service.impl;
import cn.zhengjiewen.core.service.impl.CoreServiceImpl;
import cn.zhengjiewen.dao.UserMapper;
import cn.zhengjiewen.pojo.User;
import cn.zhengjiewen.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends CoreServiceImpl<User> implements UserService {
private UserMapper userMapper;
@Autowired
public UserServiceImpl(UserMapper userMapper) {
super(userMapper, User.class);
this.userMapper = userMapper;
}
}
UserController
package cn.zhengjiewen.controller;
import cn.zhengjiewen.core.controller.AbstractCoreController;
import cn.zhengjiewen.pojo.User;
import cn.zhengjiewen.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController extends AbstractCoreController<User>{
private UserService userService;
@Autowired
public UserController(UserService userService) {
super(userService, User.class);
this.userService = userService;
}
}
application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: ******
url: jdbc:mysql://********:3306/plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
启动user-service项目,测试CRUD功能