1. 实体类
-
目录结构
-
Dept实体类
package com.hjf.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; /** * @author Jiang锋时刻 * @create 2020-09-23 0:38 */ // 实体类必须序列化 // 类表关系映射 @Data @NoArgsConstructor @Accessors(chain = true) // 链式写法 public class Dept implements Serializable { private Long deptNo; private String deptName; // 这个数据存在哪个数据库的字段 // 微服务, 一个服务对应一个数据库 或 同一个信息存储在不同的数据库 private String db_source; public Dept(String deptName) { this.deptName = deptName; } }
2. 服务器
1.目录结构
-
application.yml配置文件
server: port: 8001 # mybatis的配置 mybatis: type-aliases-package: com.hjf.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml spring: application: name: springcloud-provider-dept datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://jiangfengtime.top:3306/test?useUnicode=true&characterEncoding=utf-8 username: root password: 123456
-
DeptMapper
package com.hjf.dao; import com.hjf.pojo.Dept; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; /** * @author Jiang锋时刻 * @create 2020-09-23 7:37 */ @Mapper @Repository public interface DeptDao { public boolean addDept(Dept dept); public Dept queryDeptById(Long id); public List<Dept> queryDeptAll(); }
-
Mybatis配置文件: mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!--开启缓存--> <setting name="cacheEnabled" value="true"/> </settings> <!-- <typeAliases>com.hjf.pojo</typeAliases>--> </configuration>
-
DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hjf.dao.DeptDao"> <insert id="addDept" parameterType="Dept"> insert into dept(deptName, db_source) values (#{deptName}, DATABASE()); </insert> <select id="queryDeptAll" resultType="Dept"> select * from dept; </select> <select id="queryDeptById" resultType="Dept" parameterType="Long"> select * from dept where deptNo = #{deptNo}; </select> </mapper>
-
DeptController
package com.hjf.controller; import com.hjf.pojo.Dept; import com.hjf.service.DeptService; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @author Jiang锋时刻 * @create 2020-09-23 7:54 */ @RestController public class DeptController { @Autowired private DeptService deptService; @PostMapping("/dept/add") public boolean addDept(Dept dept){ return deptService.addDept(dept); } @GetMapping("/dept/all") public List<Dept> queryDeptAll(){ return deptService.queryDeptAll(); } @GetMapping("/dept/{id}") public Dept queryDeptById(@PathVariable("id") Long id){ return deptService.queryDeptById(id); } }
3. 客户端
-
目录结构
-
创建一个Config配置文件Bean
package com.hjf.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; /** * @author Jiang锋时刻 * @create 2020-09-23 23:46 */ @Configuration // @Configuration --> spring applicationContext.xml public class ConfigBean { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
-
Controller控制器
package com.hjf.controller; import com.hjf.pojo.Dept; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.List; /** * @author Jiang锋时刻 * @create 2020-09-23 23:43 */ @RestController public class DeptConsumerController { // 理解: 消费者, 不应该有service层 // RestTemplate ... 供我们直接调用就可以了, 注册到Spring中 // 提供多种边界访问远程http服务的方法简单的Restful服务的模板 // (url, 实体: Map, Class<T> responseType) @Autowired private RestTemplate restTemplate; private static final String REST_URL_PREFIX = "http://localhost:8001"; @RequestMapping("/consumer/dept/{id}") public Dept get(@PathVariable("id") Long id){ return restTemplate.getForObject(REST_URL_PREFIX + "/dept/" + id, Dept.class); } @RequestMapping("/consumer/dept/add") public boolean add(Dept dept) { return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class); } @RequestMapping("/consumer/dept/list") public List<Dept> list(){ return restTemplate.getForObject(REST_URL_PREFIX + "/dept/all", List.class); } }
4. 运行结果
- 客户端通过远程调用服务器