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;
}
}
