Springboot引入hibernate配置自动建表并进行增删改查操作
作者:繁华尽头满是殇 发布时间:2021-08-30 06:17:02
前言
有些业务比较复杂,比如我们需要新建10张表,每张表有10个字段,如果用手工来操作,肯定非常浪费时间,而且随着代码中对实体类的修改,还要同时修改数据库表,有时候写着写着就忘了,代码改了,数据库没改,这种问题使用 hibernate 的自动建表就好啦。
一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
二、配置yml
自动建表的配置是ddl-auto,有多个属性可选
# 1. none 永远以数据表字段为准,不做任何修改
# 2. validate 加载hibernate时,验证创建数据库表结构,会和数据库中的表进行比较,不会创建新表,但是会插入新值
# 3. create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因
# 4. create-drop 加载hibernate时创建,退出是删除表结构
# 5. update 加载hibernate自动更新数据库结构(最常用的一个)
server:
port: 8081
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
password: root
jpa:
hibernate:
ddl-auto: update
# 打印SQL语句
show-sql: true
三、写代码
1、新建数据库(空数据库即可,不要新建表)
2、实体类
@Id代表这是主键,@GeneratedValue和@GenericGenerator设置主键策略是UUID
@Column可以不写,name是数据库中的字段名,如果数据库中要新建的对应字段也叫name,可以不写,columnDefinition指定字段在数据库中的类型、长度、注释等
package com.xuyijie.test.entity;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;
/**
* @author 徐一杰
* @date 2022/9/19 17:25
* @description
*/
//JPA(Hibernate)的实体类注解
@Entity
//表名
@Table(name = "people")
//Lombok
@Data
public class People {
//Id代表这是主键,GeneratedValue和GenericGenerator设置主键策略是UUID
@Id
@GeneratedValue(generator = "id")
@GenericGenerator(name = "id", strategy = "uuid.hex")
private String id;
//Column可以不写,name是数据库中的字段名,如果数据库中要新建的对应字段也叫name,可以不写,columnDefinition指定字段在数据库中的类型、长度、注释等
@Column(name = "name", columnDefinition="varchar(255) NOT NULL COMMENT '名字'")
private String name;
@Column(name = "sex", columnDefinition="varchar(2) NOT NULL COMMENT '性别'")
private String sex;
@Column(name = "age", columnDefinition="int")
private Integer age;
}
3、Dao层
JpaRepository<People, String>尖括号里面填写的是实体类和实体类的主键数据类型,PeopleMapper继承JpaRepository以后,可以把PeopleMapper 注入到Service里,使用很多内置方法
package com.xuyijie.test.mapper;
import com.xuyijie.test.entity.People;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author 徐一杰
* @date 2022/9/19 17:42
* @description
*/
@Repository
public interface PeopleMapper extends JpaRepository<People, String> {
}
4、Controller
package com.xuyijie.test.controller;
import com.xuyijie.test.entity.People;
import com.xuyijie.test.mapper.PeopleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 徐一杰
* @date 2022/9/19 17:12
* @description
*/
@RestController
@RequestMapping("/test")
public class Test {
@Autowired
private PeopleMapper peopleMapper;
@GetMapping("/hello/{str}")
public String Hello(@PathVariable String str){
People people = new People();
people.setName(str);
people.setSex("男");
// 这里的save和findAll都是hibernate自带的方法,里面还有很多内置方法
peopleMapper.save(people);
System.out.println(peopleMapper.findAll());
return str;
}
}
四、测试结果
1、表已建好
2、请求接口,打印SQL,插入和查询数据
使用浏览器调用接口
控制台打印出SQL语句,查询出我们刚刚插入的一条数据,主键为自动生成的UUID
来源:https://blog.csdn.net/qq_48922459/article/details/126938785


猜你喜欢
- 现在就为大家介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1、公钥加密,私钥解密;2、私钥加密,公钥解密。下面就为大家分析一
- 近日于LeetCode看题遇1114 按序打印,获悉一解法使用了Semaphore,顺势研究,记心得于此。此解视Semaphore为锁,以保
- 原因:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySe
- 使用Post添加数据到数据库出现方块乱码解决方法,在web.xml里最前面添加过滤器,代码如下,放在最前面,因为有优先级,要首先拦截<
- 在之前讨论 ListView 滚动相关需求的文章中(UWP: ListView 中与滚动有关的两个需求的实现)曾经提到了获取元素相对位置的方
- Google在Android 4.4版本加入了半透明的界面样式,在Android 5.0的时候推出了Material Design的概念。这
- 获取手机唯一标识 拼接的方式获取手机唯一标识第一种方式是获取IMEI,但是有的手机如果不是正品的话,就获取不到所以通过这一种方式还是会出现有
- 简介上一篇我们介绍了在android里如何读写本地文件。我们有一种场景,类似网页的cookie,要把用户的一些储如上一次登录、使用的痕迹等信
- 前言在工作中,很多高并发的场景中,我们会用到队列来实现大量的任务请求。当任务需要某些特殊资源的时候,我们还需要合理的分配资源,让队列中的任务
- 本文实例为大家分享了Unity实现ScrollView滑动吸附的具体代码,供大家参考,具体内容如下最近在做一个展示模块的时候遇到了一个需要实
- 什么是包包 (package) 是组织类的一种方式.使用包的主要目的是保证类的唯一性.例如, 你在代码中写了一个 Test 类. 然后你的同
- C/C++的数据类型:一,整型Turbo C: [signed] int 2Byte//有符号数,-32768~32
- 本篇紧接上一篇内容继续,还是从继承里的细节开始1.代码块初始化关于代码块的定义和使用因为之前已经进行过介绍,所以这里就不再赘述,我们所关注的
- 介绍MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。比如执行前、执行后或者对SQL结果集处理、sql入参处理等,这样就可以在
- 1 前言前文已经讲述了Spring BeanFactory 与 FactoryBean 的区别详情,
- 本文实例为大家分享了java用户注册功能,供大家参考,具体内容如下主页面: 浏览器显示:代码实现:<%@ page language=
- 一、PointCut接口/* * Copyright 2002-2012 the original author or authors. *
- 在进行java编程的时候,我们可以生成可运行的jar文件,但是鉴于平台的不同,我们可能需要将jar文件转化为exe格式。今天,小编就用一款叫
- Java集合删除元素ArrayList实例详解AbstractCollection集合类中有一个remove方法,该方法为了适配多种不同的集
- 什么是JMMJMM全称Java Memory Model, 中文翻译Java内存模型,一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问