springboot博客项目之spring data jpa学习

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

  1. Repository 我们通过继承这个接口来实现相关功能
  2. RepositoryDefition 这是一个注释,我们也可以注入注释代替继承Repository类
  3. Repository Query Specific这就是我刚刚说到的查询语句(方法)不能乱写,是由规定的,稍后讲一下是按照什么规定来的
  4. Query Annotation 我们也可以在代码中直接写入sql语句
  5. 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的调用

猜你喜欢

转载自blog.csdn.net/wang_ze_ma/article/details/82700965
今日推荐