如何在单独的Java类上使用SpringBoot RestController来查询数据库?

时间:2017-01-26 22:49:47

标签: java mysql spring-boot

我是SpringBoot的新手,所以请填写免费填写需要的详细信息。

我在SpringBoot应用程序中编写了此Rest Controller,该应用程序按预期工作。我的问题是,如何正确创建此控制器的实例,以便我可以使用它来查询数据库?

我试图做这样的事情,但只是不断出错。

task.error!.localizedDescription

我试图避免在SpringBoot应用程序本身上进行REST调用的情况。

提前多多感谢

2 个答案:

答案 0 :(得分:2)

在控制器上执行数据库调用并不是一个好习惯。您可以使用Spring Data Repository,也可以编写使用存储库(在数据库上执行调用)的服务层代码。

有人可能会这样做

@Service
public class InventoryService {
  @Autowire
  private IInventoryItemRepo inventoryItemRepo;

  @Transactional
  public List<Inventory> getInventories() {
    //other business rules
    return inventoryItemRepo.findAll();
   }
  //some other logic here
}

然后在你的控制器上

    @RestController
    public class InventoryController {

        Logger logger =  LoggerFactory.getLogger(InventoryController.class);

        @Autowired
        private InventoryService inventoryService;
        /**
         * @return all items in inventory
         */
        @HystrixCommand(fallbackMethod="failGood")
        @RequestMapping(value = "/inventory", method = RequestMethod.GET)
        @ResponseBody Iterable<Inventory> getInventory() {
            return inventoryService.findAll();
        }
           ....

    }

如果你想避免在spring上执行调用,你可以将服务层代码注入到将执行调用的组件,假设它是用Spring编写的。

如果没有,你也可以建立一个Message Queue  并在那里发送消息。

另一种选择是Spring Data REST

答案 1 :(得分:1)

您不直接使用控制器来查询数据库,或者这样做不是一个好习惯。

更好的选择是您可以在控制器中使用 Spring数据存储库@Autowire

我通常做的是创建服务类,其中存储库接口是自动装配的。在控制器中,我自动连接服务类

我对以下帖子的回答可能会为您解决更多问题:
Structure of RESTful Service with Java Spring for Beginner