深入实践Spring Boot2.1.3 实体持久化

2.1.3 实体持久化

通过上面三个实体的定义,实现了使用Java的普通对象(POJO)与数据库表建立映射关系(ORM),接下来使用JPA来实现持久化。

用户实体使用JPA进行持久化的例子如代码清单2-5所示。它是一个接口,并继承于JPA资源库JpaRepository接口,使用注解@Repository将这个接口也定义为一个资源库,使它能被其他程序引用,并为其他程序提供存取数据库的功能。

使用相同的方法,可以定义部门实体和角色实体的资源库接口。接口同样继承于JpaRepository接口,只要注意使用的参数是各自的实体对象即可。

代码清单2-5 用户实体持久化

@Repository

public interface
UserRepository extends JpaRepository<User, Long> {

}

这样就实现存取数据库的功能了。现在可以对数据库进行增删查改、进行分页查询和指定排序的字段等操作。

或许你还有疑问,我们定义的实体资源库接口并没有声明一个方法,也没有对接口有任何实现的代码,甚至连一条SQL查询语句都没有写,这怎么可能?

是的,使用JPA就是可以这么简单。我们来看看JpaRe-pository的继承关系,你也许会明白一些。如图2-2所示,JpaRepository继承于PagingAndSortingRepository,它提供了分页和排序功能,PagingAndSortingRepository继承于Crud-Repository,它提供了简单的增删查改功能。

因为定义的接口继承于JpaRepository,所以它传递性地继承上面所有这些接口,并拥有这些接口的所有方法,这样就不难理解为何它包含那么多功能了。这些接口提供的一些方法如下:

<S extends
T> S save(S var1);

T findOne(ID
var1);

long count();

void delete(ID
var1);

void delete(T
var1);

void
deleteAll();

Page<T>
findAll(Pageable var1);

List<T>
findAll();

List<T>
findAll(Sort var1);

List<T>
findAll(Iterable<ID> var1);

void
deleteAllInBatch();

T getOne(ID
var1);

......

JPA还提供了一些自定义声明方法的规则,例如,在接口中使用关键字f?indBy、readBy、getBy作为方法名的前缀,拼接实体类中的属性字段(首个字母大写),并可选择拼接一些SQL查询关键字来组合成一个查询方法。例如,对于用户实体,下列查询关键字可以这样使用:

And,例如f?indByIdAndName(Long id,String name);

Or,例如f?indByIdOrName(Long id,String name);

Between,例如f?indByCreatedateBetween(Date start,Date end);

LessThan,例如f?indByCreatedateLessThan(Date start);

GreaterThan,例如f?indByCreatedateGreaterThan(Date start);

IsNull,例如f?indByNameIsNull();

IsNotNull,例如f?indByNameIsNotNull();

NotNull,与IsNotNull等价;

Like,例如f?indByNameLike(String name);

NotLike,例如f?indByNameNotLike(String name);

OrderBy,例如f?indByNameOrderByIdAsc(String name);

Not,例如f?indByNameNot(String name);

In,例如f?indByNameIn(Collection<String>nameList);

NotIn,例如f?indByNameNotIn(Collection<String>nameList)。

又如下列对用户实体类自定义的方法声明,它们都是符合JPA规则的,这些方法也不用实现,JPA将会代理实现这些方法。

User
findByNameLike(String name);

User
readByName(String name);

List<User>
getByCreatedateLessThan(Date star);

时间: 2017-05-02

深入实践Spring Boot2.1.3 实体持久化的相关文章

深入实践Spring Boot2.1.2 实体建模

2.1.2 实体建模 首先创建一些普通对象,用来与数据库的表建立映射关系,接着演示如何使用JPA对数据库进行增删查改等存取操作. 假如现在有三个实体:部门.用户和角色,并且它们具有一定的关系,即一个用户只能隶属于一个部门,一个用户可以拥有多个角色.它们的关系模型如图2-1所示.   图2-1 MySQL实体-关系模型示例 Spring Boot的实体建模与使用Spring框架时的定义方法一样,同样比较方便的是使用了注解的方式来实现. 部门实体的建模如代码清单2-2所示,其中注解@Table指定关

深入实践Spring Boot2.3.3 文档持久化

2.3.3 文档持久化 MongoDB也有像使用JPA那样的资源库,如代码清单2-16所示,为用户文档创建了一个Repository接口,继承于MongoRepository,实现了文档持久化. 代码清单2-16 用户文档持久化 public interface UserRepository extends MongoRepository<User, String> {     User findByUsername(String username); } MongoRepository的继承

深入实践Spring Boot2.4.2 节点和关系实体建模

2.4.2 节点和关系实体建模 虽然Neo4j没有表结构的概念,但它有节点和关系的概念.例如,现在有演员和电影两个实体,它们的关系表现为一个演员在一部电影中扮演一个角色.那么就可以创建演员和电影两个节点实体,和一个角色关系实体.它们的实体-关系模型如图2-5所示.这个实体-关系模型的定义比起关系型数据库的实体-关系模型的定义要简单得多,但是它更加形象和贴切地表现了实体之间的关系.更难能可贵的是,这个实体-关系模型是可以不经过任何转换而直接存入数据库的,也就是说,在Neo4j图数据库中保存的数据与

深入实践Spring Boot2.1 使用MySQL

2.1 使用MySQL 对于传统关系型数据库来说,Spring Boot使用JPA(Java Persistence API)资源库来实现对数据库的操 作,使用MySQL也是如此.简单地说,JPA就是为POJO(Plain Ordinary Java Object)提供持久化的标准规 范,即将Java的普通对象通过对象关系映射(Object-Relational Mapping,ORM)持久化到数据库中.

深入实践Spring Boot2.2.2 创建Redis服务类

2.2.2 创建Redis服务类 Redis提供了下列几种数据类型可供存取: string: hash: list: set及zset. 在实例中,将使用string即字符串的类型来演示数据的存取操作.对于Redis,Spring Boot没有提供像JPA那样相应的资源库接口,所以只能仿照上一节中Repository的定义编写一个实体User的服务类,如代码清单2-10所示.这个服务类可以存取对象User以及由User组成的列表List,同时还提供了一个删除的方法.所有这些方法都是使用Redis

深入实践Spring Boot2.4.4 Neo4j测试

2.4.4 Neo4j测试 代码清单2-24是Neo4j的数据库配置类,其中@Enable-TransactionManagement启用了事务管理,@EnableNeo4jRe-positories启用了Neo4j资源库并指定了我们定义的资源库接口的位置,在重载的SessionFactory函数中设定了定义实体的位置,这将促使定义的实体被作为域对象导入,RemoteServer设定连接Neo4j服务器的URL.用户名和密码,这些参数要依据安装Neo4j服务器的情况来设置.如果还没有安装Neo4

深入实践Spring Boot2.5 小结

2.5 小结 这一章,我们一口气学习使用了4种数据库:MySQL.Redis.MongoDB.Neo4j,除了Redis以外,都使用了由Spring Boot提供的资源库来访问数据库并对数据库执行了一般的存取操作.可以看出,在Spring Boot框架中使用数据库非常简单.容易,这主要得益于Spring Boot资源库的强大功能,Spring Boot资源库整合了第三方资源,它把复杂的操作变成简单的调用,它把所有"辛苦.繁重的事情"都包揽了,然后将"微笑和鲜花"献给

深入实践Spring Boot2.2.1 Redis依赖配置

2.2.1 Redis依赖配置 需要使用Redis,可在工程的Maven配置中加入spring-boot-starter-redis依赖,如代码清单2-9所示.其中gson是用来转换Json数据格式的工具,mysql是引用了上一节的模块,这里使用2.1节定义的实体对象来存取数据,演示在Redis中的存取操作. 代码清单2-9 Redis模块的Maven依赖配置 <dependencies>     <dependency>         <groupId>org.sp

深入实践Spring Boot2.2.3 Redis测试

2.2.3 Redis测试 如果还没有安装Redis服务器,可以参照本书附录C提供的方法安装,然后在工程的配置文件application.yml中配置连接Redis服务器等参数,如代码清单2-12所示.其中host和port分别表示Redis数据库服务器的IP地址和开放端口,database可以不用指定,由Redis根据存储情况自动选定(注:测试时这些配置是集成在一个配置类中实现的). 代码清单2-12 Redis配置 spring:     redis:     # database: 1