《Spring实战》学习笔记-------Spring-Data-JPA

Spring Data JPA个人理解

PA是一种持久化层框架的规范,定义了接口,它并不实现对数据库的操作,而是其它的框架(例如Hibernate)实现它的接口,进而客户端可以通过对JPA的操作间接使用框架,Spring Data JPA是进一步包装了JPA,方便在不同的ORM框架中切换。

Spring Data实现自动化JPA Repository

在repository接口上继承 JpaRepository类,例如对数据库表Spittle的操作,主码类型为Long。

public interface SpittleRepository extends JpaRepository<Spittle, Long>{
//不用添加实现类,JPA会自动生成Impl,包括基础的CURD
}

Java类配置方法:

@Configuration
@EnableJpaRepositories(basepackage="xxx") //会扫描包来查找扩展自JpaRepository接口的接口,自动生成这个接口的实现
public class JpaConfiguration{
	...
}

定义查询方法

例如我们需要新增一项查询通过用户名来查询用户:

public interface SpittleRepository extends JpaRepository<Spittle, Long>{
	Spittle findByUsername(String username); //同样,Jpa也会自动生成它的实现
}

Repository的方法名只要符合JPA的命名规范,就可以自动生成。

Repository方法由一个动词、一个可选主题、关键词By、一个断言所组成。

在findByUsername中,动词是find,断言是Username,主题没有指定,因为返回类型是Spittle所以暗含主题也是Spittle。

例如:readSpittleByFirstnameOrLastnameOrderByLastname(),动词是read,主题是Spittle,其余是断言。

Spring Data允许四种动词:get、read、find、count。动词count会返回匹配对象的数量而不是对象本身。

注意:

  • 主题名称可以省略,如果主题是以Distinct开头,那么结果集中不包含重复记录。
  • 参数顺序要和方法名称中的顺序一致,名称无所谓

自定义查询

如果不能编写出符合规范的JPA方法名,可以通过使用@Query注解来声明sql语句:

@Query("select s from spittle s where s.email like '%gmail.com'")
List<Spittle> findAllGmailSpitles();

局限是@Query仅限于单个JPA的查询。

混合自定义的功能

如果@Query还不能满足需要,那就需要我们自己来编写SpittleRepositoryImpl类了。

当Spring Data JPA 为Repository接口生成实现的时候,它还会查找名字与接口相同、并且添加了Impl后缀的类。如果这个类存在,Spring Data JPA将会把它的方法与Spring Data JPA所生成的方法合并在一起。

例如:新添加一个eliteSweep()方法

public class SpittleRepositoryImpl{ //注意这个类不用实现SpittleRepository接口
	
	@PersistenceContext
	private EntityManager em;

	public int eliteSweep(){
		String updateSql = "****这里写SQL语句*******";
		return em.createQuery(updateSql).executeUpdate();
	}
}

除此之外,还需要确保eliteSweep()方法被声明在SpittleRepository接口中:

public interface SpittleRepository extends JpaRepository<Spittle, Long>{
	...其它方法
	int eliteSweep();
}

Impl是默认的后缀,如果想修改成其它字符,可以通过@EnableJpaRepositories实现:

@EnableJpaRepositories(basePackages="xxx", repositoryImplementationPostfix="其它字符")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值