SpringData:
春のデータは、データベースへのアクセス、およびクラウドサービスのためのオープンソースのフレームワークのサポートを簡素化するために使用されています。その主な目的は、データへのアクセスを迅速かつ便利になり作り、およびクラウドコンピューティングとデータ・サービスをサポートするフレームワークを地図削減することです。春データは、複数のコンポーネントが含まれています。
- コモンズ - クロスデータベースの永続性のために、各サブプロジェクトの使用のための共有フレームワークのための基礎を提供するサポート
- JPA - 関数は、JPAの永続化層とストレージ間のデータアクセス層の作成を簡素化
- Hadoopの - HadoopのジョブSpringベースの構成とPOJOプログラミングモデルMapReduceジョブ
- キー値 - RedisのとRiakに統合さは、一般的な複数のシーンで簡易包装を提供します
- ドキュメント - 統合文書データベース:CouchDBのとMongoDBの基本的な構成のマッピングとデータベースのサポートを提供します
- グラフ - 強力な統合のNeo4j POJOベースのプログラミングモデルを提供
- グラフRooのアドオン - のNeo4jのためのRooサポート
- JDBC拡張機能 - オラクルRAD、アドバンスト・キューイング、および高度なデータ型をサポートしています
- マッピング - 異なるデータベースをサポートするために、オブジェクトマッピングフレームワークのGrailsを提供することに基づきます
- 例 - サンプルプログラム、ドキュメント、およびデータベース
- ガイダンス - 高度なドキュメント
SpringDataJPA:
春JPAでの開発を簡素化するためのフレームワークを提供します。
機能:ケースが大きくJPA文言を簡略化することができ、ほとんどのアクセスを実現し、データを操作するために特定の方法(すなわち、インタフェース)を書き込むことができません。CRUDのほかに、さらに頻繁に使用されるようなページングなどの機能、ソートなどの数を含みます。
春データJPAは何がありますか?
メインは春データJPA、また春データJPAの中核となる概念が提供するインターフェースを見てみましょう:
- リポジトリ:トップ・レベル・インターフェースは空インタフェース、すべてのリポジトリ均一なタイプの目的、及び場合スキャンアセンブリが自動識別を可能にします。
- CrudRepository:リポジトリは、CRUD機能を提供し、サブインターフェースであります
- PagingAndSortingRepository:CrudRepositoryサブインターフェースは、ページングおよびソート機能を追加し、あります
- JpaRepository:PagingAndSortingRepositoryサブインタフェースであり、そのようなものとして、いくつかの便利な機能、追加:バッチ操作を。
- JpaSpecificationExecutor:クエリインターフェイスを作るために使用されるには責任があります
- 仕様:クエリ仕様は、この仕様は、クエリ条件を設定することができますだけで周り、複雑なクエリを実行するために、春データJPAによって提供され
JpaRepositoryクエリ:
次のようにインタフェースで定義された直接クエリメソッドでは、それが準拠している場合、あなたが実装を作成することはできません現在、キーワード文言をサポートしています。
キーワード(キーワード) | サンプル(メソッド名例) | JPQLスニペット(JPQL対応する声明) |
そして | findByLastNameAndFirstName | どこx.lastname =?1とx.firstname =?2 |
若しくは |
findByLastnameOrFirstname | どこx.lastname =?1またはx.firstname =?2 |
の間に | findByStartDateBetween | どこ?1との間x.startDate?2 |
未満 | findByAgeLessThan | どこx.age <?1 |
LessThanEqual | findByAgeLessThenEqual | どこx.age <=?1 |
演算子:GreaterThan | findByAgeGreeterThan | どこx.age>?1 |
GreaterThenEqual | findByAgeGreeterThanEqual | どこx.age> =?1 |
後に | findByStartDateAfter | どこx.startDate>?1 |
前 | findByStartDateBefore | どこx.startDate <?1 |
無効です | findByAgeIsNull | x.ageがnullです |
IsNotNull / NOTNULL | findByAgeIsNotNull / findByAgeNotNull | どこx.age nullではありません |
以下のような | findByFirstnameLike | どこが好きx.firstname?1 |
NotLike | findByFirstnameNotLike | どこx.firstnameは好きではない?1 |
で始まります | findByFirstnameStartingWith | ?どこのようなx.firstname(とバインドパラメータ追加%_ %を結合するための尾、EG:startStr% ) |
EndingWith | findByFirstnameEndingWith | ?ここx.firstname 1等(結合パラメータでプリペンド%_ パラメータバインディングプレ%、EG: %のendStr) |
含みます | findByFirstnameContaining | ?1のようなx.firstname場所(パラメータバインド %に包まれた_ %にパラメータが含まれ、EG:%paraStr% ) |
[並べ替え | findByAgeOrderByLastnameDesc / ASC | x.lastnameのDESC / ASCによってどこx.age =?1件のオーダー |
ではありません | findbyLastnameNot | どこx.lastname <>?1 |
に | findByAgeIn(コレクション歳) | どこでx.age(AGE1、AGE2、AGE2 ...) |
ありませんで | findByAgeNotIn(コレクション歳) | どこx.ageないで(AGE1、AGE2、AGE2 ...) |
真 | findByActiveTrue() | どこx.active =真 |
偽 | findByActiveFalse() | どこx.active =偽 |
IGNORECASE | findByFirstnameIgnoreCase() | ここでUPPER(x.firstname)= UPPER(?1) |
findFirstByOrderBy * ASC / DESC | findFirstByOrderByLastnameAsc / DESC() | 最後に正のシーケンス/フラッシュバック構成、クエリ行ラインの最初のレコードによって |
ページ<ユーザー> queryFirst10By姓(文字列の姓、ページング可能ページング可能) | 対象ページ内の姓のクエリをよると、アクセス上位10行のレコードへ | |
リスト<ユーザ> findFirst10By(ソートソート文字列の姓)姓 | 姓の方法をソート、記録の上位10行が取得します | |
一覧<ユーザー> findTop10By姓(文字列の姓、ページング可能ページング可能)。 | 対象ページ内の姓のクエリをよると、アクセス上位10行のレコードへ |
JPAページングクエリ:
//Dao接口定义分页查询方法:
Page<User> findByUserName(String userName,Pageable pageable);
//调用测试Dao定义的分页查询方法:
public void testFindUserList(){
int page = 1; //当前页码
int size = 10; //每页大小
Sort sort = new Sort(Direction.DESC,"id"); //根据id降序
Pageable pageable = new PageRequest(page,size,sort);
//Pageable pageable = new PageRequest(1,10,Direction.DESC,"id");
Page<User> page = repository.findByUserName("testName",pageable);
System.out.println(page.getTotalElements()); //总记录数
System.out.println(page.getTotalPages()); //总页数
//打印查询数据
for (User user: page.getContent()) {
System.out.println(user.toString());
}
}
JPAのカスタムクエリ:
@Modifying //涉及记录删除和修改
@Query("update User u set u.userName = ? where c.id = ?") //sql语句
int modifyByIdAndUserId(String userName, Long id);
@Transactional //涉及事务
@Modifying //涉及记录的删除和修改
@Query("delete from User where id = ?")
void deleteByUserId(Long id);
@Transactional(timeout = 10) //设置超时查询10s,默认30s()
@Query("select u from User u where u.emailAddress = ?")
User findByEmailAddress(String emailAddress);
JPA主キーが生成さ:
1. UUIDがプライマリキー生成を休止、次の2つの例であってもよいです。
- @GeneratedValue(generator="system-uuid") JPA通用策略生成器
- @GenericGenerator(name="system-uuid",strategy="uuid") 自定义主键生成策略(strategy:生成策略)
2.JPA提供的四种标准主键生成器策略:
- @GeneratedValue(generator=GenerationType.AUTO) 主键由程序控制。
- @GeneratedValue(generator=GenerationType.IDENTITY) 主键由数据库自动生成(自增型号)。
- @GeneratedValue(generator=GenerationType.SEQUENCE) 根据底层数据库的序列号生成,前提是数据库支持序列(例如oracle)。
- @GeneratedValue(generator=GenerationType.TABLE) 使用一个特定的数据库表格保存主键。