版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
文章目录
前言
以 Spring Boot2.1.3.RELEASE和 Spring Data Jpa 为技术场景,选用 MySQL 来做一个实例。
环境要求:
JDK 1.8
Maven 3.0+
IntelliJ IDEA
1、创建数据库并建立 user 表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`username` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名',
`password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '密码',
`gmt_create` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`gmt_modified` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
2:添加maven依赖
<!-- springboot-web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jpa依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 数据库驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
3、application.yml 配置信息
spring:
application:
name: spring-boot-jpa-app
# 数据库配置
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&autoReconnect=true
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
# jpa 配置
jpa:
# sql 打印
show-sql: true
properties:
hibernate:
# the Hibernate entity manager
globally_quoted_identifiers: true
# 格式化SQL输出
format_sql: true
hibernate:
# create, create-drop, update, validate
# 作用主要用于:自动创建、更新、验证数据库表结构
ddl-auto: none
database: mysql
详细说明部分配置含义
-
hibernate.hbm2ddl.auto 参数的作用主要用于:自动创建、更新、验证数据库表结构,有五个值,默认是 none 。
- create:每次加载 Hibernate 时都会删除上一次生成的表,然后根据 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
- create-drop:每次加载 Hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。
- update:最常用的属性,第一次加载 Hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 Hibernate 时根据 model 类自动更新表结构,即使表结构改变了,但表中的行仍然存在,不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
- validate :每次加载 Hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
4、 user 实体构建
package com.fxbin.jpa.bean;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* User
*
* @author fxbin
* @version v1.0
* @since 2019/2/10 1:30
*/
@Data
@Entity
public class User implements Serializable {
/**
* 主键ID
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 创建时间
*/
@Column(name = "gmt_create")
private Date gmtCreate;
/**
* 修改时间
*/
@Column(name = "gmt_modified")
private Date gmtModified;
}
上面用的注解做一个解释。
@Entity(name="EntityName")
必须,用来标注一个数据库对应的实体,数据库中创建的表名默认和类名一致。其中,name 为可选,对应数据库中一个表,使用此注解标记 Pojo 是一个 JPA 实体。@Table(name="",catalog="",schema="")
可选,用来标注一个数据库对应的实体,数据库中创建的表名默认和类名一致。通常和 @Entity 配合使用,只能标注在实体的 class 定义处,表示实体对应的数据库表的信息。@Id
必须,@Id 定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键。@GeneratedValue(strategy=GenerationType,generator="")
可选,strategy: 表示主键生成策略,有 AUTO、INDENTITY、SEQUENCE 和 TABLE 4 种,分别表示让 ORM 框架自动选择,generator: 表示主键生成器的名称。@Column(name = "user_code", nullable = false, length=32)
可选,@Column 描述了数据库表中该字段的详细定义,这对于根据 JPA 注解生成数据库表结构的工具。name: 表示数据库表中该字段的名称,默认情形属性名称一致;nullable: 表示该字段是否允许为 null,默认为 true;unique: 表示该字段是否是唯一标识,默认为 false;length: 表示该字段的大小,仅对 String 类型的字段有效。
5、Repository 构建
package com.fxbin.jpa.repository;
import com.fxbin.jpa.bean.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
/**
* UserRespository
*
* @author fxbin
* @version v1.0
* @since 2019/2/27 23:47
*/
@Repository
public interface UserRepository extends CrudRepository<User, Integer> {
}
6、 Controller 构建
package com.fxbin.jpa.controller;
import com.fxbin.jpa.bean.User;
import com.fxbin.jpa.repository.UserRepository;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* UserController
*
* @author fxbin
* @version v1.0
* @since 2019/3/5 0:34
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserRepository userRepository;
/**
* 查询全部
* @return
*/
@RequestMapping("/listAll")
public Object listAll(){
return userRepository.findAll();
}
/**
* 添加数据
* @param user
* @return
*/
@RequestMapping("/insert")
public void insert (User user){
userRepository.save(user);
}
/**
* 删除
* @param userId
* @return
*/
@RequestMapping("/remove")
public void remove(Integer userId){
userRepository.deleteById(userId);
}
/**
* 修改
* @param user
* @return
*/
@RequestMapping("/update")
public void update(User user){
userRepository.save(user);
}
}
删除测试SQL,结果:
代码地址: https://gitee.com/fxbin/SpringBoot2Example
完-- 如有不妥之处,请及时留言或邮件联系,感谢您花费宝贵时间来阅读本文