1. 程式人生 > >SpringBoot持久層支援-springboot中如何運用JPA,簡單例子

SpringBoot持久層支援-springboot中如何運用JPA,簡單例子

  1.  JPA概念
    JPA(Java Persistence API)是Sun官方提出的Java持久化規範,用來方便大家操作資料庫。
    真正幹活的可能是Hibernate,TopLink等等實現了JPA規範的不同廠商,預設是Hibernate。
    本知識演示如何在Springboot中快捷方便地使用JPA。
  2.  建立資料庫
    建立資料庫,名稱是 how2java
    create database how2java;
  3.  建立表
    建立個分類表,欄位很簡單,就id和name
    use how2java;
    CREATE TABLE category_ (
      id int(11) NOT NULL AUTO_INCREMENT,
      name varchar(30),
      PRIMARY KEY (id)
    ) DEFAULT CHARSET=UTF8;
  4. 準備資料
    插入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');
  5.  先執行,看到效果,再學習
    老規矩,先下載右上角的可執行專案,配置執行起來,確認可用之後,再學習做了哪些步驟以達到這樣的效果。
    測試地址:
    http://127.0.0.1:8080/listCategory
    注: 啟動方式是Springboot特有的,直接執行類:com.how2java.springboot.Application 的主方法。
  6.  基於前面的知識點
    本知識點基於錯誤處理開發,所以最好要把前面的內容學習了哦,不然有些內容恐怕看不懂呢
  7.  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
  8.  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>
  9. 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;
        }
         
    }
  10. CategoryDAO
    增加一個包:com.how2java.springboot.dao,然後建立dao介面CategoryDAO,繼承了JpaRepository,並且提供泛型<Category,Integer> 表示這個是針對Category類的DAO,Integer表示主鍵是Integer型別。
    JpaRepository 這個父介面,就提供了CRUD, 分頁等等一系列的查詢了,直接拿來用,都不需要二次開發的了。
    public interface CategoryDAO extends JpaRepository<Category,Integer>{
     
    }
  11.  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";
        }
         
    }
  12.  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>
  13.  重啟測試
    因為在pom.xml中增加了jar包的以來,所以僅僅通過Springboot本身的熱部署是無法起作用的,得手動重啟一下。
    然後訪問測試地址:
     http://127.0.0.1:8080/listCategory
    觀察到如圖所示的效果
  14. 更多關於JPA
    後面有一個JPA的CRUD和分頁,可以學習到更多的關於JPA的知識