实验环境:

  1. 构建工具:Maven
  2. JDK:1.8+
  3. 框架:spring boot
  4. ORM框架:hibernate

MySQL数据库需要配置文件和maven依赖注入

数据库配置文件:

src/main/resources

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

第四个配置通常不是必须的,Spring-boot可以通过URL判断出要连接的数据库产品。

Maven的依赖注入

 <!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) -->
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        
        <!-- Use MySQL Connector-J -->
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

JPA是java persistance API的简称,Spring Boot的JPA依赖包含了Hibernate的内置支持。

关于JPA和Hibernate的解释(引用自:Java Persistance with Hibernate)

JPA and query languages: HQL vs. JPQL Before JPA existed (and even today, in some documentation), the query language in Hibernate was called HQL. The differences between JPQL and HQL are insignificant now. Whenever you provide a query string to any query interface in Hibernate, either with the EntityManager or Session, it’s a JPQL/HQL string. The same engine parses the query internally. The fundamental syntax and semantics are the same, although Hibernate, as always, supports some special constructs that aren’t standardized in JPA. We’ll tell you when a particular keyword or clause in an example only works in Hibernate. To simplify your life, think JPQL whenever you see HQL

数据库实体类

数据库实体类通常是必须的,因为它是Java应用操作数据的基本结构;关于实体的一些配置我这里不予赘述。请参考Java 的POJO标准。不过对于Hibernate对于实体的管理我要整理一下知识体系。

实体类(Entity)是Hibernate查询对象-Query操作的对象,任何复杂的查询都应该基于Entity,正因如此,Hibernate才称之为ORM(对象关系映射框架)

你可能会有如此代码,操作一些简单的SQL语句:

import org.springframework.data.repository.CrudRepository;

import hello.User;

// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete

public interface UserRepository extends jpaRepository<User, Long> {

}

但是如何定义一些复杂的查询方法呢?
Spring-Boot可以使用注解@Query,来执行一些复杂的查询,你可以在UserRepository中书写一个复杂的查询方法:

@Query("Complex HQL')
public User UserWithComplexFilter(User user){

   //do something with HQL(Hibernate Query Language)
}

HQL具有很多种查询方法和基于数据库通用技术的封装,包括基于规则查询(Query by Creteria),分页还有防止SQL注入的参数绑定技术以及外部配置Query来简化和统一管理查询的技术。我将会在下面整理。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐