栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Data JPA

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Data JPA

配置实体类

使用 JPA 的注解,来配置实体类,指定实体类和数据库表之间的关系,指定实体类中的属性名和数据库表中的字段之间的关系。

指定实体类的数据库表之间的关系

@Entity 注解和 @Table 注解,加在实体类的上面

@Entity 指定当前类是一个实体类

@Table(name = '''') 指定当前实体类对应数据库中的哪个表

指定实体类中的属性名和数据库表中的字段之间的关系

@Id、@Colum、@GeneratedValue、@JsonFormat 加在实体类中的属性上

@Id 指定当前的实体类属性在数据库表中是主键

@GeneratedValue(strategy = '' '',generator=" ")

指定主键的生成方式,strategy :指定主键生成策略,generator:选择主键别名

 strategy 默认有四种情况:

SEQUENCE :使用数据库序列,要求使用的数据库必须支持序列,比如Oracle

AUTO:由程序自动控制,自动选择使用哪种生成方式

IDENTITY:自增,要求使用的数据库必须支持自动增长,比如 mysql、sqlserver

Table:jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增

@SequenceGenerator(sequenceName = " ",name = " ")

指定数据库序列别名,当主键的生成方式指定为 SEQUENCE 时,才会用到这个注解

sequenceName:数据库序列名,与 generator 相同。name:别名

@Colum(name = " ",unique = " ",nullable = " ",nserttable = " ",updateable = " ")

指定当前实体类属性在数据库表中对应的字段是哪一个

name:表中的字段名,unique:是否是唯一的,nullable:是否可以为空,nserttable:是否可以插入,updateable:是否可以修改

@JsonFormat(pattern = " ",timezone = " ")

将数据库中的时间类型数据,转换成想要的格式,赋值给此实体类属性,pattern:展示的格式,timezone:国际时间

编写Dao层接口

使用 SpringDataJpa 后,只需要编写 dao 层的接口即可,无需编写接口对应的实现类。但是在编写接口的时候,必须继承两个接口,JpaRepository和JpaSpecificationExecutor,其中 T 是对应的实体类的字节码对象,ID是实体类中,主键属性对应的类型。

JpaRepository 接口继承了 PagingAndSortingRepository 接口

PagingAndSortingRepository 接口 继承了 CrudRepository 接口

CrudRepository 接口中封装了基本的增删改查方法

PagingAndSortingRepository 接口中封装了分页排序的方法

JpaSpecificationExecutor 接口是用来做一些复杂查询的接口

dao 接口中,有两个根据 id 查询对象的方法,findOne() 和 getOne()

findOne() 底层是用 em.find() 方法查询对象,立即加载

getOne() 底层使用 em.getReference() 延时加载,返回的是一个动态代理对象,当这个对象被使用的时候,才会进行查询。

jpql查询

使用 jpql 语句进行查询,需要在创建的 dao 接口中添加新的方法,在方法上使用注解 @Query() 进行 jpql 语句的编写。jpql 语句与 sql 类似,但有区别,sql 语句是对数据库中的表以及字段进行操作,而 jpql 语句是对实体类以及实体类中的属性名进行操作。

jpql 语句,编写的时候,有两种传参的方式

@Query(select userId,userName from User where userAge=?1)
User findUserByuserAge(Integer userAge)

使用  ?+参数位置   进行参数的传递,参数位置表示当前 ? 占位符要匹配的参数,在方法的参数列表中的位置,位置从1开始,?1 就是表示,读取方法的参数列表中的第一个参数替换?

@Query(select userId,userName from User where userAge=:age)
User findUserByuserAge(Integer age)

使用 :+参数名 进行参数的传递,参数名指的是方法列表中的参数名称,无顺序对照,参数名必须对应,或使用 @Param("参数名") 来进行传递

@Query(select userId,userName from User where userAge=:userAge)
User findUserByuserAge(@Param("userAge")Integer age)
jpql修改

使用 @Query() 注解也可以完成修改的操作,但是需要注意的是,需要在 dao 接口的方法上加入

@Modifying注解,以及在业务层上,加入开启事务的注解,以及取消自动回滚的注解

@Transactional

@Rollback(value = false)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号