首先我们创建一个数据库映射的实体类,上一节讲了的
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);