龙哥网

龙哥网

关于Spring Data Jpa 自定义方法实现问题_java
2022-03-01

目录
  • Spring Data Jpa 自定义方法的实现
    • 自己的接口
    • 主接口
    • 我新建一个类来实现我自己的接口
  • Spring Data Jpa自定义方法关键字

    Spring Data Jpa 自定义方法的实现

    最近项目中用到了Spring Data JPA,在里面我继承了一个PagingAndSortingRepository的接口,期望的是利用Spring Data JPA提供的便利。

    同时我也希望自己有一个能定义自己方法的接口,因为单纯靠Spring Data JPA中提供的功能还是有很多业务逻辑实现不了,我必须自己实现。

    那么问题来了:Spring Data JPA好处就是让我们省去了实现接口的过程,按照他们给的命名规范他们会自动实现我们的业务逻辑,那我们自己实现的接口要怎么注入到其中呢?

    上网查找了好多资料,都没有说的太详细,更多的是照搬胡抄,这里是我亲自写的,可能很多人会用到,不多说上代码:

    自己的接口

    package com.mhc.dao; 
    import org.springframework.stereotype.Repository; 
    import com.mhc.entity.Person;
     
    @Repository
    public interface DeviceCategoryDaoCustom {
     public Person getsFather(Person person); 
    }

    主接口

    public interface DeviceCategoryDao extends
      PagingAndSortingRepository<Person, String>, DeviceCategoryDaoCustom {  
    }

    上面是我的接口继承PagingAndSortingRepository、DeviceCategoryDaoCustom(我自己方法的接口)。

    我新建一个类来实现我自己的接口

    package com.mhc.dao; 
    import javax.persistence.PersistenceContext;
    import javax.transaction.Transactional; 
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.data.repository.NoRepositoryBean;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Repository;
    import org.springframework.stereotype.Service; 
    import com.mhc.entity.Person;
     
    @Repository("crudRepositoryDaoCustom")
    class DeviceCategoryDaoImpl implements DeviceCategoryDaoCustom {
     
     @Transactional
     public Person getsFather(Person person) {
      // TODO Auto-generated method stub
      Person father = new Person();
      father = person.getParentPerson();
      return father;
     }
    }

    在这里有个需要注意的地方,就是用不用implements的问题,如果用的话,他就会调用编译器的实现功能去实现我们自定义的接口也就是:DevicecategoryCustom。

    如果去掉的话,他会去实现DeviceCategoryDao,那么会有人问,他怎么去自己找的呢。

    事实上他是根据后面的Impl来寻找的。他不会提示@override,不过你写相同的方法他还是会覆盖(覆盖主接口中的同名方法,如果有的话)DeviceCategoryDao中的同名方法。你可以去尝试一下。

    同时加上@Repository把他加入到Bean里面,这样下次用这个方法的时候Repository会自动找到他的(话说Spring团队真心NB)。然后我们交给spring托管、测试。。。。。Ok 真心赞

    Spring Data Jpa自定义方法关键字

    关键字 方法名举例 对应的SQL
    And findByNameAndAge where name = ? and age = ?
    Or findByNameOrAge where name = ? or age = ?
    Is findByNameIs where name = ?
    Equals findByNameEquals where name = ?
    Between findByAgeBetween where age between ? and ?
    LessThan findByAgeLessThan where age < ?
    LessThanEquals findByAgeLessThanEqual where age <= ?
    GreatorThan findByAgeGreaterThan where age > ?
    GreatorThanEquals findByAgeGreaterThanEqual where age >= ?
    After findByAgeAfter where age > ?
    Before findByAgeBefore where age < ?
    IsNull findByNameIsNull where name is null
    IsNotNull,NotNull findByNameIsNotNull,findByNameNotNull where name is not null
    Not findByNameNot where name <>?
    In findByAgeIn where age in (?)
    NotIn findByAgeNotIn where age not in (?)
    NotLike findByNameNotLike where name not like ?
    Like findByNameLike where name like ?
    StartingWith findByNameStartingWith where name like ‘?%'
    EndingWith findByNameEndingWith where name like ‘%?'
    Containing,Contains findByNameContaining,findByNameContains where name like ‘%?%'
    OrderBy findByOrderByAgeDesc order by age desc
    True findByBossTrue where boss = true
    False findByBossFalse where boss = false
    IgnoreCase findByNameIgnoreCase where UPPER(name) = UPPER(?)
    免责声明
    本站部分资源来源于互联网 如有侵权 请联系站长删除
    龙哥网是优质的互联网科技创业资源_行业项目分享_网络知识引流变现方法的平台为广大网友提供学习互联网相关知识_内容变现的方法。