JPA:概述与基本使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/caozp913/article/details/102616085

JPA是一种持久层规范,常见的实现有Hibernate、Toplink等。JPA是一种基于ORM思想的规范,以Hibernate为例,在设计上将表和实体类,表字段和实体类字段一一对应,这样就可以直接通过操作实体类来操作数据库表了。

创建实体类

基本上每个表都会对应一个实体类,在创建表对应的实体类时:

1、在实体类上使用@Entity注解来声明该实体类;

2、该实体类的名称不用和表名一样,只用在实体类上使用@Table注解的name属性来匹配上对应的表名即可;

3、对应的属性名也不用和表字段名一样,在属性上使用@Column注解的name属性匹配上对应字段即可;另外主键要使用@Id来指定;还可以使用@GeneratedValue注解的strategy属性来指定主键的唯一策略,比如取GenerationType.IDENTITY则表示主键自增(通常用于MySQL),GenerationType.SEQUENCE表示按序列来变化(通常用于Oracle)。

@Column注解的更多属性
unique 表示该字段是否为唯一标识,默认为false。
nullable 表示该字段是否可以为null值,默认为true。
length 表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。


@ColumnDefault用于指定数据库对应字段的默认值,比如@ColumnDefault("1"),可以匹配类型。

一旦这样创建了实体类,我们就可以不用太关注sql语句了,当我们操作实体类时,框架底层会自动帮我们进行sql语句的拼接和执行。

内置接口方法

springdata中的中心接口是——Repository,这个接口没有什么内容,主要的作用就是标记和管理。其他的接口都是此接口的子类。该接口有一个子接口CrudRepository,这个接口中定义了11个常用的方法,其中T是要操作的实体类,ID是实体类主键的类型。

CrudRepository有个子接口PagingAndSortingRepository,增加了一些方法来实现分页。

传递Sort时仅排序,传递Pageable时排序和分页。

PagingAndSortingRepository有一个子接口JpaRepository,该接口同时还继承了QueryByExampleExecutor接口,

@NoRepositoryBean

publicinterface JpaRepository<T, ID extendsSerializable>
        extends PagingAndSortingRepository<T, ID>,QueryByExampleExecutor<T> {

    List<T>findAll(); //查询所有对象,返回List

    List<T>findAll(Sort sort); //查询所有对象,并排序,返回List

    List<T>findAll(Iterable<ID> ids); //根据id列表查询所有的对象,返回List
 
    void flush(); //强制缓存与数据库同步

    <S extends T> List<S> save(Iterable<S> entities); //批量保存,并返回对象List

    <S extends T> S saveAndFlush(S entity);//保存并强制同步数据库

    void deleteInBatch(Iterable<T> entities);//批量删除集合对象(后台执行时,生成一条语句执行,用多个or条件)

    void deleteAllInBatch();//删除所有(执行一条语句,如:delete from user)
 
    T getOne(ID id); //根据id 查询一个对象,返回对象的引用(区别于findOne)。当对象不存时,返回引用不是null,但各个属性值是null

    @Override
    <S extends T> List<S> findAll(Example<S> example); //根据实例查询

    @Override
    <S extends T> List<S> findAll(Example<S> example, Sort sort);//根据实例查询,并排序。
}

几点说明:

1、几个查询、及批量保存方法,和 CrudRepository 接口相比,返回的是 List,使用起来更方便。

2、增加了InBatch 删除,实际执行时,后台生成一条sql语句,效率更高些。相比较而言,CrudRepository 接口的删除方法,都是一条一条删除的,即便是 deleteAll 也是一条一条删除的。

3、增加了 getOne()方法,切记,该方法返回的是对象引用,当查询的对象不存在时,它的值不是Null。

规则命名进行简单查询

规则命名方式仅适合进行单表的简单查询,不适用于其他情况。方法中支持的关键字如下:

Spring Data JPA框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。

猜你喜欢

转载自blog.csdn.net/caozp913/article/details/102616085
今日推荐