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

1.概述

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

2.建立初始spring demo

做者用的IDE是IDEA,新建一個工程,選擇Spring Initalizer.mysql

在這裏插入圖片描述

下一步的話因爲做者須要部署到服務器上面,選擇了war.不須要的話能夠選擇jar.git

在這裏插入圖片描述

選擇spring web+spring Data JPA+Mysql Driver.github

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

而後完成便可,首次運行的話配置依賴須要一點時間,請耐心等待.web

3.配置數據源

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

(1)建庫

create database test;

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

(2)建用戶

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

(3)用戶受權

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

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

(4)配置application.properties

配置四個屬性:json

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

第一個屬性是能夠取值tomcat

  • none
  • update
  • create
  • create-drop

a.none

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

b.update

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

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.完整代碼

相關文章
相關標籤/搜索