結構.png
首先我們創建一個數據庫映射的實體類,上一節講了的
package com.alun;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* Created by Administrator on 2017/5/29.
*/
@Entity
public class ManInfo {
@Id
@GeneratedValue
private Integer id;
private Integer age;
private String nickname;
public ManInfo() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
PS:@GeneratedValue註解的strategy屬性提供四種值:
-AUTO主鍵由程序控制, 是默認選項 ,不設置就是這個
-IDENTITY 主鍵由數據庫生成, 採用數據庫自增長, Oracle不支持這種方式
-SEQUENCE 通過數據庫的序列產生主鍵, MYSQL 不支持
-Table 提供特定的數據庫產生主鍵, 該方式更有利於數據庫的移植
@GeneratedValue(strategy=GenerationType.IDENINY)
然後創建一個ManInfoRepository接口文件,繼承JpaRepository,泛型裏填上實體類和id的類型,比如這裏我填的是ManInfo和Integer
package com.alun;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
/**
* Created by Administrator on 2017/5/29.
*/
public interface ManInfoRepository extends JpaRepository<ManInfo,Integer> {
}
然後就可以使用了,這裏我們對數據庫裏進行增刪查改
創建ManInfoController,使用剛纔創建的 ManInfoRepository進行操作,使用 ManInfoRepository
要用到 @Autowired註解, @Autowired可以對成員變量、方法和構造函數進行標註,來完成自動裝配的工作
package com.alun;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Created by Administrator on 2017/5/29.
*/
@RestController
public class ManInfoController {
@Autowired
ManInfoRepository manInfoRepository;
/**
* 查找所有人
* @return
*/
@GetMapping(value = "/getAllManInfo")
List< ManInfo> getAllManInfo(){
return manInfoRepository.findAll();
}
/**
* 根據id找某一個人
* @param id
*/
@DeleteMapping(value = "/getManInfo")
ManInfo getManInfo(@RequestParam("id") Integer id ){
return manInfoRepository.findOne(id);
}
/**
* 添加一個人
* @param age
* @param nickname
* @return
*/
@PostMapping(value = "/addMan")
ManInfo addMan(@RequestParam("age") Integer age ,@RequestParam("nickname") String nickname ){
ManInfo manInfo=new ManInfo();
manInfo.setAge(age);
manInfo.setNickname(nickname);
return manInfoRepository.save(manInfo);
}
/**
* 根據ID修改一個人的信息
* @param id
* @param age
* @param nickname
* @return
*/
@PutMapping(value = "/update")
ManInfo updateManInfo(@RequestParam("id") Integer id , @RequestParam("age") Integer age ,@RequestParam("nickname") String nickname ){
ManInfo manInfo=new ManInfo();
manInfo.setId(id);
manInfo.setAge(age);
manInfo.setNickname(nickname);
return manInfoRepository.save(manInfo);
}
/**
* 根據ID刪除一個人的信息
* @param id
*/
@DeleteMapping(value = "/dlt")
void dltManInfo(@RequestParam("id") Integer id ){
manInfoRepository.delete(id);
}
/**
* 根據年齡查詢
*/
@GetMapping(value = "getManInfoByAge")
List<ManInfo> getManInfoByAge (@RequestParam("age") Integer age){
return manInfoRepository.findByAge(age);
}
}
以上都是根據id進行增刪查改,那麼我要用其他參數的操作,比如年齡(age)怎麼辦呢?!
只需要改改ManInfoRepository 就可以了。
package com.alun;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
/**
* Created by Administrator on 2017/5/29.
*/
public interface ManInfoRepository extends JpaRepository<ManInfo,Integer> {
//擴展,根據年齡查詢,這的方法名必須寫成findByAge .
List<ManInfo> findByAge(Integer age);
}
在ManInfoController使用
/**
* 根據年齡查詢
*/
@GetMapping(value = "getManInfoByAge")
List<ManInfo> getManInfoByAge (@RequestParam("age") Integer age){
return manInfoRepository.findByAge(age);
}
最後我們來看看 JPA中一些常用的查詢操作
//And --- 等價於 SQL 中的 and 關鍵字,比如 findByHeightAndSex(int height,char sex);
public List<User> findByHeightAndSex(int height,char sex);
// Or --- 等價於 SQL 中的 or 關鍵字,比如 findByHeightOrSex(int height,char sex);
public List<User> findByHeightOrSex(int height,char sex);
//Between --- 等價於 SQL 中的 between 關鍵字,比如 findByHeightBetween(int min, int max);
public List<User> findByHeightBetween(int min,int max);
//LessThan --- 等價於 SQL 中的 "<",比如 findByHeightLessThan(int max);
public List<User> findByHeightLessThan(int max);
//GreaterThan --- 等價於 SQL 中的">",比如 findByHeightGreaterThan(int min);
public List<User> findByHeightGreaterThan(int min);
//IsNull --- 等價於 SQL 中的 "is null",比如 findByNameIsNull();
public List<User> findByNameIsNull();
//IsNotNull --- 等價於 SQL 中的 "is not null",比如 findByNameIsNotNull();
public List<User> findByNameIsNotNull();
//NotNull --- 與 IsNotNull 等價;
public List<User> findByNameNotNull();
//Like --- 等價於 SQL 中的 "like",比如 findByNameLike(String name);
public List<User> findByNameLike(String name);
//NotLike --- 等價於 SQL 中的 "not like",比如 findByNameNotLike(String name);
public List<User> findByNameNotLike(String name);
//OrderBy --- 等價於 SQL 中的 "order by",比如 findByNameNotNullOrderByHeightAsc();
public List<User>findByNameNotNullOrderByHeightAsc();
//Not --- 等價於 SQL 中的 "! =",比如 findByNameNot(String name);
public List<User> findByNameNot(String name);
//In --- 等價於 SQL 中的 "in",比如 findByNameIN(String name);
public List<User> findByNameIn(String name);
//NotIn --- 等價於 SQL 中的 "not in",比如 findByNameNotIN(String name);
public List<User> findByNameNotIn(String name);