JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。
Sun引入新的JPA ORM規範出於兩個原因:其一,簡化現有Java EE和Java SE應用開發工作;其二,Sun希望整合ORM技術,實現天下歸一。
用spring boot創建一個JPA實例需要以下幾個步驟:
- 創建配置文件,默認在src/main/resource下
- 創建實體類
- 創建jpa repository類操作持久化(CrudRepository)
- 創建service類
- 創建controller
- 測試
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ziyu.springboot</groupId>
<artifactId>boot3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- spring boot 必須引入的 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<!-- spring boot devtools熱部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional><!-- optional=true,依賴不會傳遞,該項目依賴devtools;之後依賴myboot項目的項目如果想要使用devtools,需要重新引入 -->
</dependency>
<!-- spring boot 必須依賴的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql驅動配置依賴包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 添加spring-data-jpa依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 資源文件拷貝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
然後在src/main/resource目錄下創建一個配置文件application.properties,代碼如下:
###### mysql連接池 #######
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456789
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##### spring jpa #######
spring.jpa.database=MYSQL
# 顯示mysql語句
spring.jpa.show-sql=true
# 對應的mysql操作
spring.jpa.hibernate.ddl-auto=update
# 命名策略,創建實體類後悔自動在表中創建表結構
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
之後在src/main/java目錄下創建一個包,包名隨便,比如com.ziyu.hibernate,然後在該包下創建四個包,包名分別是: bean,controller,repository,service在bean包下創建一個實體類Cat.java,代碼如下:
package com.ziyu.hibernate.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/*
* @Entity 會在數據庫中產生對應的表結構信息
*
* @id 指定主鍵
*
* GeneratedValue(strategy=GenerationType.AUTO)指定主鍵的生成策略 ,mysqk默認是自增長
*/
@Entity
public class Cat {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String catName;
private int catAge;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
public int getCatAge() {
return catAge;
}
public void setCatAge(int catAge) {
this.catAge = catAge;
}
}
在com.ziyu.hibernate目錄下創建一個啓動類HelloApplication.java,代碼如下:package com.ziyu.hibernate;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@SpringBootApplication(exclude = { RedisAutoConfiguration.class })
@Configuration
@EnableAutoConfiguration
public class HelloApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(HelloApplication.class);
app.setBannerMode(org.springframework.boot.Banner.Mode.OFF);
app.run(args);
}
}
啓動spring boot,在HelloApplication右鍵Run As > Java Application如果在test數據庫裏生成了一個cat表如下圖,那麼就到這裏就已經初步完成了!
接下來在respository包下新建一個接口CatRepository,該接口繼承了CrudRepository<Cat, Integer>,代碼如下:
package com.ziyu.hibernate.repository;
import org.springframework.data.repository.CrudRepository;
import com.ziyu.hibernate.bean.Cat;
public interface CatRepository extends CrudRepository<Cat, Integer>{
}
之後在service層創建一個類CatService,代碼如下:package com.ziyu.hibernate.service;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.ziyu.hibernate.bean.Cat;
import com.ziyu.hibernate.repository.CatRepository;
@Service
public class CatService {
@Resource
private CatRepository catRepository;
/*
*
* update,save,delete都方法需要綁定事務
*
* 用@Transactional進行事務綁定
*/
@Transactional
public void save(Cat cat) {
catRepository.save(cat);
}
@Transactional
public void delete(int id) {
catRepository.delete(id);
}
public Iterable<Cat> getAll() {
return catRepository.findAll();
}
}
最後在controller層創建CatController,代碼如下:
package com.ziyu.hibernate.controller;
import java.util.Iterator;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ziyu.hibernate.bean.Cat;
import com.ziyu.hibernate.service.CatService;
@RequestMapping("/cat")
@RestController
public class CatController {
@Resource
private CatService catService;
@RequestMapping("/save")
public String save() {
Cat cat = new Cat();
cat.setCatName("peety");
cat.setCatAge(18);
catService.save(cat);
return "save ok";
}
@RequestMapping("/del")
public String del() {
catService.delete(1);
return "del ok";
}
@RequestMapping("/getAll")
public Iterator<Cat> getAll() {
return catService.getAll().iterator();
}
}
做到這裏代碼就已經全部完成了,接下來啓動HelloApplication測試:瀏覽器輸入地址:http://localhost:8080/cat/save 看到如下結果:
接着輸入地址:http://localhost:8080/cat/getAll,結果如下:
再測試delete,http://localhost:8080/cat/del ,結果如下:
OK,測試成功!!
有問題的可以再下面留言。