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

  

Spring boot 中Hibernate 使用的更多相关文章

  1. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  2. 在Spring Boot中使用数据缓存

    春节就要到了,在回家之前要赶快把今年欠下的技术债还清.so,今天继续.Spring Boot前面已经预热了n篇博客了,今天我们来继续看如何在Spring Boot中解决数据缓存问题.本篇博客是以初识在 ...

  3. 在Spring Boot中使用数据库事务

    我们在前面已经分别介绍了如何在Spring Boot中使用JPA(初识在Spring Boot中使用JPA)以及如何在Spring Boot中输出REST资源(在Spring Boot中输出REST资 ...

  4. 在Spring Boot中输出REST资源

    前面我们我们已经看了Spring Boot中的很多知识点了,也见识到Spring Boot带给我们的各种便利了,今天我们来看看针对在Spring Boot中输出REST资源这一需求,Spring Bo ...

  5. 初识在Spring Boot中使用JPA

    前面关于Spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那么今天我们就来看看Spring Boot给我们提供了哪些疯狂 ...

  6. Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题

      (转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题   这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...

  7. spring boot中的约定优于配置

    Spring Boot并不是一个全新的框架,而是将已有的Spring组件整合起来. Spring Boot可以说是遵循约定优于配置这个理念产生的.它的特点是简单.快速和便捷. 既然遵循约定优于配置,则 ...

  8. 学习Spring Boot:(二十三)Spring Boot 中使用 Docker

    前言 简单的学习下怎么在 Spring Boot 中使用 Docker 进行构建,发布一个镜像,现在我们通过远程的 docker api 构建镜像,运行容器,发布镜像等操作. 这里只介绍两种方式: 远 ...

  9. Spring Boot中Starter是什么

    比如我们要在Spring Boot中引入Web MVC的支持时,我们通常会引入这个模块spring-boot-starter-web,而这个模块如果解压包出来会发现里面什么都没有,只定义了一些POM依 ...

随机推荐

  1. 谷歌浏览器:audio如何隐藏下载按钮

    当我们使用原生的audio标签时,可以看到如下的效果. 那么如何让下载按钮隐藏掉呢? 1. controlsList="nodownload" // 这个方法只支持 Chrome ...

  2. xcode6 新建项目真机调试无法全屏

    设置app ICons and Launch Images属性 通过设置启动图片,选择一张适配的图片(Default-568@2x)作为启动页的图片,可以解决全屏的问题

  3. vs2010用NuGet(程序包管理)安装EF失败之解决办法

    今天用程序包管理控制台安装EF.报错.如下

  4. Lintcode: k Sum II

    Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where the ...

  5. EPD的驱动

    整个e-ink技术的生产流程:1997年从MIT媒体实验室走出来的E-INK公司成立并专注于研发具有良好阅读体验的电子纸.其中最著名的产品就是Vizplex 电子墨水.E-INK提供电子墨水给Pane ...

  6. centos7源码编译安装Subversion 1.9.5

    svn是Subversion的简称,是一个开放源代码的版本控制系统.svn有两种运行方式:1.独立服务器(svn://xxx.xxx/xxx) 2.借助apache(http://svn.xxx.xx ...

  7. Linux基础命令---fold

    fold 按照指定的宽度显示文件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       fold [选项]  fil ...

  8. 解决secureCRT 数据库里没有找到防火墙 '无' 此会话降尝试不通过防火墙进行连接。

    解决secureCRT 数据库里没有找到防火墙 '无' 此会话降尝试不通过防火墙进行连接.的方法 中文版的CRT由于汉化的问题(把null翻译成无了),导致每次打开都会有个防火墙的错误提示:数据库里没 ...

  9. oracle计算过程执行时间写法

    --在oracle写过程中很多是对数据处理,业务比较繁琐,有的需要结合job定时器使用,这样就需要知道执行过程的大概时间,不废话直接上脚本,统计单位为分钟 PROCEDURE DATA_DEAL_WI ...

  10. 程序猿职场心理学,教你三进三出“斩”HR拿offer(跳槽必看)

    摘要: 今天主要涉及到的是 HR 在面试时有哪些套路,这样可以见招拆招,斩获 offer! 今天主要涉及到的是 HR 在面试时有哪些套路,这样可以见招拆招,斩获 offer! 主要包括以下内容: 一. ...