SpringCloud微服务案例
1.创建项目管理依赖的版本
<?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>cn.ps</groupId>
<artifactId>SpringCloudDemo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>CloudView</module>
<module>SpringCloudRegister</module>
<module>CloudService</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.11.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2.创建注册中心
(1).导入依赖
<?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>SpringCloudDemo</artifactId>
<groupId>cn.ps</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>SpringCloudRegister</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
(2).创建资源文件(application.yml)
server:
port: 8761
eureka:
instance:
hostname: localhost
#将来注册到该注册中心的微服务包括注册中心都是用IP地址
preferIpAddress: true
client:
#是否注册到注册中心,注册中心自己不需要注册
registerWithEureka: false
#是否抓取注册中心的注册信息
fetchRegistry: false
serviceUrl:
#是微服务和客户端用来注册和发现的地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
(3).创建main方法
package cn.ps;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
public static void main(String[] args) {
new SpringApplicationBuilder(EurekaServer.class).web(true).run(args);
}
}
3.创建服务层
1.导入依赖
<?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>SpringCloudDemo</artifactId>
<groupId>cn.ps</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>CloudService</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
</dependencies>
</project>
2.创建资源文件(application.yml)
server:
port: 8881
eureka:
instance:
#将来注册到该注册中心的微服务包括注册中心都是用IP地址
preferIpAddress: true
hostname: localhost
client:
#是否注册到注册中心,注册中心自己不需要注册
registerWithEureka: true
#是否抓取注册中心的注册信息
fetchRegistry: true
serviceUrl:
#是微服务和客户端用来注册和发现的地址
defaultZone: http://192.168.0.99:8761/eureka/
spring:
datasource:
url: jdbc:mysql://localhost/unit02
password: ps123456
driver-class-name: com.mysql.jdbc.Driver
username: root
application:
name: userservice
3.创建main方法
package cn.ps;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
@RestController
@MapperScan("cn.ps.mapper.EmpMapper")
public class UserServer {
public static void main(String[] args) {
new SpringApplicationBuilder(UserServer.class).web(true).run(args);
}
}
4.创建控制层(Coutroller)
package cn.ps.coutroller;
import cn.ps.entity.MySqlUser;
import cn.ps.entity.Result;
import cn.ps.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
public class DataCoutroller {
@Autowired
private EmpService service;
/**
* 多条件搜索
* 传参 /emps?stu=1&curPage=2&pageNum=3
* @return
*/
@GetMapping(value = "/emps")
public Result listEmp(String name, String page, String limit) {
try {
Result pb=service.queryClass(name,page,limit);
return pb;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@PostMapping(value = "/emp")
public Result addEmp(@RequestBody MySqlUser emp) {
Result r=new Result();
try{
service.addEmp(emp);
}catch(Exception e){
r.setCode(1);
r.setMsg("新增出错"+e.getMessage());
}
return r;
}
@DeleteMapping(value = "/emp/{id}")
public Result deleteEmp(@PathVariable("id") String id) {
Result r=new Result();
try{
service.deleteEmp(id);
}catch(Exception e){
r.setCode(1);
r.setMsg("删除失败"+e.getMessage());
}
return r;
}
@PutMapping(value = "/emp/{id}")
public Result updateEmp(@PathVariable("id") String id, @RequestBody MySqlUser emp) {
Result r=new Result();
try{
emp.setId(id);
service.updateEmp(emp);
}catch(Exception e){
r.setCode(1);
r.setMsg("修改失败"+e.getMessage());
}
return r;
}
}
5.创建实体类
package cn.ps.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
@TableName("stu1")
public class MySqlUser {
@TableId(type= IdType.AUTO)
private String id;
@NotBlank(message = "学生姓名不能为空")
private String name;
@DecimalMin(value="1",message = "年龄不能小于1岁")
@DecimalMax(value="130",message = "年龄最大为130岁")
private String age;
private String sex;
@Pattern(regexp = ".+@.+\\..+",message = "邮箱格式错误")
private String eamil;
@Size(max = 11,min = 11,message = "手机号码必须为11位数")
private String phone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getEamil() {
return eamil;
}
public void setEamil(String eamil) {
this.eamil = eamil;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
//自定义实体类
package cn.ps.entity;
import java.util.List;
public class Result {
private int code;
private String msg;
private int count;
private List data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
}
6.创建mapper接口
package cn.ps.mapper;
import cn.ps.entity.MySqlUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EmpMapper extends BaseMapper<MySqlUser> {
}
7.创建服务层(service)
package cn.ps.service.impl;
import cn.ps.entity.MySqlUser;
import cn.ps.entity.Result;
import cn.ps.mapper.EmpMapper;
import cn.ps.service.EmpService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper dao;
public Result queryClass(String name, String curPage, String pageNum) throws Exception{
//第一次访问 没有当前页
if(StringUtils.isEmpty(curPage)) {
curPage="1";
}
if(StringUtils.isEmpty(pageNum)) {
pageNum="10";
}
//转换成int类型
int curPageIn=Integer.parseInt(curPage);
int pageNumIn=Integer.parseInt(pageNum);
if(StringUtils.isEmpty(name)) {
name="";
}
QueryWrapper<MySqlUser> qw=new QueryWrapper<MySqlUser>();
qw.like("name", name);
IPage<MySqlUser> pa=dao.selectPage(new Page(curPageIn,pageNumIn), qw);
Result re=new Result();
re.setCode(0);
re.setCount((int)pa.getTotal());
re.setData(pa.getRecords());
return re;
}
public void addEmp(MySqlUser emp) {
dao.insert(emp);
}
public void deleteEmp(String id) {
dao.deleteById(id);
}
public void updateEmp(MySqlUser emp) {
dao.updateById(emp);
}
}
//接口
package cn.ps.service;
import cn.ps.entity.MySqlUser;
import cn.ps.entity.Result;
public interface EmpService {
public Result queryClass(String name, String curPage, String pageNum) throws Exception;
public void addEmp(MySqlUser emp);
void deleteEmp(String id);
void updateEmp(MySqlUser emp);
}
8.创建工具类
package cn.ps.utils;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@Configuration
@MapperScan("com.baomidou.cloud.service.*.mapper*")
public class MyConf {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
//分页工具类
package cn.ps.utils;
import java.util.List;
/**
* 分页帮助类
*
* @param <T>
*/
public class PagerBean<T> {
public void calc() {
}
/**
* 构造方法
* @param curPage 当前页
* @param pageNum 每页显示的条数
* @param total 总条数
*/
public PagerBean(int curPage, int pageNum, int total) {
//计算上一页
this.prePage=(curPage==1?1:curPage-1);
//计算总页数
this.totalPage=(total%pageNum==0?total/pageNum:total/pageNum+1);
//下一页
this.nextPage=this.totalPage==0?curPage:(curPage==totalPage?totalPage:curPage+1);
//当前页的索引
this.startIndex=(curPage-1)*pageNum;
this.total=total;
this.curPage=curPage;
this.pageNum=pageNum;
}
/**
* 当前页 查询的默认当前页=1
* 页面传递的参数
*/
private int curPage;
/**
* 每页显示条数据 默认10条
* 页面传递的参数
*/
private int pageNum=10;
/*
* 根据当前页计算
* curPage=1 prePage=1
* curPage>1 prePage=curPage-1
* 上一页
*/
private int prePage;
/**
* 下一页
* curPage=totalPage nextPage=totalPage
* curPage<totalPage nextPage=curPage+1
* 如果当前页是1 总页数是2 下一页=1+1
*/
private int nextPage;
/**
* 总共有多少条
* 数据库查询
*/
private int total;
/**
* 总共多少页
* 总条数total/每页显示的条数pageNum
* total%pageNum==0?total/pageNum:total/pageNum+1
*/
private int totalPage;
/**
* 装载当前页的数据
*/
private List<T> data;
/**
* 开始索引
* startIndex=(curPage-1)*pageNum
*/
private int startIndex;
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getCurPage() {
return curPage;
}
public void setCurPage(int curPage) {
this.curPage = curPage;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPrePage() {
return prePage;
}
public void setPrePage(int prePage) {
this.prePage = prePage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
4.创建视图微服务(view)
1.导入依赖
<?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>SpringCloudDemo</artifactId>
<groupId>cn.ps</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>CloudView</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
</dependencies>
</project>
2.创建资源文件和static文件(用来放HTML)
server:
port: 80
eureka:
instance:
#将来注册到该注册中心的微服务包括注册中心都是用IP地址
preferIpAddress: true
hostname: localhost
client:
#是否注册到注册中心,注册中心自己不需要注册
registerWithEureka: true
#是否抓取注册中心的注册信息
fetchRegistry: true
serviceUrl:
#是微服务和客户端用来注册和发现的地址
defaultZone: http://192.168.0.99:8761/eureka/
spring:
application:
name: userview
//html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="resources/layui/css/layui.css"/>
<script src="resources/layui/layui.js"></script>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
layui.use('form',function () {
var form=layui.form;
form.on('submit(myForm)', function(data){
data.field["page"]=1;
layui.table.reload('myEmpTable', {
url: 'emps'
,where:data.field
});
return false;
});
form.on('submit(addForm)', function(data){
$.ajax({
url:'emp',
dataType:'json',
data:data.field,
type:'post',
success:function (da) {
if(da.code==0){
layer.close(addwindow);
layui.table.reload('myEmpTable', {
url: 'emps'
});
}else{
alert(da.msg)
}
}
});
return false;
});
form.on('submit(upForm)', function(data){
data.field["_method"]="put";
$.ajax({
url:'emp/'+data.field.id,
dataType:'json',
data:data.field,
type:'post',
success:function (da) {
if(da.code==0){
layer.close(update);
layui.table.reload('myEmpTable', {
url: 'emps'
});
}else{
alert(da.msg)
}
}
});
return false;
});
});
layui.use('table', function(){
var table = layui.table;
//第一个实例
table.render({
elem: '#myEmpTable'
,height: 312
,width:'100%'
,url: 'emps' //数据接口
,page: true //开启分页
,cols: [[ //表头
{field: 'id', title: '学生ID', width:210, sort: true, fixed: 'left'}
,{field: 'name', title: '学生姓名', width:210}
,{field: 'sex', title: '学生性别', width:210, sort: true}
,{field: 'age', title: '年龄', width:210}
,{field: 'eamil', title: '邮箱', width: 210}
,{field: 'phone', title: '手机号码', width: 210, sort: true}
,{field: 'as', title: '删除操作', width: 210, sort: true ,templet: function(d){
return "<button onclick='toDelete("+d.id+")'>删除</button>";
}}
,{field: 'acc', title: '修改操作', width: 210, sort: true ,templet: function(d){
var str=JSON.stringify(d);
//return '<a href=javascript:toUpdate('+d.id+',"'+d.name+'","'+d.sex+'","'+d.age+'","'+d.phone+'","'+d.eamil+'")>修改</a>';
//return "<button onclick=toUpdate('"+d.id+"','"+d.name+"','"+d.sex+"','"+d.age+"','"+d.phone+"','"+d.eamil+"')>修改</button>";
return "<button onclick=\"toUpdate()\" data='"+str+"'>修改</button>";
}}
]]
});
});
var addwindow=null;
function toAdd() {
layui.use('layer', function(){
addwindow=layer.open({
type: 1,
area: ['500px', '400px'],
content:$('#addForm')
});
});
}
function toDelete(id) {
$.ajax({
url:'emp/'+id,
dataType:'json',
data:{
"_method":"delete"
},
type:'post',
success:function (da) {
if(da.code==0){
layui.table.reload('myEmpTable', {
url: 'emps'
,page: {
curr: 1 //重新从第 1 页开始
}
});
}else{
alert(da.msg)
}
}
});
return false;
}
var update=null;
function toUpdate(da) {
//获取字符串
var attribute = event.srcElement.getAttribute("data");
//转换成JSON 对象
var parse = JSON.parse(attribute);
layui.use('layer', function(){
update=layer.open({
type: 1,
area: ['500px', '400px'],
content:$('#upForm')
});
});
layui.form.val("upForm",parse);
}
</script>
</head>
<body>
<form class="layui-form" action="">
<div class="layui-inline">
<label class="layui-form-label">学生姓名</label>
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="name" autocomplete="off" class="layui-input">
</div>
<div class="layui-input-inline" style="width: 200px;">
<button class="layui-btn" lay-submit lay-filter="myForm">查询</button>
<a href="javascript:toAdd()" class="layui-btn">新增</a>
</div>
</div>
</form>
<table id="myEmpTable" ></table>
</body>
</html>
<!--新增的表单-->
<form id="addForm" class="layui-form" style="display: none" > <!-- 提示:如果你不想用form,你可以换成div等任何一个普通元素 -->
<div class="layui-form-item">
<label class="layui-form-label" >学生姓名</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" autocomplete="off" class="layui-input" >
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">学生性别</label>
<div class="layui-input-block">
<input type="text" name="sex" autocomplete="off" class="layui-input" >
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">学生年龄</label>
<div class="layui-input-block">
<input type="text" name="age" lay-verify="number" autocomplete="off" class="layui-input" >
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="text" name="eamil" lay-verify="email" autocomplete="off" class="layui-input" >
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">手机号码</label>
<div class="layui-input-block">
<input type="text" name="phone" lay-verify="phone" autocomplete="off" class="layui-input" >
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="addForm">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
<!--修改的表单-->
<form id="upForm" class="layui-form" lay-filter="upForm" style="display: none" > <!-- 提示:如果你不想用form,你可以换成div等任何一个普通元素 -->
<div class="layui-form-item">
<label class="layui-form-label" >学生姓名</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" autocomplete="off" class="layui-input" id="a">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">学生性别</label>
<div class="layui-input-block">
<input type="text" name="sex" autocomplete="off" class="layui-input" id="b">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">学生年龄</label>
<div class="layui-input-block">
<input type="text" name="age" lay-verify="number" autocomplete="off" class="layui-input" id="c">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="text" name="eamil" lay-verify="email" autocomplete="off" class="layui-input" id="d">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">手机号码</label>
<div class="layui-input-block">
<input type="text" name="phone" lay-verify="phone" autocomplete="off" class="layui-input" id="e">
</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">学生编号</label>
<div class="layui-input-block">
<input type="text" name="id" autocomplete="off" class="layui-input" id="f">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="upForm">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
导入layui (上官网下就好)
3.创建main方法
package cn.ps;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
@EnableFeignClients
@RestController
public class UserFeign {
public static void main(String[] args) {
new SpringApplicationBuilder(UserFeign.class).web(true).run(args);
}
}
4.创建控制层
package cn.ps.coutroller;
import cn.ps.entity.MySqlUser;
import cn.ps.entity.Result;
import cn.ps.mapper.EmpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
public class FeignController {
@Autowired
EmpMapper em;
@GetMapping(value = "/emps")
public Result listEmp( String name, String page, String limit){
name=(name==null ? "" :name);
Result result = em.listEmp(name, page, limit);
return result;
}
@PostMapping(value = "/emp")
public Result addEmp( MySqlUser emp){
Result result = em.addEmp(emp);
return result;
}
@DeleteMapping(value = "/emp/{id}")
public Result deleteEmp(@PathVariable("id") String id){
Result result = em.deleteEmp(id);
return result;
}
@PutMapping(value = "/emp/{id}")
public Result updateEmp(@PathVariable("id") String id, MySqlUser emp){
Result result = em.updateEmp(id, emp);
return result;
}
}
5.创建实体类和服务一样的即可
6.创建mapper接口
package cn.ps.mapper;
import cn.ps.entity.MySqlUser;
import cn.ps.entity.Result;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;
@FeignClient(name="USERSERVICE")
public interface EmpMapper {
@GetMapping(value = "/emps")
public Result listEmp(@RequestParam("name") String name, @RequestParam("page") String page, @RequestParam("limit") String limit);
@PostMapping(value = "/emp")
public Result addEmp(@RequestBody MySqlUser emp);
@DeleteMapping(value = "/emp/{id}")
public Result deleteEmp(@PathVariable("id") String id);
@PutMapping(value = "/emp/{id}")
public Result updateEmp(@PathVariable("id") String id, @RequestBody MySqlUser emp);
}
项目结构图: