我正在学习 Spring Boot 和 JPA、Spring Data Rest、H2 数据库,并且我找到了一个教程。我试图理解它,这是一个简单的例子,但我不明白一些东西。为什么没有必要放@Repository
or @Component
在 AlienRepo 类中?
repo 对象被注入到外星人控制器类,我从之前的教程中知道你需要使用@Component
or @Repository
。我认为使用这个注释是强制性的。
控制器:
package com.dgs.springbootjpa.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.dgs.springbootjpa.dao.AlienRepo;
import com.dgs.springbootjpa.model.Alien;
@Controller
public class AlienController {
@Autowired
AlienRepo repo;
@RequestMapping("/")
public String home() {
return "home.jsp";
}
@RequestMapping("/addAlien")
public String addAlien(Alien alien) {
repo.save(alien);
return "home.jsp";
}
}
POJO:
package com.dgs.springbootjpa.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Alien {
@Id
private int aid;
private String aname;
public int getAid() {
return aid;
}
public void setAid(int aid) {
this.aid = aid;
}
public String getAname() {
return aname;
}
public void setAname(String aname) {
this.aname = aname;
}
@Override
public String toString() {
return "Alien [aid=" + aid + ", aname=" + aname + "]";
}
}
dao接口:
package com.dgs.springbootjpa.dao;
import org.springframework.data.repository.CrudRepository;
import com.dgs.springbootjpa.model.Alien;
public interface AlienRepo extends CrudRepository<Alien, Integer> {
}
您可以在外星人仓库接口没有@Repository
or @Component
并且代码运行成功。
谢谢你!
更新 - - - - - - - - - - - - - - - - - - - - - - -
我想从数据库中获取数据,并添加以下代码。我想问你为什么@RequestParam不是强制性的?如果我删除 @RequestParam,应用程序将成功运行。
@RequestMapping("/getAlien")
public ModelAndView addAlien(@RequestParam int aid) {
ModelAndView mv = new ModelAndView("showAlien");
Alien alien = repo.findById(aid).orElse(new Alien());
mv.addObject(alien);
return mv;
}