SpringDataJpa

125 阅读3分钟

1.Spring-Data-Jpa

1.1简介

1.1.1.描述

在SpringData中,提供了一套统一的接口来实现对数据访问层的操作,就是Repository接口。在接口中提供了基本的CRUD,查询,排序和分页的相关操作。

SpringData 主要 API:

  • Repository:统一接口

  • RevisionRepository>:基于乐观锁机制

  • CrudRepository:基本CRUD操作

  • PagingAndSortingRepository:基本CRUD以及分页

1.1.2.SpringDataJpa实现

img

如图所示,对于我们的Java程序而言想要访问数据库只需要调用SpringData的统一API方法就可以,而至于调用方法之后怎么完成任务,则不需要我们担心,SpringData 针对不同的技术有很多的实现,例如:SpringData Redis,SpringData Jpa,SpringData MongoDB等,而SpringData Jpa 就是对关系型数据库的实现。

1.2代码示例

1.2.1新建实体类Customer

package com.jett.springdatajpa.Entity;


import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name="Customer")
public class Customer implements Serializable {
    /*
    *  1. 设置id为主键
    *  2. 设置id自增(Oracle无自增处理)
    *  3.
    * */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String firstName;
    private String lastName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "id=" + id +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                '}';
    }
}


1.2.2.创建Repository

package com.jett.springdatajpa.Dao;

import com.jett.springdatajpa.Entity.Customer;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 *  Dao层仓库,用于仿问数据库
*/
@Repository
public interface CustomerRepository extends CrudRepository<Customer,Integer> {
//    Customer findCustomerById(Integer id);
   // Customer save(Customer customer);
  //  List<Customer> findAll();
  //  void deleteById(Integer id);
    List<Customer> findCustomerById(Integer Id);
    List<Customer> findCustomerByLastName(String lastName);
}


1.2.3.创建Service

package com.jett.springdatajpa.Service;

import com.jett.springdatajpa.Entity.Customer;

import java.util.List;
import java.util.Optional;

public interface CustomerService {
    Optional<Customer> findById(String id);

    Customer save(Customer customer);

    void deleteById(String id);

    void deleteAll();

    List<Customer> findAll();

    List<Customer> findCustomerByLastName(String lastName);
    List<Customer> findCustomerById(Integer Id);
    Long count();
}

1.2.4.创建ServcieImpl

package com.jett.springdatajpa.Service.Impl;

import com.jett.springdatajpa.Dao.CustomerRepository;
import com.jett.springdatajpa.Entity.Customer;
import com.jett.springdatajpa.Service.CustomerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class CustomerServiceImpl implements CustomerService {
    private Logger logger= LoggerFactory.getLogger(this.getClass());
//    @Resource
    @Autowired
    CustomerRepository customerRepository;
    @Override
    public Optional<Customer> findById(String id) {
        logger.debug("findById->id="+id);
        return customerRepository.findById(Integer.parseInt(id));
    }

    @Override
    public List<Customer> findAll() {
        logger.debug("findAll");
        return (List<Customer>) customerRepository.findAll();
    }

    @Override
    public List<Customer> findCustomerByLastName(String lastName) {
        return customerRepository.findCustomerByLastName(lastName);
    }

    @Override
    public List<Customer> findCustomerById(Integer Id) {
        return customerRepository.findCustomerById(Id);
    }

    @Override
    public Long count() {
        return customerRepository.count();
    }

    @Override
    public Customer save(Customer customer) {
        logger.debug("save->customer:"+customer);
        return customerRepository.save(customer);
    }

    @Override
    public void deleteById(String id) {
        logger.debug("deleteById id="+id);
        customerRepository.deleteById(Integer.parseInt(id));
    }

    @Override
    public void deleteAll() {
        logger.debug("deleteAll");
        customerRepository.deleteAll();
    }




}

1.2.5.创建Controller

package com.jett.springdatajpa.Controller;

import com.jett.springdatajpa.Entity.Customer;
import com.jett.springdatajpa.Resp.ResultInfo;
import com.jett.springdatajpa.Service.CustomerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("Customer")
public class CustomerController {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
    CustomerService customerService;
    @GetMapping("getCustomerByLastName")
    public ResultInfo getCustomerByLastName(String lastName) {
        logger.info("getCustomerByLastName:"+lastName);
        ResultInfo<Customer> resultInfo= new ResultInfo<>();
        List<Customer> lCustomer= customerService.findCustomerByLastName(lastName);
        resultInfo.setLData(lCustomer);
//        Long lCnt =  customerService.count();
//        logger.info("lCnt="+lCnt);
        if(lCustomer.size()==0){
            resultInfo.setErrCode("0001");
            resultInfo.setErrmsg("查无数据");
        }else{
            resultInfo.setErrCode("0000");
            resultInfo.setErrmsg("查询成功");

        }
        return resultInfo;
    }
    @GetMapping("getAllCustomer")
    public ResultInfo getAllCustomer() {
        logger.info("getAllCustomer");
        ResultInfo<Customer> resultInfo= new ResultInfo<>();
        List<Customer> lCustomer=customerService.findAll();
        resultInfo.setLData(lCustomer);
        if(lCustomer.size()==0){
            resultInfo.setErrCode("0001");
            resultInfo.setErrmsg("查无数据");
        }else{

            resultInfo.setErrCode("0000");
            resultInfo.setErrmsg("查询成功");
        }
        return resultInfo;
    }

    @GetMapping("getCustomer")
    public ResultInfo getCustomer(String CustomerId) {
        logger.info("getCustomer请求参数:" + CustomerId);
        ResultInfo<Customer> resultInfo= new ResultInfo<>();

        if(CustomerId==null || "".equals(CustomerId.trim())){
            resultInfo.setErrCode("1001");
            resultInfo.setErrmsg("查询Id为空");
            return resultInfo;
        }

        List<Customer> customer=customerService.findCustomerById(Integer.parseInt(CustomerId));
//        Long lCnt=customerService.count();
        resultInfo.setLData(customer);
//        logger.info("lCnt="+lCnt);
        if(customer.size()==0)
        {
            resultInfo.setErrCode("0001");
            resultInfo.setErrmsg("查无数据");

        }else{
            resultInfo.setErrCode("0000");
            resultInfo.setErrmsg("查询成功");
        }
        return resultInfo;
    }



    @PostMapping("saveCustomer")
    public ResultInfo<Customer> saveCustomer(Customer customer) {
        logger.info("saveCustomer请求参数:" + customer.toString());
        ResultInfo resultInfo = new ResultInfo();
        List<Customer> lCustomer = new ArrayList();
        Customer newCustomer = customerService.save(customer);
        lCustomer.add(newCustomer);
        resultInfo.setLData(lCustomer);
        resultInfo.setErrmsg("数据保存成功");
        resultInfo.setErrCode("0000");
        return resultInfo;
    }
    @DeleteMapping("deleteCustomer")
    public void deleteCustomer(String id){
        logger.info("deleteCustomer");
        customerService.deleteById(id);
    }
    @DeleteMapping("deleteAllCustomer")
    public void deleteAllCustomer(){
        logger.info("deleteAllCustomer");
        customerService.deleteAll();
    }
}

1.2.6创建通用返回类

package com.jett.springdatajpa.Resp;

import java.util.List;

public class ResultInfo<T>{
    private String errCode;
    private String errmsg;
    private List<T> LData;

    public String getErrCode() {
        return errCode;
    }

    public void setErrCode(String errCode) {
        this.errCode = errCode;
    }

    public String getErrmsg() {
        return errmsg;
    }

    public void setErrmsg(String errmsg) {
        this.errmsg = errmsg;
    }

    public List<T> getLData() {
        return LData;
    }

    public void setLData(List<T> LData) {
        this.LData = LData;
    }
}

1.2.7.application.properties配置

spring.datasource.url=jdbc:oracle:thin:@12.8.0.100:1521:HELOWIN
spring.datasource.username=poin
spring.datasource.password=poin
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

spring.jpa.hibernate.ddl-auto=update
spring.jpa.database=oracle
spring.jpa.show-sql=true