Spring Boot之JpaRepository

結構.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);  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章