赞
踩
初学SpringCloud,service对dao层的调用,简单讲一下我service层的代码
我的这篇文章所在的专栏记录的是我的一个简单的项目过程,像连续剧一样。
在目前公认的项目规范中,controller层(具体类)调用service层(接口和实现类),service层调用dao层(接口),dao层(接口)配合实体类,mapper.xml,application.yml跟数据库交换数据。
我的controller层次目前还比较简单,只有一个类,在逻辑上是 支付类
代码如下:
- package com.springcloud.controller;
-
- import com.springcloud.entities.CommonResult;
- import com.springcloud.entities.Payment;
- import com.springcloud.service.PaymentService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.cloud.client.ServiceInstance;
- import org.springframework.cloud.client.discovery.DiscoveryClient;
- import org.springframework.web.bind.annotation.*;
-
- import javax.annotation.Resource;
- import java.util.List;
-
- @RestController
- //下面这个注解的作用我还不是很清楚
- @Slf4j
- public class PaymentController {
- @Resource
- private PaymentService paymentService;
-
- @Value("${server.port}")
- private String serverPort;
-
- //对于注册进eureka里面的服务,我们有一个需求,这个需求就是:
- //我们要通过注册中心,来看到这个服务的信息,比如地址啦什么的
- //下面的这个注入的对象就是这个作用
- //我们可以通过服务发现来获取该服务的信息
- @Resource
- private DiscoveryClient discoveryClient;
- //上面的这个包很容易引错,一定要是上面的才行
-
- @GetMapping("/payment/get/{id}")
- @ResponseBody
- public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
- Payment payment = paymentService.getPaymentById(id);
- System.out.println(payment);
- if (payment!=null){
- System.out.println(payment);
- return new CommonResult(200,"查询数据成功,server.port:"+serverPort,payment);
- }else{
- return new CommonResult(500,"查询数据是空",null);
-
- }
- }
-
- @PostMapping("/payment/create")
- public CommonResult create(@RequestBody Payment payment){
- int result = paymentService.create(payment);
- //log.info("插入成功"+result);
- if (result>0){
- return new CommonResult(200,"插入数据成功,server.port:"+serverPort,result);
-
- }else{
- return new CommonResult(500,"插入数据失败",null);
-
- }
- }
-
- // @GetMapping(value = "/payment/discovery")
- // public Object discovery(){
- // //得到我们的服务清单列表,盘点一下家底,这个还是需要我认真的理解一下的
- // List<String> services = discoveryClient.getServices();
- // for (String service:services) {
- // //log.info("*******service"+service);
- // }
- // List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
- // for (ServiceInstance instance : instances) {
- // //log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
- // }
- //
- // return this.discoveryClient;
- // }
- }
上面的是我的代码,其中有一个被注释掉的方法,这个是后期增加功能的时候,会加上去的方法,目前的话还不涉及。
在这里我有一个问题:我在方法内使用log日志的时候,IDEA工具会给我提醒,info()方法也会给我提醒,但就是当启动这一个微服务的时候,控制台会报错。我查找了一些博客,但是目前还没有解决,我感觉是版本的问题(插件版本,JDK版本,Maven版本,IDEA版本)。这个我后期会再查一下,等解决了,再发博客。也欢迎能解决这个问题的小伙伴给我留言。问题截图如下:
@RestController=@Controller+@ResponseBody
controller层肯定都需要@Controller注解
因为dao层次需要调用service层次,所以我就注入了service层的接口
(在这里有个需要注意的,我在这里注入的是接口,可以正常运行。但是我跟我的小伙伴交流的时候,他一直注入的都是那个实现类,也可以正常运行。原先在学校学习的时候,我们使用的是@Autowired注解,老师注入的是接口还是类,我也记不清楚了,哈哈哈哈哈,我不是好学生)
然后就是一个查询的方法,因为是查询,所以使用@GetMapping注解。使用@ResponseBody注解将返回的对象JSON序列化。
然后就调用注入进来的service接口的对象的方法,查询得到一个payment(实体类)
注意:后面的System.out.println()方法,将这个对象输出,输出的是这个对象的地址。
再往下,就进入到一个判断,返回一个CommonResult对象(这也是一个实体类,后面我会记录到的)
初学SpringCloud:使用Eureka作为服务注册中心,写服务注册中心的微服务模块
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。