Spring Boot JPA中使用@Entity和@Table的实现

本文中我们会讲解如何在Spring Boot JPA中实现class和数据表格的映射。

默认实现

Spring Boot JPA底层是用Hibernate实现的,默认情况下,数据库表格的名字是相应的class名字的首字母大写。命名的定义是通过接口ImplicitNamingStrategy来定义的:

  /**
   * Determine the implicit name of an entity's primary table.
   *
   * @param source The source information
   *
   * @return The implicit table name.
   */
  public Identifier determinePrimaryTableName(ImplicitEntityNameSource source);

我们看下它的实现ImplicitNamingStrategyJpaCompliantImpl:

  @Override
  public Identifier determinePrimaryTableName(ImplicitEntityNameSource source) {
    if ( source == null ) {
      // should never happen, but to be defensive...
      throw new HibernateException( "Entity naming information was not provided." );
    }

    String tableName = transformEntityName( source.getEntityNaming() );

    if ( tableName == null ) {
      // todo : add info to error message - but how to know what to write since we failed to interpret the naming source
      throw new HibernateException( "Could not determine primary table name for entity" );
    }

    return toIdentifier( tableName, source.getBuildingContext() );
  }

如果我们需要修改系统的默认实现,则可以实现接口PhysicalNamingStrategy:

public interface PhysicalNamingStrategy {
  public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment);

  public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment);

  public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment);

  public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment);

  public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment);
}

使用@Table自定义表格名字

我们可以在@Entity中使用@Table来自定义映射的表格名字:

@Entity
@Table(name = "ARTICLES")
public class Article {
  // ...
}

当然,我们可以将整个名字写在静态变量中:

@Entity
@Table(name = Article.TABLE_NAME)
public class Article {
  public static final String TABLE_NAME= "ARTICLES";
  // ...
}

在JPQL Queries中重写表格名字

通常我们在@Query中使用JPQL时可以这样用:

@Query(“select * from Article”)

其中Article默认是Entity类的Class名称,我们也可以这样来修改它:

@Entity(name = "MyArticle")

这时候我们可以这样定义JPQL:

@Query(“select * from MyArticle”)

到此这篇关于Spring Boot JPA中使用@Entity和@Table的实现的文章就介绍到这了,更多相关Spring Boot JPA使用@Entity和@Table内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot如何整合SpringDataJPA

    这篇文章主要介绍了SpringBoot整合SpringDataJPA代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.pom.xml添加依赖 <dependencies> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-we

  • springboot整合JPA过程解析

    这篇文章主要介绍了springboot整合JPA过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 接下来具体看看是怎么弄的. 1.新建一个springboot项目,选择web.data jdbc.data jpa.mysql driver. 2.建立以下目录及结构: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&

  • Spring Boot JPA中java 8 的应用实例

    上篇文章中我们讲到了如何在Spring Boot中使用JPA. 本文我们将会讲解如何在Spring Boot JPA中使用java 8 中的新特习惯如:Optional, Stream API 和 CompletableFuture的使用. Optional 我们从数据库中获取的数据有可能是空的,对于这样的情况Java 8 提供了Optional类,用来防止出现空值的情况.我们看下怎么在Repository 中定义一个Optional的方法: public interface BookRepos

  • SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页详解

    一. 使用Springboot+Jpa实现对mysql数据库的增删改查和分页功能 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 使用Springboot和jpa对数据库进行操作时,能够大大减少我们的工作量,在jpa中,已经在底层封装好了增删查的功能和sql语句,可以使我们进行快速开发 二.项目过程和配置文件 1.applaction.properties文件配置

  • SpringBoot Jpa 自定义查询实现代码详解

    这篇文章主要介绍了SpringBoot Jpa 自定义查询实现代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 持久层Domain public interface BaomingDao extends JpaRepository<BaomingBean,Integer> { @Query(value = "select distinct t.actid from BaomingBean t where t.belongs=?

  • SpringBoot Jpa分页查询配置方式解析

    这篇文章主要介绍了SpringBoot Jpa分页查询配置方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这是已经被废弃的接口 Sort sort = new Sort(Sort.Direction.DESC,"bean类中字段"); //创建时间降序排序 Pageable pageable = new PageRequest(pageNumber,pageSize,sort); 上面的用法在最新的SpringBoot中已经不

  • Springboot和Jpa实现学生CRUD操作代码实例

    前期准备 使用idea新建个SpringBoot项目 在数据库中建student表 建包 1.编写entity包下实体类Student (一个Javabean规范) package com.example.stu.kudestu.stu.entity; import javax.persistence.*; @Entity @Table(name = "student") //@Entity 应用在实体类上 @Table(name = "student") 应用在实

  • Spring Boot JPA中使用@Entity和@Table的实现

    本文中我们会讲解如何在Spring Boot JPA中实现class和数据表格的映射. 默认实现 Spring Boot JPA底层是用Hibernate实现的,默认情况下,数据库表格的名字是相应的class名字的首字母大写.命名的定义是通过接口ImplicitNamingStrategy来定义的: /** * Determine the implicit name of an entity's primary table. * * @param source The source inform

  • Spring Boot JPA访问Mysql示例

    上篇演示了通过Maven构建Spring Boot 项目,引用web模块启动应用,完成简单的web 应用访问,本章内容在此基础上面加入数据访问与端口修改,下文代码与演例(本用例纯手工测试通过,放心入坑). 修改默认端口 在src\main\resources下加入application.properties内容如下 server.port=8888 项目目录结构 启动应用,日志显示: 端口已经由默认的8080 变更为8888 JPA访问mysql数据库 1.POM中加入 <!-- Spring

  • 详解spring boot jpa整合QueryDSL来简化复杂操作

    前言 使用过spring data jpa的同学,都很清楚,对于复杂的sql查询,处理起来还是比较复杂的,而本文中的QueryDSL就是用来简化JPA操作的. Querydsl定义了一种常用的静态类型语法,用于在持久域模型数据之上进行查询.JDO和JPA是Querydsl的主要集成技术.本文旨在介绍如何使用Querydsl与JPA组合使用.JPA的Querydsl是JPQL和Criteria查询的替代方法.QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查

  • Spring Boot JPA如何把ORM统一起来

    JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面.值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点.从目前的开发社区的反应上看,JPA受到了

  • 在Spring Data JPA中引入Querydsl的实现方式

    一.环境说明 基础框架采用Spring Boot.Spring Data JPA.Hibernate.在动态查询中,有一种方式是采用Querydsl的方式. 二.具体配置 1.在pom.xml中,引入相关包和配置插件. (1)引入包(注:不需要版本号,Spring Boot 会自动匹配合适的版本) <!-- Querydsl相关包 --> <dependency> <groupId>com.querydsl</groupId> <artifactId&

  • Spring boot Jpa添加对象字段使用数据库默认值操作

    目录 项目搭建 代码 配置文件 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=truespring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.

  • spring boot 项目中使用thymeleaf模板的案例分析

    准备 MySql数据库,表Prereg,IDEA 数据库中的表如下所示: IDEA目录结构如下: 添加thymeleaf依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 开始添加代码: 在controller包添加类"

  • Spring boot jpa 删除数据和事务管理的问题实例详解

    今天我们介绍的是jpa删除和事务的一些坑,接下来看看具体内容. 业务场景(这是一个在线考试系统)和代码:根据问题的id删除答案 repository层: int deleteByQuestionId(Integer questionId); service 层: public void deleteChoiceAnswerByQuestionId(Integer questionId) { choiceAnswerRepository.deleteByQuestionId(questionId)

  • spring boot + jpa + kotlin入门实例详解

    spring boot +jpa的文章网络上已经有不少,这里主要补充一下用kotlin来做. kotlin里面的data class来创建entity可以帮助我们减少不少的代码,比如现在这个User的Entity,这是Java版本的: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String firstName; private S

随机推荐