Spring Boot+MySQL+Spring Data JPA一個Web的Demo

2020.06.23 更新

1 概述

一個簡單的web項目配合MySQL+Hibernate+Tomcat的簡單示例demo,很容易在此基礎上擴展成本身的項目.java

2 建立工程

筆者IDE爲IntelliJ IDEA,新建一個工程,選擇Spring Initalizer:
在這裏插入圖片描述
下一步的話因爲須要部署到服務器上面,選擇了war.不須要的話能夠選擇jar.
在這裏插入圖片描述
選擇Spring Web+Spring Data JPA+MySQL Driver.
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
而後完成便可,首次運行的話配置依賴須要一點時間,請耐心等待.mysql

3 配置數據源

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

3.1 建立庫與用戶

create database test;

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

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

3.2 用戶受權

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

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

3.3 配置application.properties

配置四個屬性:spring

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

第一個屬性是能夠取值sql

  • none:none是對MySQL的默認值,不會改變數據庫結構.
  • update:Hibernate會根據給出的實體類去改變數據庫.
  • create:建立數據庫可是不會在關閉的時候刪除.
  • create-drop:建立數據庫,當SessionFactory關閉時刪除數據庫.這個是H2與其餘嵌入式數據庫的默認選項.

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

jdbc:mysql://ip:3306/database

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

4 實體類

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

@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>,第一個類型爲實體類,第二個類型爲主鍵類型.

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

6 控制層

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

@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-&gt;Build Artifacts.br/>![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20191126002525722.jpg)
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20191126002457453.jpg)
Build便可.
而後會在項目目錄的target下有一個WAR文件,就是這個了.
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20191126002610710.png)
更名字放到Tomcat的`webapps`下,好比筆者改爲了`demo.war`:
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20191126002746230.png)
接着能夠去訪問了,注意路徑,這裏的路徑是WAR的路徑加上`@RequestMapping`的路徑再加上`@PostMapping`或`@GetMapping`路徑:
在這裏插入圖片描述

9 完整代碼

若是以爲文章好看,歡迎點贊。

同時歡迎關注微信公衆號:氷泠之路。

在這裏插入圖片描述

相關文章
相關標籤/搜索