Spring boot+Mysql+Spring data JPA一個Web的Demo

1.概述

由於要用spring boot,最近剛剛學習.這是一個web項目的配合mysq+Hibernate+tomcat的簡單示例demo,很容易在此基礎上擴展成本身的項目.java

2.建立初始spring demo

做者用的IDE是IDEA,新建一個工程,選擇Spring Initalizer.
在這裏插入圖片描述
下一步的話因爲做者須要部署到服務器上面,選擇了war.不須要的話能夠選擇jar.
在這裏插入圖片描述
選擇spring web+spring Data JPA+Mysql Driver.
在這裏插入圖片描述mysql

在這裏插入圖片描述

在這裏插入圖片描述
而後完成便可,首次運行的話配置依賴須要一點時間,請耐心等待.git

3.配置數據源

配置數據源分爲兩部分,一部分是建表與建用戶,另外一部分是在application.properties中配置的.github

(1)建庫

create database test;

注意這裏不用建立表了,由於Hibernate從實體類自動建立一個同名的表.web

(2)建用戶

create user 'db'@'%' identified by 'xxxxx';

(3)用戶受權

grant all on test.* to 'db'@'%';

這裏建議受權all,由於後面Hibernate會用到建表權限,不能僅僅受權增刪查改.spring

(4)配置application.properties

配置四個屬性:sql

spring.jpa.hibernate.ddl-auto=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

第一個屬性是能夠取值數據庫

  • none
  • update
  • create
  • create-drop

a.none

none是對mysql的默認值,不會改變數據庫結構.json

b.update

Hibernate會根據給出的實體類去改變數據庫.tomcat

c.create

建立數據庫可是不會在關閉的時候刪除.

d.create-drop

建立數據庫,當SessionFactory關閉時刪除數據庫.這個是對H2與其餘嵌入式數據庫的默認選項.

第一次運行時必須設置爲update或create,由於還不知道確切的實體類,第一次運行後,能夠設置爲update或none.
url的話對於mysql來講是

jdbc:mysql://ip:3306/database

剩下的兩個爲用戶名與密碼.
如下是做者的配置,供參考:
在這裏插入圖片描述

4.建立實體類

這裏建立一個簡單的User實體類,須要用到javax中的Entity,Id,GeneratedValue與GenerationType註解.
Entity用於標識實體類,Id用於標識主鍵,GeneratedValue與GenerationType用於配置主鍵.

package com.test;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

除了主鍵以外,能夠加上本身想要的屬性,還有setter與getter,Hibernate會自動將實體類製做成一個數據表.

5.建立Repository

建立倉庫保存用戶記錄.須要繼承CrudRepository<T,ID>,第一個類型爲實體類,第二個類型爲主鍵類型.

package com.test;

import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User,Integer>
{
}

6.建立控制器

控制器用於控制Http請求,在控制器中能夠配置不一樣的路徑實現不一樣的操做.

package com.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping(path = "/demo")
public class MainController {
    @Autowired
    private UserRepository userRepository;
    
    @PostMapping(path = "/add")
    public @ResponseBody String addNewUser(@RequestParam String name)
    {
        User user = new User();
        user.setName(name);
        userRepository.save(user);
        return "Saved.";
    }
    
    @GetMapping(path = "/all")
    public @ResponseBody Iterable<User> getAllUsers()
    {
        return userRepository.findAll();
    }
}

@RequestMapping中的值表示url以此值開頭.
@PostMapping是僅處理post請求的路徑.
@ResponseBody表示返回的類型.
@RequestParam表示一個從get或post中獲取的參數.
getAllUsers()會返回一個json或者xml.

7.IDE上測試

首先輸入

localhost:8080/demo/all

因爲做者先前已經有一行數據因此有顯示.
在這裏插入圖片描述
不然的話應該顯示爲[]
接下來能夠添加數據:

curl localhost:8080/demo/add -d name=123

迴應:
在這裏插入圖片描述
接下來能夠選擇再次查看:
在這裏插入圖片描述
在看看數據庫:
在這裏插入圖片描述

8.打包發佈

Build->Build Artifacts.
在這裏插入圖片描述
在這裏插入圖片描述
Build便可.
而後會在項目目錄的target下有一個test-0.0.1-xxx的war文件,就是這個了.
在這裏插入圖片描述
更名字放到tomcat的webapps/下,好比做者改爲了demo.war:
在這裏插入圖片描述
而後能夠去訪問了,注意路徑,這裏的路徑是war的路徑再加上@RequestMapping中的路徑再加上 @PostMapping或 @GetMapping路徑:
在這裏插入圖片描述
完成!

9.完整代碼

相關文章
相關標籤/搜索