Spring boot 中Hibernate 使用


spring.jpa.properties.hibernate.hbm2ddl.auto=
有四種配置方式,分別如下:

是hibernate的配置屬性,其主要作用是:自動創建、更新、驗證數據庫表結構。該參數的幾種配置如下:

  • create:每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因。
  • create-drop:每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。
  • update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以后加載hibernate時根據model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等應用第一次運行起來后才會。
  • validate:每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。

 

 

在上面配置中要注意的是“spring.jpa.hibernate.ddl-auto”這個屬性,它有五個value值選着分別是:
1. none 永遠以數據表字段為准,不做任何修改
2. validate 加載hibernate時,驗證創建數據庫表結構,會和數據庫中的表進行比較,不會創建新表,但是會插入新值
3. create 每次加載hibernate,重新創建數據庫表結構,這就是導致數據庫表數據丟失的原因
4. create-drop 加載hibernate時創建,退出是刪除表結構
5. update 加載hibernate自動更新數據庫結構

 

一個Sample,第一張圖看下目錄結構

 

JPA依賴

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

重點看下Dao包下的BookResposibility,自帶的API,都不需要具體寫實現

package com.example.demo.dao;

import com.example.demo.entity.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

public interface BookRepository extends JpaRepository<Book, Long> {

    List<Book> findByAuthor(String author);

    List<Book> findAll();

    List<Book> findByName(String name);

    Book findById(long id);

    @Transactional
    @Modifying
    @Query("update Book set name = ?1  where id = ?2")
    int updateBookName(String name, long id);

}

  

 

還有我的Controller文件,主要的新增,查詢,查詢列表,更新操作  CRUD

package com.example.demo.controller;

import com.example.demo.entity.Book;
import com.example.demo.entity.BookPo;
import com.example.demo.dao.BookRepository;
import com.example.demo.response.ResVoid;
import com.example.demo.response.Response;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@RestController
public class BookController {

    @Value("${uid}")
    String uid;

    @Autowired
    private BookRepository bookRepository;


    @ApiOperation(value = "新增書籍信息", notes = "新增書籍信息")
    @ApiImplicitParam(dataType = "BookPo", name = "bookpo", value = "新增書籍信息")
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ResVoid save(@RequestBody BookPo bookpo) {
        Date dt = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
        String date = sdf.format(dt);
        String bookname = bookpo.getName();
        String bookauthor = bookpo.getAuthor();
        int booknumber = bookpo.getNumber();
        float bookprice = bookpo.getPrice();

        bookRepository.save(new Book(bookname, bookauthor, date, booknumber, bookprice, date, date, uid, uid));
        ResVoid re = new ResVoid();
        re.setCode(200);
        re.setMessage("Success");
        return re;

        //bookRepository.save(new Book("書名11", "作者", "上架時間", 100, 23, "創建時間", "更新時間", "創建uid", "更新uid"));
        //bookRepository.save(new Book("書名12", "作者", "20190504", 100, 23, "20190504", date, "3", "4"));
        //bookRepository.save(new Book("西游記10", "吳承恩", "20190504", 100, 20, "20190504", date, "2", "3"));
    }


    @ApiOperation(value = "根據作者名字或者筆名查找書籍", notes = "根據作者名字或者筆名查找書籍")
    @ApiImplicitParam(dataType = "String", name = "author", value = "根據作者名字或者筆名查找書籍", paramType = "path",required = true)
    @RequestMapping(value = "/findByAuthor/{author}", method = RequestMethod.GET)
    public Response findByAuthor(@PathVariable("author") String author) {
        List<Book> result = bookRepository.findByAuthor(author);
        System.out.println("一共有多少條呢----" + result.size());
        for (Book book : result) {
            System.out.println(book);
        }
        System.out.println("================================");
        Response re = new Response();
        re.setCode(200);
        re.setMessage("Success");
        re.setSize(result.size());
        re.setObject(result);
        return re;
    }

    @ApiOperation(value = "根據書籍名稱進行找書", notes = "根據書籍名稱進行找書")
    @ApiImplicitParam(dataType = "String", name = "name", value = "根據書籍名稱進行找書", paramType = "path",required = true)
    @RequestMapping(value = "/findByName/{name}", method = RequestMethod.GET)
    public Response findByName(@PathVariable String name) {
        List<Book> result = bookRepository.findByName(name);

        Response re = new Response();
        re.setCode(200);
        re.setMessage("Success");
        re.setSize(result.size());
        re.setObject(result);
        return re;
    }


    @ApiOperation(value = "更新書籍信息", notes = "更新書籍信息")
    @ApiImplicitParam(dataType = "Book", name = "book", value = "更新書籍信息", required = true)
    @RequestMapping(value = "/updateBookName", method = RequestMethod.POST)
    public Response updateBookName(@RequestBody Book book) {

        int count = bookRepository.updateBookName("三國演義", 2);
        System.out.println(count);

        List<Book> result = bookRepository.findAll();

        Response re = new Response();
        re.setCode(200);
        re.setMessage("Success");
        re.setSize(result.size());
        re.setObject(result);
        return re;

    }

    @ApiOperation(value = "更新書籍信息", notes = "更新書籍信息")
    @ApiImplicitParam(dataType = "Book", name = "book", value = "更新書籍信息", required = true)
    @RequestMapping(value = "/updateBook", method = RequestMethod.POST)
    public Response updateBook(@RequestBody Book book) {

        Date dt = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
        String date = sdf.format(dt);

        Book book_orignial = bookRepository.findById(book.getId());

        book.setOntime(book_orignial.getOntime());
        book.setCreatuid(book_orignial.getCreatuid());
        book.setCreatedt(book_orignial.getCreatedt());
        book.setUpdatedt(date);
        book.setUpdateuid(uid);

        bookRepository.save(book);

        List<Book> result = bookRepository.findAll();

        Response re = new Response();
        re.setCode(200);
        re.setMessage("Success");
        re.setSize(result.size());
        re.setObject(result);
        return re;

    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM