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);  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容