Spring data jpa
Spring data jpa将会根据实体类自动实现创建表操作,需要使用@Entity注解表明实体类
既然自动会创建表那么表中数据类型如何修改,主键,是否为空呢?这里需要使用一个注解
@column()括号里面的参数会包括并不局限于上面说到的问题,在此不一一赘述
同时还要提醒的是要添加spring data jpa的依赖,相关语句可以在maven官网搜索
Repository
是spring data jpa里面非常重要的一个接口,我们实现数据库的crud、查找、分页等功能都是靠继承这个接口,在这个项目里我们用的是他的子类,jpaRepository。
如何使用呢?
我们需要继承这个接口,然后在接口中定义方法即可,接口中的方法是不能乱写的,我们可以看到findByName()这个方法,Spring data jpa会将这个方法自动生成sql语句查询名字,而如果换成是自己随便定义的方法,就无法生成sql语句
Repository
- Repository 我们通过继承这个接口来实现相关功能
- RepositoryDefition 这是一个注释,我们也可以注入注释代替继承Repository类
- Repository Query Specific这就是我刚刚说到的查询语句(方法)不能乱写,是由规定的,稍后讲一下是按照什么规定来的
- Query Annotation 我们也可以在代码中直接写入sql语句
updata/delete/Transaction(事物)
Repository类的定义
通过查看源码我们可以发现Repository接口是一个空接口,里面没有任何方法,这种叫做标记接口
如果定义的Repository类没有实现Repository接口,运行会报错,但之前讲过可以通过注释达到继承目的
@RepositoryDefinition(domainClass = xx,idClass= xx)Repository子接口:
CrudRepository:继承Repository,实现CRUD相关的方法
PagingAndSortingRepository:继承CrudRepository,实现了分页排序相关的方法
JpaRepository:继承PagingAndSortingRepository,实现了JPA规范相关的方法Repository Query Specific
查询方法定义规则和使用
缺点:方法名过长,因为约定大于配置
对于一些复杂查询无法实现
如何优化这些缺点呢?
直接写sql语句不就可以避免这些缺点嘛
Query Annotation
具体写sql语句又分为三种情况
其实也算是两种,第一种是无参方法,第二种是有参方法,有参方法也分为两种有无占位符,区别在于:不使用占位符的话需要在参数列表声明@Param(“xx”),之前做项目不理解@Param是干嘛的,这下心中之惑迎刃而解
Transaction(事物)
@Transaction注解
事物一般声明在service层中,因为serice层里牵扯到多个dao的调用