Spring-Cloud

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);

}

项目结构图:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值