Springboot版本是2.1.3.RELEASE
  
  1、依赖
  
  List-1.1
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-starter-jdbc</artifactId>
  
  </dependency>
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-starter-data-jpa</artifactId>
  
  </dependency>
  
  <dependency>
  
  <groupId>mysql</groupId>
  
  <artifactId>mysql-connector-java</artifactId>
  
  <version>5.1.47</version>
  
  </dependency>
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-starter-web</artifactId>
  
  </dependency>
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-starter-test</artifactId>
  
  <scope>test</scope>
  
  </dependency>
  
  <dependency>
  
  <groupId>org.projectlombok</groupId>
  
  <artifactId>lombok</artifactId>
  
  <version>1.18.2</version>
  
  </dependency>
  
  2、项目整体结构
  
  图2.1
  
  bootstrap.yml内容如下,我们不需要手动创建数据库表,jpa/hiberate会自动会为我们创建的
  
  server:
  
  port: 9092
  
  servlet:
  
  context-path: /serviceB
  
  spring:
  
  application:
  
  name: cat-service-b
  
  datasource:
  
  type: com.zaxxer.hikari.HikariDataSource
  
  driver-class-name: com.mysql.jdbc.Driver
  
  username: root
  
  password: ******
  
  url: jdbc:mysql://pig-mysql:3306/cat?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
  
  database: mysql
  
  hibernate:
  
  ddl-auto: update
  
  naming:
  
  physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
  
  show-sql: true
  
  properties:
  
  hibernate:
  
  format_sql: true
  
  physical-strategy的值为org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy,那么当实体的属性为驼峰结构时,对应到数据库表的字段上,会用"_"隔开。
  
  3、代码详解
  
  List-3.1 BaseEntity的内容,所有的实体都要继承这个类
  
  import lombok.Data;
  
  import org.springframework.data.annotation.CreatedBy;
  
  import org.springframework.data.annotation.CreatedDate;
  
  import org.springframework.data.annotation.LastModifiedDate;
  
  import javax.persistence.GeneratedValue;
  
  import javax.persistence.GenerationType;
  
  import javax.persistence.Id;
  
  import javax.persistence.MappedSuperclass;
  
  import java.util.Date;
  
  @Data
  
  @MappedSuperclass
  
  public class BaseEntity {
  
  @Id
  
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  
  protected Integer id;
  
  /** 创建人 */
  
  @CreatedBy
  
  protected String creator;
  
  /** 创建时间 */
  
  @CreatedDate
  
  protected Date createDate;
  
  /** 更新时间,默认是当前时间 */
  
  @LastModifiedDate
  
  protected Date updateDate = new Date();
  
  /** 状态 0 表示删除, 1表示可操作 */
  
  protected Integer status = 1;
  
  public BaseEntity() {
  
  if (null == this.id && null == this.createDate) {
  
  this.createDate = new Date();
  
  }
  
  }
  
  }
  
  List-3.2 User的内容
  
  import lombok.Data;
  
  import lombok.ToString;
  
  import org.hibernate.annotations.SQLDelete;
  
  import org.hibernate.annotations.Where;
  
  import javax.persistence.Entity;
  
  import javax.persistence.Table;
  
  @Data
  
  @ToString
  
  @Entity
  
  @Table(name = "cat_user")
  
  @SQLDelete(sql = "update cat_user set status = 0 where id = ?")
  
  @Where(clause = "status <> 0")
  
  public class User extends BaseEntity{
  
  private String name;
  
  private Integer age;
  
  }
  
  List-3.3 UserRepository的内容
  
  import com.mjduan.project.catserviceb.entity.User;
  
  import org.springframework.data.repository.CrudRepository;
  
  public interface UserRepository extends CrudRepository<User, Integer> {
  
  }
  
  List-3.4 UserController的内容
  
  import com.mjduan.project.catserviceb.entity.User;
  
  import com.mjduan.project.catserviceb.repository.UserRepository;
  
  import lombok.extern.slf4j.Slf4j;
  
  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.RestController;
  
  import java.util.Optional;
  
  @Slf4j
  
  @RestController
  
  public class UserController {
  
  @Autowired
  
  private UserRepository userRepository;
  
  @GetMapping(value = www.dasheng178.com"/queryUser/{id}")
  
  public User queryUser(@PathVariable(value = "id") Integer id) {
  
  log.info("查询用户,id={}", id);
  
  Optional<User> optionalUser = userRepository.findById(id);
  
  User user = optionalUser.isPresent() ? optionalUser.get() : null;
  
  log.info("返回,{}", user);
  
  return user;
  
  }
  
  @GetMapping(value = "/saveUser/{name}")
  
  public User saveUser(@PathVariable(www.fengshen157.com/ value = "name") String name) {
  
  log.info("新增用户,name={}", name);
  
  User user = new User();
  
  user.setAge(20);
  
  user.setName(name);
  
  User save = userRepository.save(user);
  
  log.info("返回,{}", save);
  
  return save;
  
  }
  
  }
  
  4、验证
  
  在浏览器地址栏中输入
  
  List-4.1
  
  #保存name为Tom的用户
  
  http://localhost:9092/serviceB/saveUser/Tom
  
  #查询Id为1的用户
  
  http://localhost:9092/serviceB/queryUser/1
  
  一些思考:
  
  自动创建表结构,我们不需要手动去创建,我们修改实体的时候,系统会自动更新数据库中的表结构。
  
  所有实体都继承BaseEntity,那么每个实体对应的数据库表,在创建日期、更新日期等共有属性都同一了,这样在一定程度上便于代码理解和系统维护。
  
  5、Reference
  
  Springboot配置mysql连接的部分配置参考:https://github.com/pristinecore/springbootsample/blob/master/springbootsample/src/main/resources/database.properties
  
  格式化SQL输出的参考:https://www.yongshiyule178.com stackoverflow.com/questions/25720396/how-to-set-hibernate-format-sql-in-spring-boot

SpringBoot之使用jpa/hibernate的更多相关文章

  1. springboot 集成 jpa/hibernate

    pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  2. SpringBoot + Jpa(Hibernate) 架构基本配置

    1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom ...

  3. javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful

    一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...

  4. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  5. [读书笔记] 四、SpringBoot中使用JPA 进行快速CRUD操作

    通过Spring提供的JPA Hibernate实现,进行快速CRUD操作的一个栗子~. 视图用到了SpringBoot推荐的thymeleaf来解析,数据库使用的Mysql,代码详细我会贴在下面文章 ...

  6. SpringBoot整合StringData JPA

    目录 SpringBoot整合StringData JPA application.yml User.class UserRepository.java UserController SpringBo ...

  7. SpringBoot整合SpringData JPA入门到入坟

    首先创建一个SpringBoot项目,目录结构如下: 在pom.xml中添加jpa依赖,其它所需依赖自行添加 <dependency> <groupId>org.springf ...

  8. Spring Boot + Jpa(Hibernate) 架构基本配置

    本文转载自:https://blog.csdn.net/javahighness/article/details/53055149 1.基于springboot-1.4.0.RELEASE版本测试 2 ...

  9. Springboot spring data jpa 多数据源的配置01

    Springboot spring data jpa 多数据源的配置 (说明:这只是引入了多个数据源,他们各自管理各自的事务,并没有实现统一的事务控制) 例: user数据库   global 数据库 ...

随机推荐

  1. php js css加载合并函数 宋正河整理

    <?php //php js css加载合并函数 宋正河整理 //转载请注明出处 define('COMBINE_JS',true); define('COMBINE_CSS',true);   ...

  2. OpenGL学习笔记(3) 纹理

    关于纹理 一般游戏里的物体不一定都是纯色的物体,物体上面会有一些图片贴在上面,比如墙壁,箱子,地板,可以看到砖头.木板和大理石组成的图片,要把图片贴到计算机里的几何图形的话,就要把图片的颜色采样贴到几 ...

  3. [工具]chrome添加crx扩展程序(附禁止复制破解扩展)

    Hello亲爱的观众朋友们大家好,我是09. 今天带来墙内用户安装chrome插件的方法. 1.打开扩展程序 2.把crx往里拖,欧了. ps.顺带安利chrome禁止复制破解扩展Enable Cop ...

  4. [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测

    废话不多说 直接上图这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红外 ...

  5. zabbix第一篇:zabbix安装及使用

    常用软件安装及使用目录 一:搭建zabbix命令集 cat /etc/redhat-release uname -r getenforce systemctl status firewalld.ser ...

  6. Scrum Meeting 10.29

    成员 今日活动 明日计划 用时 徐越 配置tomcat+eclipse 将上届后端代码迁移到服务器 4h 赵庶宏 与数据库连接的java代码学习及编写,测试代码 进行数据库的建立并学习数据库方面的知识 ...

  7. Chapter 11 软件演化

    软件一直在不断地演化发展,人们通常通过软件维护和软件再工程解决软件的缺陷.软件维护可以分为改正性维护.适应性维护和完善性维护几种类型.软件维护受开发过程影响大.软件维护困难大.软件维护成本高.软件维护 ...

  8. wcf的DataContractAttribute与DataMenmberAttribute

    文章:序列化和反序列化的几种方式(DataContractSerializer)(二) 介绍了序列化控制细节.哪些字段可以序列化,序列化后这些字段的名字.

  9. 学习率(Learning rate)的理解以及如何调整学习率

    1. 什么是学习率(Learning rate)?   学习率(Learning rate)作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值.合适的学习率 ...

  10. iOS日期的加减

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateCo ...