五、spring-data-Jpa 数据库操作

概述:java persistence API定义了一些列对象持久化的标准,目前实现这一规范的产品有hibernate、topLink

      1、pom.xml中添加组件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jpa</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-comector-java</artifactId>
</dependency>

      2、配置数据库相关信息

      在application.yml中配置(在这里配置生产环境和开发环境都可以使用)
idea中键入spring.datasoure. driver快捷输入(我也忘了driver前是否加空格了)
datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgril
    username: root
    password: root
3、一些数据库的相关操作
   create 
      每次启动应用创建一个空表,若数据库中有同名表则把旧表删除后再创建
   update
      每次启动应用创建一个表,如果数据库表中有数据,仍然保留数据
   create-drop
      应用停止的时候,将数据库中的表删除
   none
      默认的,什么都不做
   Validate
      验证类中的属性和表结构是否一致,若不一致则报错
spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgril
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
4、对数据的一些操作
PUT请求方式body不能使用form-data,需要使用x-www-form-urlencoded
  1. 创建实体类
        @Entity 在类名上需要添加该注解
      @Id 在id变量上添加该注解声明主键
      @GeneratedValue 在id变量上声明该注解表示自动新增
        添加get、set方法以及构造方法
  2. 声明一个接口并继承JpaRepository<T,ID>
      T:实体类的类名
       ID:Id的数据类型
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface GrilRepository extends JpaRepository<Gril,Integer>{
    //拓展通过年龄查询
    public List<Gril> findByAge(Integer age);
}
  3. 建一个类用 @RestController注解,
        使用 @Autowired 将接口类注入(简单示例)
  4.使用对象的方式进行数据库的交互
    创建一个方法使用 Mapping 注解,并在方法内使用jpa提供的数据库的操作方法
      findAll()  查询所有
      findOne(id) 通过id查找一个数据库对象
      delete(id) 通过id删除一个数据库对象
      save(S s)  新增或者修改
(如果不传主键id进行新增操作;如果传递了主键id,先在数据库中根据id查找是否有数据,如果没有则新增,如果有则修改)
 如果遇到修改部分数据的时候,使用对象的方式保存会导致其它的字段赋值为null
    第一种解决方式:使用原生的sql进行更新
    第二种解决方式:先进行findOne(id)查找对象,然后set完要更新的字段,最后进行save(gril)更新
  5.拓展通过其它变量查询数据库值
  在接口中定义抽象方法;
public List<Gril> findByAge(Integer age);
附:code示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class GrilController {
    @Autowired
    private GrilRepository grilRepository;
    //查询女生列表
    @GetMapping(value = "/grils")
    public List<Gril> girlList(){
        List<Gril> list = grilRepository.findAll();
        return list;
    };
    //添加一个女生
    @PostMapping(value = "/grils")
    public Gril grilAdd(@RequestParam("cupSize")String cupSize,
                          @RequestParam("age")Integer age){
        Gril gril = new Gril();
        gril.setCupSize(cupSize);
        gril.setAge(age);

        return  grilRepository.save(gril);
    }
    //通过id查询一个女生
    @GetMapping(value = "/grils/{id}")
    public Gril grilFindOne(@PathVariable("id") Integer id){
        Gril gril = grilRepository.findOne(id);
        return gril;
    }
    //通过id更新一个女生
    @PutMapping(value = "/grils/{id}")
    public Gril grilUpdate(@PathVariable("id")Integer id,
                           @RequestParam("cupSize")String cupSize,
                           @RequestParam("age")Integer age){
        Gril gril = new Gril();
        gril.setId(id);
        gril.setCupSize(cupSize);
        gril.setAge(age);

        return  grilRepository.save(gril);
    }
//通过id删除一个女生
    @DeleteMapping(value = "/grils/{id}")
    public void grilDlete(@PathVariable("id")Integer id){
        grilRepository.delete(id);
    }

    //通过年龄查询
    @GetMapping("/grils/age/{age}")
    public List<Gril> findByAge(@PathVariable(value = "age") Integer age){

          return  grilRepository.findByAge(age);

    }
}

 

posted @ 2019-03-21 00:43  杜小二  阅读(267)  评论(0编辑  收藏  举报