スプリングデータについて
春のコミュニティのトッププロジェクトは、主にデータ(リレーショナルおよび非関連性)アクセスを簡素化するために使用されます。 Springデータを使用してプログラムを開発する場合、データクエリステートメント、DAOクラスなどの記述など、多くの低レベルのデータアクセス操作を保存できます。抽象的なインターフェイスを作成し、関連操作を定義するだけです。 Springは、操作中にプロキシインスタンスを作成して、インターフェイスで定義されている操作を実装します。
Spring Data Subprojectについて
Springデータには多くのサブプロジェクトがありますが、Spring Data JPAに加えて、次のサブプロジェクトもあります。
スプリングデータコモンズ
Spring Data Mongodb
スプリングデータRedis
スプリングデータソル
Spring Data Gemfire
スプリングデータの休憩
スプリングデータNeo4j
スプリングデータJPAについて
スプリングデータJPAは、スプリングデータのサブプロジェクトです。これは、主にデータアクセスレイヤーの実装を簡素化するために使用されます。 Spring Data JPAを使用して、追加、削除、変更、ページネーション、ソートなどを簡単に実装できます。
たとえば、スプリングブート +スプリングデータJPA
1. pom.xmlファイルを追加します
以下に示すように:
<?xml version = "1.0" encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance <http://www.w3.org/2001 xsi:schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.0.sdsd"> <modeleversion> 4.0.0 </modelversion> <グループ< <バージョン> 0.0.1-snapshot </version> <packaging> jar </packaging> <name> spring-data-jpa-example </name> <description> spring boot </description> <parent> <parent> <parent> <parent> <parent> <parent> <parent> boot </groupid> <artifactid> <バージョン> 1.4.4.Release </version> <RecationPath/> <! - リポジトリからのlookup親 - > </parent> <Properties> <Project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.Outputencoding> <java.version> 1.7 </java.version> </properties> <dependencies> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-jpa-jpa </artifactid> </dendecency> <artifactid> spring-boot-starter-web </artifactid> </dependency> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> <scope> test </scope> </depence> <dentency> <groupid> <groupid> <diestency> mysql> <artifactid> mysql-connector-java </artifactid> </dependency> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-cache </artifactid> </dependency> </dependencies> <artifactid> spring-boot-maven-plugin </artifactid> </plugin> </plugins> </build> </project>
その中で、Spring-Boot-Starter-Parentは、Spring Bootアプリケーションで必要なすべてのデフォルト構成をロードします。
Spring-Boot-Starter-Data-JPAは、Spring Data JPAで必要なすべての依存関係をダウンロードします。
私たちのプロジェクトはWebアプリケーションであるため、Spring-Boot-Starter-Webを追加します。
さらに、データベースはMySQLであるため、MySQL-Connector-Java依存関係も必要です。
キャッシュが使用されるため、別のスプリングブートスターターキャッシュの依存関係を追加します。
2。エンティティユーザーを書き込みます
パッケージcom.example.domain; import java.io.serializable; import javax.persistence.column; import javax.persistence.entity; import javax.persistence.id; import javax.persistence.namedquery;@entity@amamedquery(name = "user.findbyname" "ユーザーはSerializable {private static final long serialversionuid = 1l; @id long id; @column(name = "name")文字列name; @column(name = "address")文字列アドレス; public long getId(){return id; } public void setid(long id){this.id = id; } public string getname(){return name; } public void setName(string name){this.name = name; } public string getAddress(){return Address; } public void setAddress(stringアドレス){this.address = address; }}他に何も言うことはありません。 @namedqueryアノテーションに注意してください。これは、リポジトリインターフェイスで定義するFindByNameメソッドがデフォルトのクエリ実装を使用するのではなく、このカスタムクエリステートメントを使用してクエリに使用することを大まかに意味します。ここに注釈がない場合、デフォルトの実装が使用されます。
3.リポジトリインターフェイスを書きます
ここでは、2つのリポジトリインターフェイスを作成します。これらは、例にのみ使用され、実際には1つにマージできます。
userjparepository
パッケージcom.example.repository; Import org.springframework.data.jpa.repository.jparepository; import com.example.domain.user; public interface userjparepository拡張jparepository <user、long> {}ここのuserjparepositoryインターフェイスは、jparepositoryインターフェイスを実装しています。
実際、JParePositoryはPagingandSortingRepositoryインターフェイスを実装し、PagingandSortingRepositoryインターフェイスはCrudrePositoryインターフェイスを実装し、Crudrepositoryインターフェイスはリポジトリインターフェイスを実装します。
簡単な説明:
リポジトリインターフェイスは識別インターフェイスであり、内部が空です。
Crudrepositoryインターフェイスは、追加、削除、変更、および検索の方法を定義します。
PagingandSortingRepositoryインターフェイスは、ページングとソートに使用されます。
JParePositoryインターフェイスは上記のすべてのインターフェイスを継承するため、それらによって宣言されたすべての方法があります。
また、findallメソッドを例として使用すると、jparepositoryインターフェイスがリスト、PagingandsortingRepository、およびCrudrepository Return Iteratorを返します。
USERREREPOSITORY
パッケージcom.example.repository; import java.util.list; import org.springframework.data.jpa.repository.query; Import org.springframework.data.repository.Repository; Import org.springframework.data.repository userRepositoryはリポジトリ<user、long> {list <user> findbynameandaddress(string name、string drestion); @query(value = "from user u us u.name =:name")list <user> findbyname1(@param( "name")string name); @query(value = "select * from#{#entityName} uここでu.name =?1"、nativequery = true)list <user> findbyname2(string name);リスト<ユーザー> findbyname(string name);}ここでのUSERRERPOSITORYインターフェイスは、主にいくつかのクエリメソッドを定義しています。
たとえば、ここで他のクエリステートメントを定義せずに直接実行できます。 Spring Data JPAは、エンティティクラスの属性名とメソッド名に基づいてメソッドを自動的に実装します。 PS:エンティティクラスで@NameDqueryアノテーションを宣言するため、実際、FindByNameメソッドは@NameDquery Annotationによって注釈が付けられたクエリステートメントをクエリに使用します。
さらに、ここでのFindByName1メソッドはHQLステートメントクエリを使用しています。
FindByName2メソッドは、元のSQLステートメントクエリを使用します。
4。サービスを書き込みます
サービスインターフェイス:
パッケージcom.example.service; Import java.util.list; import com.example.domain.user; public interface iuserservice {public list <user> findall(); public void saveuser(ユーザーブック);パブリックユーザーfindone(long id); public void delete(long id);パブリックリスト<ユーザー> findbyname(string name);}インターフェイス実装クラス:
パッケージcom.example.service.impl; Import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.cache.annotation.cachable; import org.springframework.trans.trance.annot.annot.annot.notcransal. com.example.domain.user; import com.example.repository.userrepository; Import com.example.repository.userjparepository; import com.example.service.iuserservice;@service@service@transactionalpublic class userserviceimpl Ime(@autowired utowired usporitory usperpository usparepository usparepository usparepotion; @autowired private userrepository userrepository; public list <user> findall(){return userjparepository.findall(); } public list <user> findbyname(string name){list <user> userlist1 = userrepository.findbyname1(name);リスト<ユーザー> userlist2 = userrepository.findbyname2(name); List <user> userlist3 = userrepository.findbynameandaddress(name、 "3"); System.out.println( "userlist1:" + userlist1); System.out.println( "userlist2:" + userlist2); system.out.println( "userlist3:" + userlist3); userrepository.findbyname(name); } public void saveuser(user book){userjparepository.save(book); } @cachable( "users")public user findone(long id){system.out.println( "cached pages"); return userjparepository.findone(id); } public void delete(long id){userjparepository.delete(id); }}これについて何も言うことはありません。リポジトリインターフェイスメソッドを呼び出すだけです。
5。コントローラーを書き込みます
コントローラーについては何も言うことは何もありません。サービスを呼び出してください。ここのコントローラーは@RestControllerアノテーションを使用して注釈付けされ、URLパス名はRESTFULスタイルに従って名前が付けられていることに注意してください。
パッケージcom.example.web; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.pathvariable; Import org.springframework.web.bind.annotation.Requestmapping; import; org.springframework.web.bind.annotation.restcontroller; Import com.example.domain.user; Import com.example.service.iuserservice;@stupcontroller@requestmapping(value = "/users")public class usercontroller {@autowired private iuserervice userservice; @RequestMapping(value = "/add/{id}/{name}/{address}")public user adduser( @pathvariable int id、 @pathvariable string name、 @pathvariable string dresd){user user = new user(); user.setId(id); user.setname(name); user.setAddress(アドレス); userservice.saveuser(user);ユーザーを返します。 } @requestMapping(value = "/delete/{id}")public void deletebook( @pathvariable int id){userservice.delete(id); } @requestMapping(value = "/")public list <user> getBooks(){return userservice.findall(); } @RequestMapping(value = "/{id}")public user getUser( @pathvariable int id){user user = userservice.findone(id);ユーザーを返します。 } @requestMapping(value = "/search/name/{name}")public list <user> getbookbyname( @pathvariable string name){list <user> users = userservice.findbyname(name);ユーザーを返します。 }}6. DataSourceを構成します
次の構成をApplication.Propertiesファイルに追加します。
spring.jpa.show-sql = truelogging.level.org.springframework.data = debugspring.jpa.hibernate.ddl-auto = spring.datasource.url = jdbc:mysql:// localhost:33 06/demospring.datasource.username = rootspring.datasource.password = rootspring.datasource.datasource.driver-class-name = com.mysql.jdbc.driver
STS IDEを使用すると、これらの属性構成が自動的にプロンプトされるため、検索を保存できます。
spring.datasourceの構成を表示する場合は、このクラスを参照できます:dataSourceProperties.java
7.スタートアップクラスを書きます
比較的簡単です。このクラスが属するパッケージレベルは、他のクラスの注釈をスキャンできることを確認するために、他のクラス以上に等しくなければならないことに注意してください。
パッケージcom.example; Import org.springframework.boot.springApplication; Import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cache.annotation.enablecaching;@springbootapplication void main(string [] args){springapplication.run(springdatajpaexampleapplication.class、args); }}プログラムを実行してテストします
メインメソッドを開始するか、JARパッケージに入力して実行します。
ブラウザに次のURLを入力してテストします。
http:// localhost:8080/users/
http:// localhost:8080/users/add/100/110/111
http:// localhost:8080/users/delete/100
http:// localhost:8080/users/2
http:// localhost:8080/users/search/name/2
プログラムソースコード
https://github.com/peterchenhdu/spring-data-jpa-example
参照
http://docs.spring.io/spring-data/jpa/docs/1.11.0.release/reference/html/
http://javabeat.net/spring-data-jpa/
https://spring.io/guides/gs/caching/
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。