第十篇:Spring Boot統合Spring Data JPA

4232 ワード

一、JPAとは何ですか.
JPAはJava Persistence APIの略称で、中国語名Java永続層APIであり、JDK 5.0注記またはXML記述オブジェクト-リレーショナルテーブルのマッピング関係であり、実行期間のエンティティオブジェクトをデータベースに永続化する.
二、Spring Data JPA
SpringはORMフレームワーク、JPA仕様に基づいてカプセル化された一連のJPAアプリケーションフレームワークであり、開発者が極めて簡単なコードでデータへのアクセスと操作を実現することができ、削除・変更などを含む一般的な機能を提供し、拡張しやすい.
多くのプログラミングインターフェースを提供しています.
Repository:最上位レベルのインタフェースは、すべてのRepositoryのタイプを統一し、コンポーネントがスキャンされたときに自動的に認識できるようにするための空のインタフェースです.
CrudRepository:Repositoryのサブインタフェースは、CRUDを削除して調べる機能を提供します.
PagingAndSortingRepository:CrudRepositoryのサブインタフェースで、ページングソート機能を追加します.
JpaRepository:PagingAndSortingRepositoryのサブインタフェースで、一括操作などの機能を追加します.
JpaSpeccificationExecutor:複雑なクエリーに使用されるインタフェース.
三、例
1.spring-boot-starter-data-jpa依存を追加する:
       
            org.springframework.boot
            spring-boot-starter-data-jpa
       
2.mysql依存を追加するには:
   
       mysql
       mysql-connector-java
       runtime
     
3.アプリケーションでデータソースを構成する.propertiesファイル構成:
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&connectTimeout=5000&socketTimeout=5000&characterEncoding=UTF-8&useConfigs=maxPerformance&prepStmtCacheSqlLimit=1024
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
jpaでデータベースにテーブルを作成するとjpaがhibernate,ddl-autoをcreateに変更し,表を作成した後,updateに変更しなければならない.そうしないと,再起動するたびに表が削除され,新しくなる.
エンティティークラスの作成
@Entityではマッピングされたエンティティークラス、@Idではid、@GeneratedValueフィールドが自動的に生成されます.
package sample.data.jpa.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "t_user")
public class User {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@Column
	private String name;

	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;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}

	public User(Long id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public User() {
	}
}

Dao層
データ・アクセス・レイヤは、JpaRepositoryから継承されたインタフェースを記述することでデータ・アクセスを完了し、数冊の単一テーブル・クエリーの方法が含まれており、非常に便利です.このUserオブジェクト名は、特定のテーブル名ではなく、またIntergerはプライマリ・キーのタイプであり、一般的にIntegerまたはLongであることに注意してください.
package sample.data.jpa.service;

import org.springframework.data.repository.CrudRepository;

import sample.data.jpa.domain.User;

public interface UserRepository extends CrudRepository {

    User findByName(String name);  
  
}

Controllerレイヤ
この例ではサービス層の書き方を簡略化し,実際の開発では省略できない.コントロールを新しく書きます.例は次のとおりです.
package sample.data.jpa.web;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import sample.data.jpa.domain.User;
import sample.data.jpa.service.UserRepository;

@Controller
public class SampleController {

	@Autowired
	private UserRepository userRepository;

	@GetMapping("/")
	@ResponseBody
	public String helloWorld() {
		userRepository.deleteAll();
		User user = new User();
		user.setName("zhangsan");
		userRepository.save(user);
		user = userRepository.findByName("zhangsan");
		System.out.println("name:"+user.getName());
		return "Hello World";
	}

}

テスト:ブラウザ入力を開くhttp://localhost:8080/
ソースのダウンロード:https://gitee.com/zhmal/spring-boot-samples/tree/master/spring-boot-sample-data-jpa
参考資料:
http://projects.spring.io/spring-data-jpa/
https://spring.io/guides/gs/accessing-data-jpa/