SpringData是一個用於簡化數據庫訪問,並支持雲服務的開源框架。其主要目標是使得
數據庫的訪問變得方便快捷,並支持map-reduce框架和雲計算數據服務。此外,它還支持
基於關系型數據庫的數據服務,如Oracle RAC等。對於擁有海量數據的項目,可以用SpringData
來簡化項目的開發,就如SpringFrameWork對JDBC、ORM的支持一樣,SpringData會讓數據的訪問
變得更加方便。
Spring Data JPA: 可以極大的簡化JPA的寫法,可以在幾乎不用寫實現的情況下,實現對數據
的訪問和操作。除了CRUD外,還包括如分頁、排序等一些常用功能。
首先,我們需要知道的情況是Spring Data是一個開源框架,在這個框架中Spring Data JPA
只是這個框架中的一個模塊,所以名字才叫Spring Data JPA。如果單獨使用JPA開發,你會發現
和使用JDBC開發一樣很繁瑣。所以Spring Data JPA 的出現就是為了簡化JPA的寫法,讓你只需要
編寫一個接口繼承一個類就能實現CRUD操作了。
步驟一:在pom文件中添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
步驟二:
application.properties中的配置:
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/y2156
spring.datasource.username=root
spring.datasource.password=55163
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.max-active = 20
spring.datasource.max-idle = 8
spring.datasource.min-idle=8
spring.datasource.initial-sixe=10
######Spring jpa的配置信息
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
步驟三:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
//EmpInfo是一個可以持久化的類
@Entity
public class EmpInfo {
@Id
@GeneratedValue //主鍵的生成策略 mysql 自增 支持序列的數據庫 序列
private Integer empno;
private String empname;
private Integer deptno;
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
}
步驟四:dao層
import cn.happy.entity.EmpInfo;
import org.springframework.data.repository.CrudRepository;
public interface IEmpInfoDAO extends CrudRepository<EmpInfo,Integer> {
}
步驟五:service層及service實現類
import cn.happy.entity.EmpInfo;
import java.util.List;
public interface IEmpInfoService {
public void save(EmpInfo empInfo);
public List<EmpInfo> findAll();
}
import cn.happy.dao.IEmpInfoDAO;
import cn.happy.entity.EmpInfo;
import cn.happy.service.IEmpInfoService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service("empInfoService")
public class EmpInfoServiceImpl implements IEmpInfoService {
//注入一個dao的接口
@Resource(name="IEmpInfoDAO")
private IEmpInfoDAO empInfoDAO;
@Override
@Transactional
public void save(EmpInfo empInfo) {
empInfoDAO.save(empInfo);
}
@Override
public List<EmpInfo> findAll() {
return (List<EmpInfo>) empInfoDAO.findAll();
}
}
步驟六:controller類
import cn.happy.entity.EmpInfo;
import cn.happy.service.IEmpInfoService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.List;
@Controller
@RequestMapping("/second")
public class EmpInfoController {
//注入service
@Resource(name="empInfoService")
private IEmpInfoService empInfoService;
//添加記錄
@RequestMapping("/save")
@ResponseBody
public String save(){
EmpInfo info = new EmpInfo();
info.setEmpname("微冷的雨");
info.setDeptno(5);
empInfoService.save(info);
return "add ok!";
}
//查詢所有記錄
@RequestMapping("/findAll")
@ResponseBody
public Object findAll(){
List<EmpInfo> list =empInfoService.findAll();
return list;
}
}
CrudRepository介紹
是一個接口,繼承Repository
Repository不提供任何方法,是一個標志接口
如果我們定義的接口繼承了Repository,則該接口會被IOC容器識別為一個Repository Bean
納入IOC容器中,進而可以在該接口中定義滿足一定規范的方法。
查詢方法以find|read|get開頭
涉及查詢條件時,條件的屬性用條件關鍵字連接,要注意的是條件屬性以首字母大寫
使用@Query注解可以自定義JPQL語句實現更靈活的查詢