1.Spring-Data-Jpa
1.1简介
1.1.1.描述
在SpringData中,提供了一套统一的接口来实现对数据访问层的操作,就是Repository接口。在接口中提供了基本的CRUD,查询,排序和分页的相关操作。
SpringData 主要 API:
-
Repository:统一接口
-
RevisionRepository>:基于乐观锁机制
-
CrudRepository:基本CRUD操作
-
PagingAndSortingRepository:基本CRUD以及分页
1.1.2.SpringDataJpa实现

如图所示,对于我们的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