スマート販売システムday 1


springdatajpa
1.SprigDataJpa
概説:SpringDataJpaはJPA仕様の再パッケージの抽象であり、最下部はヒップホップのJPA技術を用いて実現され、JPQLのクエリ文を引用し、Springの生成システムの一部である.操作データベースをもっと簡単にしてください.自動的にクラウドを完成します.私たちは方法を呼び出すだけでいいです.
実装:
  • サポートパッケージ
  • Spring.xmlプロファイルに基本的に配置されている配置前提:データベース+エンティティ管理対象工場+事務マネージャ配置に対応するSpring-data-jpa
  • が配置されています.
    
    
    
    注意:
  • repositoryバッグはdao層
  • に相当します.
  • は、実体管理対象工場と事務管理器のサポートが必要です.
  • は、Repositoryインターフェース<1 v,2 v>を継承する必要があります.実現しないと、crudメソッドを呼び出すことができません.インターフェースの2つのパラメータ:1 v:あなたが操作したいのはどのdomainオブジェクト2 vですか?このdomannオブジェクトの主キーのタイプ
  • しかし、基本的なcrudしか実現できません.高級な照会が必要なら、JpaSpecification Exectorを引き継ぐ必要があります.
    2.JpaRepositoryの基本機能
  • CRUD自動注入Jparepositoryインターフェースのオブジェクト@Autowired prvate Employee Repository employeeRepository;
  • クエリーのすべて:
    List emps = employeeRepository.findAll();
        for (Employee emp :emps){ System.out.println(emp); }
    
    	       (  id):
    Employee employee = employeeRepository.findOne(id);
    
            save(        id):
    employeeRepository.save(employee);
    
      (  id):
    employeeRepository.delete(id);
    
  • ページの並べ替えクエリは、まず一つのページのオブジェクトを作成する必要があります(注意:ページ数は0から【0は第1ページです】).Page page=employeeRepository.findAllを検索します./pageオブジェクトを入れてpage.getTotal Elements()/総条数page.get TotalPages()//総ページ数page.getContottentt()//現在ページデータpage.getNumber()//第数ページPage.getNumber OfElements()/現在ページあたり何個のデータがありますか?
  • 並べ替え
  • //   :           (DESC/ASC)            
       Sort sort = new Sort(Sort.Direction.DESC,"  ");//            
       List emps = employeeRepository.findAll(sort);// sort      
       for (Employee emp : emps) {
           System.out.println(emp);
       }
    
  • 並べ替えと改ページの集積ソト=new Sort(Sort.Direction.DESC)//フィールドに従って昇順または降順を行うPagelble=new Pagerequest(0,10,sort)//並べ替えオブジェクトを直接改ページオブジェクトパラメータに追加する
  • 条件付きクエリは、仕様に従ってクエリを作成する方法であり、通常はJavaラクダピーク式の表記規範に従っていくつかの特定のキーワードを追加する.
  • @Query注解クエリは、検索方法に従わないネーミングルールを調べます.@Queryの方法で@Query(「jpql文」)を調べられます.
  • 3.JpaSpecification Exectorの使用
    概要:Queryを動的に生成して、私たちの業務における様々な複雑なシーンを満足させることができます.
    List list = employeeRepository.findAll(new Specification() {
                @Override
                public Predicate toPredicate(Root root, CriteriaQuery> cq, 
    CriteriaBuilder cb) {
                    Path usernamePath = root.get("username");
                    Predicate p = cb.like(usernamePath, "%1%");
                    return p;
                }
            });
    
    クエリに基づいて、パラメータはSpecificationの匿名内部クラスを作成し、対応するdomainオブジェクトを一般的に書き込みます.
  • パラメータ:root:(根)条件フィールドcriteriaQuery:query:specificのトップレベルの照会対象を代表して、複数の条件を組み合わせて並べ替えられます.criteriaBuider:条件フィールドの方式はそれで決まります(=>=、Predicate:全体の照会条件(where username like and and)多条件クエリ:
  • List list = employeeRepository.findAll(new Specification() {
                @Override
                public Predicate toPredicate(Root root, CriteriaQuery> cq, 
    CriteriaBuilder cb) {
                    //1.  username  
                    Path usernamePath = root.get("username");
                    //2.  email  
                    Path emailPath = root.get("email");
                    Path agePath = root.get("age");
                    //3.         
                    Predicate p1 = cb.like(usernamePath, "%1%");
                    Predicate p2 = cb.like(emailPath, "%2%");
                    Predicate p3 = cb.ge(agePath, 20);
                    //4.       
                     Predicate p = cb.and(p1,p2,p3);
                    return p;
                }
            });
    
    4.jpa-specの使用
    概説:これは先ほどの動的生成Query機能に対するパッケージ版です.このプラグインを使えば、検索と改ページを完成する時に機能が簡単になります.
  • パイプラインjpa-spec SpringDataの拡張パッケージは、すべての依存性をフィルタリングします.
    
         
          *
          *
         
    
    
  • 使用基本使用:
  •  Specification spec = Specifications.and()
                    .like("username", "%1%")	//    
                    .build();	//         
     List list = employeeRepository.findAll(spec);
      :        
    
    マルチ条件クエリ:
            //    Query  (        )       (      )
            EmployeeQuery query = new EmployeeQuery();
            //query.setUsername("1");       
            //query.setEmail("2");       
            //query.setAge(20);       
            //        ,         
            Specification spec = Specifications.and()
                    .like(StringUtils.isNotBlank(query.getUsername()),"username", "%"+query.getUsername()+"%") //            ,       ,       
                    .like(StringUtils.isNotBlank(query.getEmail()),"email", "%"+query.getEmail()+"%")
                    .gt(query.getAge()!=null,"age", query.getAge())
                    .build();
            //      
            //Sort sort = new Sort(Sort.Direction.DESC,"username");
            //      
            Pageable pageable = new PageRequest(0,5);
          
           Page page = employeeRepository.findAll(spec,pageable);
    
    5.Query抽出
  • クエリー条件を準備する親類に共通のクエリコードを書くメリット:1.規範コード2.共通コードを抽出する
  • 共通コード抽出のための改ページ条件:
  • フロントページ数は1から始まり、バックグラウンドは0から
  • までである.
  • ですので、フロントからのデータが必要です.
  • 並べ替え機能を抽出します.並べ替え機能は全部必要です.だから、父の問い合わせにprvate Boolean order Type=true;/並べ替えの方式true=DESC/false=ASC prvate String orders Field;/もしこの値を伝えていないなら、並べ替えません.
    	//       
    	public Sort createSort(){
     	   //        
     	   if(StringUtils.isNotBlank(orderField)){
    	        Sort.Direction type = orderType?Sort.Direction.DESC:Sort.Direction.ASC;
    	        return new Sort(type,orderField);
        	}
        return null;
    	}
    
    特殊な条件を抽出する:サブクラスのクエリは、親のクエリを継承し、サブクラスのクエリに自分の条件を追加します.
    @Override
    public Specification createSpec(){
        Specification spec = Specifications.and()
                .like(StringUtils.isNotBlank(username), "username", "%" + username + "%")
                .like(StringUtils.isNotBlank(email), "email", "%" + email + "%")
                .gt(age != null, "age", age)
                .build();
        return spec;
    }
    
    Query抽出のメリット:
  • は直接にデータを得ることができ、対象を使わずに
  • を呼び出すことができます.
  • コードは簡単です.検索する時は規則を呼び出すだけでいいです.