zoukankan      html  css  js  c++  java
  • [Spring Data Repositories]学习笔记--使用现有的repository

    以下内容是在学习Spring-Data-mongoDB中的Spring Data Repositories时做的一些笔记。备忘!

    感觉学习还是看官方的资料比较透彻一些。

    Spring Data Repositories目的:减少重复的持久化代码。

    常用的几个repository interface,

    Repository <-- CurdRepository <-- PagingAndSortingRepository

    最后一个主要是用来做分页和排序用的。

    Repository使用步骤

    1. 定义接口

    public Interface PersonRepository extends Repository<User,Long>{...}

    如果我们不想暴漏从Repository继承来的所有方法,可以用@NoRepositoryBean来进行标记。

    @NoRepositoryBean
    Interface MyBaseRepository<T,ID extends Serializable> extends Repository<T,ID>{
    T findOne(ID id);
    T save(T entity);
    }
    
    Interface UserRepository extends MyBaseRepository<User,Long>{
    User findByEmailAddress(EmailAddress emailAddress);
    }

    这样UserRepository里面就只有3个方法。

    2. 为上面定义的接口定义方法

    List<Person> findByLastname(String lastname);

    Spring可以根据方法的名字来进行查找

    public interface PersonRepository extends Repository<User,Long>{
    
    List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
    
    List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
    
    List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
    
    List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
    }
    • AND, OR, Between, LessThan, GreaterThan, 哪些操作符可用与所用的数据库有关。
    • IgnoreCase and AllIgnoreCase
    • OrderBy (Asc or Desc)

    支持多级属性,比如根据x.address.zipCode进行搜索, 可用

    List<Person> findByAddressZipCode(ZipCode zipCode);

    或者

    List<Person> findByAddress_ZipCode(ZipCode zipCode);

    注意:如果你的属性名称中包含_,比如first_name,需要用两个_来代表是下划线。

    3. 为接口配置Spring(只列出xml, base-package是接口所在的包名)

    <jpa:repositories base-package="com.acme.repositories"/>

    可以用include-filter/exclude-filter来对接口进行过滤

    <repositories base-package="com.acme.repositories">
    <context:exclude-filter type="regex" expression=".*SomeRepository"/>
    </repositories>

    4. 通过注入方式获得repository的实例,进行使用

    public class SomeClient {
    
    @Autowired
    private PersonRepository repository;
    
    public void doSomething(){
    List<Person> persons = repository.findByLastname("Matthews");
    }   
    }
  • 相关阅读:
    Ext.Net中,文件下载。
    Ext.Net中,DataView数据绑定之使用技巧。
    Ext.Net控件,简单案例1,让我们从Hello World开始,走进Ext.Net控件的世界!。
    VSCode入门设置成中文
    S2T40,第四章,简答4
    MongoDB学习笔记三:查询
    初等数论学习笔记一:整除的概念与带余除法
    MongoDB学习笔记四:索引
    初等数论学习笔记二:最大公因数与辗转相除法
    MongoDB学习笔记二:创建、更新及删除文档
  • 原文地址:https://www.cnblogs.com/lemonbar/p/3892447.html
Copyright © 2011-2022 走看看