SpringCloud学习(4):Rest学习环境搭建:服务提供者(下) Dear 丶 2023-01-09 03:41 89阅读 0赞 ### 六、编写实体类 ### package com.buba.springcloud.pojo; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; /** * 部门实体类 */ @Data @NoArgsConstructor @Accessors(chain = true) public class Dept implements Serializable { private Long depId; private String depName; // 表示该数据来自哪个数据库 微服务特性,一个服务对应一个数据库 同一个信息可能存在不同的数据库 private String db_source; public Dept(String depName) { this.depName = depName; } } @Data可以为类提供读写功能,从而不用写get、set方法。它还会为类提供 equals()、hashCode()、toString() 方法。 @NoArgsConstructor创建一个无参构造函数。 @Accessors 的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,下面介绍三个属性 fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。如下 @Data @Accessors(fluent = true) public class User { private Long id; private String name; // 生成的getter和setter方法如下,方法体略 public Long id() {} public User id(Long id) {} public String name() {} public User name(String name) {} } chain的中文含义是链式的,设置为true,则setter方法返回当前对象。如下 @Data @Accessors(chain = true) public class User { private Long id; private String name; // 生成的setter方法如下,方法体略 public User setId(Long id) {} public User setName(String name) {} } prefix的中文含义是前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。如下 @Data @Accessors(prefix = "p") class User { private Long pId; private String pName; // 生成的getter和setter方法如下,方法体略 public Long getId() {} public void setId(Long id) {} public String getName() {} public void setName(String name) {} } 这样第一个微服务就完成了。 ### 七、提供者模块 ### (1)创建部门信息提供者模块,项目可能会越来越多可以把端口号加在项目最后。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70][] (2)配置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>springcloud</artifactId> <groupId>com.buba</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-provider-dept-8001</artifactId> <dependencies> <!-- 为了拿到实体类,配置api module--> <dependency> <groupId>com.buba</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!-- mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!-- 日志门面--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <!-- springboot启动器--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- jetty启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <!-- test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <!-- 热部署工具--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project> (3)配置 创建application.yml文件 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 1][] 展开空的目录,创建项目需要的配置文件 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 2][] 编写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> </configuration> 编写application.yml文件 server: port: 8001 # mybatis配置 mybatis: type-aliases-package: com.buba.springcloud.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml # spring配置 spring: application: name: springcloud-provider-dept datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/DB01?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false username: root password: ### 八、编写Dao层 ### 创建mapper接口 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 3][] 在该接口下添加3个功能。 package com.buba.springcloud.dao; import com.buba.springcloud.pojo.Dept; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface DeptMapper { boolean addDept(Dept dept); Dept selDeptById(Long deptId); List<Dept> selDept(); } 编写相对应的mapper文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.buba.springcloud.dao.DeptMapper"> <insert id="addDept" parameterType="Dept"> insert into dept(deptname,db_source) values (#{deptName},database()) </insert> <select id="selDeptById" parameterType="Long" resultType="Dept"> select * from dept where deptid = #{deptId} </select> <select id="selDept" resultType="Dept"> select * from dept </select> </mapper> ### 九、编写Service层 ### 编写Service接口 package com.buba.springcloud.service; import com.buba.springcloud.pojo.Dept; import java.util.List; /** * 部门Service接口 */ public interface DeptService { boolean addDept(Dept dept); Dept selDeptById(Long deptId); List<Dept> selDept(); } 编写Service实现 package com.buba.springcloud.service; import com.buba.springcloud.dao.DeptMapper; import com.buba.springcloud.pojo.Dept; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class DeptServiceImpl implements DeptService { private DeptMapper deptMapper; @Override public boolean addDept(Dept dept) { return deptMapper.addDept(dept); } @Override public Dept selDeptById(Long deptId) { return deptMapper.selDeptById(deptId); } @Override public List<Dept> selDept() { return deptMapper.selDept(); } @Autowired public void setDeptMapper(DeptMapper deptMapper) { this.deptMapper = deptMapper; } } ### 十、编写提供服务类和启动类 ### (1)提供Restful服务 package com.buba.springcloud.controller; import com.buba.springcloud.pojo.Dept; import com.buba.springcloud.service.DeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 提供Restful服务 */ @RestController public class DeptController { private DeptService deptService; @PostMapping("/dept/addDept") public boolean addDept(Dept dept) { return deptService.addDept(dept); } @GetMapping("/dept/get/{deptId}") public Dept selDeptById(@PathVariable("deptId") Long deptId) { return deptService.selDeptById(deptId); } @GetMapping("/dept/list") public List<Dept> selDept() { return deptService.selDept(); } @Autowired public void setDeptService(DeptService deptService) { this.deptService = deptService; } } (2)启动类 package com.buba.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DeptProvider_8001 { public static void main(String[] args) { SpringApplication.run(DeptProvider_8001.class, args); } } (3)启动测试 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 4][] 在浏览器输入地址![20210120204020540.png][] 返回结果 ![20210120204044506.png][] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70]: /images/20221119/c6a31d56fa2e458f8318b92608dc01b5.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 1]: https://img-blog.csdnimg.cn/20210120191312810.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 2]: https://img-blog.csdnimg.cn/20210120192412460.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 3]: https://img-blog.csdnimg.cn/20210120194745241.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx_size_16_color_FFFFFF_t_70 4]: https://img-blog.csdnimg.cn/20210120204218236.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjk4MzUx,size_16,color_FFFFFF,t_70 [20210120204020540.png]: https://img-blog.csdnimg.cn/20210120204020540.png [20210120204044506.png]: https://img-blog.csdnimg.cn/20210120204044506.png
还没有评论,来说两句吧...