接下來我們可以實現(xiàn)第一個讀取數(shù)據(jù)的服務了尘奏。
定義實體類 - POJO
以 Category
這個接口為例,要讀取CATEGORY
表的數(shù)據(jù)困檩,那么首先要有一個實體類與該表做映射。實際上就是Java POJO類叁征,每一個該類的對象谁榜,就代表數(shù)據(jù)庫表里的一行。
Category.java
@Entity
@Table(name = "CATEGORY")
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "CATEGORY_ID")
private Integer categoryId;
@Column(name = "CATEGORY_NM")
private String categoryNm;
@Column(name = "CREATE_ID")
private String createId;
@Column(name = "UPDATE_ID")
private String updateId;
@Column(name = "CREATE_TS")
private Timestamp createTs;
@Column(name = "UPDATE_TS")
private Timestamp updateTs;
// No-Arg Constructor
// Getter and Setter
}
其中用到的一些Annotation:
@Entity
- 標注在類名上狼犯,且該類需要有一個無參構(gòu)造器和一個主鍵(實體類不可以是final
的)參考:JPA規(guī)范-Entities
@Table
- 指定該類對應的數(shù)據(jù)庫表名余寥,以及所在schema(若有的話)
@Id
- 標識該字段為主鍵
@Column
- 標識該字段對應在數(shù)據(jù)庫表中某一個列的信息,如對應的名稱name = "CATEGORY_ID"
還有很多Annotation這里沒有用到悯森,可以參考 Defining JPA Entities 有更詳細的說明宋舷。
獲取數(shù)據(jù) - Repository
在Spring Data中,Repository<T, ID>
是一個空的"標記"接口瓢姻,它的子接口如CrudRepository<T, ID>
和JpaRepository<T, ID>
都提供了一些基本的CRUD操作方法祝蝠,我們只需要新建一個接口進行繼承,并提供實體類
和ID類型
,就可以使用那些方法绎狭。
這里我新建了一個CategoryRepository
并繼承JpaRepository<T, ID>
接口细溅,類型參數(shù)分別是<Category, Integer>
:
CategoryRepository.java
public interface CategoryRepository extends JpaRepository<Category, Integer> {
}
這樣便可以使用諸如List<T> findAll();
,這樣的基本方法坟岔。
業(yè)務邏輯 (實際干活層) - Service
在定義好對應的Repository后,就可以在Service層注入CategoryRepository
摔桦。調(diào)用時可以看到,有很多基本方法都可以調(diào)用,它們都來自于接口CrudRepository
或JpaRepository
:
CategoryService.java
@Service
public class CategoryService {
@Autowired
private CategoryRepository categoryRepository;
public List<Category> getAll() {
return categoryRepository.findAll();
}
}
控制器 (對外接口層) - Controller
這層很簡單鸥滨,寫好要對外開放的接口即可舍败,這里參考了RESTful接口的設計。
CategoryController.java
@RestController
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
@GetMapping
public List<Category> getAll() {
return categoryService.getAll();
}
}
關(guān)于RESTful的設計兄世,可以參考 RESTful API 設計指南啼辣。簡而言之的理解,我認為就是使用HTTP動詞御滩,URL作為資源鸥拧。比如
GET /category
,即獲取所有的category數(shù)據(jù)