【SpringBoot】SpringBoot集成Spring Data JPA

简单及记录一下相关的使用,后续会对这部分内容进行补充。
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。

所需依赖:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

数据库连接信息的配置:

spring.datasource.url=jdbc:mysql://localhost:3306/learn?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#######下面的配置是为解决项目启动时遇到的异常
#异常内容:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set错误
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
######Hibernate中常用的配置
spring.jpa.properties.hibernate.hbm2ddl.auto=update
# 配置指定对数据库表结构的处理方式,值有:create、create-drop、update、validate 
#
# create:每次加载hibernate的时候,都会重新根据模型生成表。如果表已存在,会先删除该表再生成。
# create-drop:启动项目加载hibernate的时候,会生成表。停止项目时,会把生成的表删除掉。
# update:常用属性。每次加载hibernate的时候,会生成表。如果表存在,会根据模型的属性变化来更新表结构,这个过程不会做删表处理。
# validate:每次加载hibernate的时候,会检查表结构,但不会生成表。

创建实体类:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Data;

@Entity
@Data
@Table(name = "user")
public class User {
	@Id
	private String id;
	private String name;
	private String password;
}

注意:@Entity和@Id注解一定要有。

创建UserRepository继承自JpaRepository<T,TD>:

public interface UserRepository extends JpaRepository<User, String> {
	User findByName(String username);
}

JpaRepository<T,TD>中T表示数据表模型对应的类,TD表示主键id的类型。

其余层Service层、Controller层的代码这里就不写了,与常用的写法一致。

@Query注解的使用

使用 @Query注解,当不确定数据库中的字段时使用原生的SQL来进行数据库的查询操作,接下来将上述的查询过程来使用 @Query注解来进行一个改造,具体的改造主要出现在UserRepository中,修改内容如下:

// 将原有的方法名,更改为findA,A为User中不存在的属性
public interface UserRepository extends JpaRepository<User,Long> {
	User findA(String username);
}

这时启动程序会报如下的错误:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findA found for type User!

接下来将使用 @Query注解:

public interface UserRepository extends JpaRepository<User,Long> {

	@Query(value="select * from USER where name=?1")
	User findA(String username);
}

启动程序,会报如下的错误:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [select * from USER where name=?1]

报这个错的原因是由于,Spring Data JPA是基于hibernate的,所以在进行查询的时候使用的是HQL而非SQL,所以会出现问题,解决办法:
(1)将SQL语句更改为HQL语句,例如上例改为: from USER where name=?1
(2)加上 nativeQuery=true ,意思即为使用原生的SQL语句继续查询操作。

发布了66 篇原创文章 · 获赞 6 · 访问量 9427

猜你喜欢

转载自blog.csdn.net/qgnczmnmn/article/details/102682277