SpringBoot持久層支援-springboot中如何運用JPA,簡單例子
阿新 • • 發佈:2019-02-05
- JPA概念
JPA(Java Persistence API)是Sun官方提出的Java持久化規範,用來方便大家操作資料庫。
真正幹活的可能是Hibernate,TopLink等等實現了JPA規範的不同廠商,預設是Hibernate。
本知識演示如何在Springboot中快捷方便地使用JPA。 - 建立資料庫
建立資料庫,名稱是 how2javacreate database how2java;
- 建立表
建立個分類表,欄位很簡單,就id和nameuse how2java; CREATE TABLE category_ ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(30), PRIMARY KEY (id) ) DEFAULT CHARSET=UTF8;
- 準備資料
插入4條資料insert into category_ values(null,'category 1'); insert into category_ values(null,'category 2'); insert into category_ values(null,'category 3'); insert into category_ values(null,'category 4');
- 先執行,看到效果,再學習
老規矩,先下載右上角的可執行專案,配置執行起來,確認可用之後,再學習做了哪些步驟以達到這樣的效果。
測試地址:
注: 啟動方式是Springboot特有的,直接執行類:com.how2java.springboot.Application 的主方法。http://127.0.0.1:8080/listCategory
- 基於前面的知識點
本知識點基於錯誤處理開發,所以最好要把前面的內容學習了哦,不然有些內容恐怕看不懂呢 - application.properties
新增資料庫連結必須的引數
表示會自動更新表結構,所以建立表 這一步其實是可以不需要的~spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp spring.datasource.url=jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=admin spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=update
- pom.xml
增加對mysql和jpa的支援<!-- mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <!-- jpa--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
<?xml version="1.0" encoding="UTF-8"?> <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.how2java</groupId> <artifactId>springboot</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot</name> <description>springboot</description> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- servlet依賴. --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!-- tomcat的支援.--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!-- 這個需要為 true 熱部署才有效 --> </dependency> <!-- mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <!-- jpa--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
- Category
增加一個包:com.how2java.springboot.pojo,然後建立實體類Category。
@Entity 註解表示這是個實體類
@Table(name = "category_") 表示這個類對應的表名是 category_ ,注意有下劃線哦
@Id 表明主鍵
@GeneratedValue(strategy = GenerationType.IDENTITY) 表明自增長方式
@Column(name = "id") 表明對應的資料庫欄位名@Entity @Table(name = "category_") public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private int id; @Column(name = "name") private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
- CategoryDAO
增加一個包:com.how2java.springboot.dao,然後建立dao介面CategoryDAO,繼承了JpaRepository,並且提供泛型<Category,Integer> 表示這個是針對Category類的DAO,Integer表示主鍵是Integer型別。
JpaRepository 這個父介面,就提供了CRUD, 分頁等等一系列的查詢了,直接拿來用,都不需要二次開發的了。public interface CategoryDAO extends JpaRepository<Category,Integer>{ }
- CategoryController
增加一個包:com.how2java.springboot.controller,然後建立CategoryController 類。
1. 接受listCategory對映
2. 然後獲取所有的分類資料
3. 接著放如Model中
4. 跳轉到listCategory.jsp中@Controller public class CategoryController { @Autowired CategoryDAO categoryDAO; @RequestMapping("/listCategory") public String listCategory(Model m) throws Exception { List<Category> cs=categoryDAO.findAll(); m.addAttribute("cs", cs); return "listCategory"; } }
- listCategory.jsp
用jstl遍歷從CategoryController 傳遞過來的集合:cs.<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <table align='center' border='1' cellspacing='0'> <tr> <td>id</td> <td>name</td> </tr> <c:forEach items="${cs}" var="c" varStatus="st"> <tr> <td>${c.id}</td> <td>${c.name}</td> </tr> </c:forEach> </table>
- 重啟測試
因為在pom.xml中增加了jar包的以來,所以僅僅通過Springboot本身的熱部署是無法起作用的,得手動重啟一下。
然後訪問測試地址:
觀察到如圖所示的效果http://127.0.0.1:8080/listCategory
- 更多關於JPA
後面有一個JPA的CRUD和分頁,可以學習到更多的關於JPA的知識