1。はじめに
(1)MySQLはリレーショナルデータベースシステムであり、今日のインターネット企業で最も一般的に使用され、広範なデータベースです。これは、同時に高い訪問に耐えることができるサーバー側のデータベースです。
(2)Spring-Data-JPAは、JPA仕様の下で提供されるリポジトリ層の実装です。 Hibernate、OpenJPA、その他のフレームワークなど、さまざまな実装フレームワークを使用して開発できます。これにより、リポジトリをシンプルにし、ビジネスレイヤーとの結合を解決できます。
この研究では、MySQL + Spring-Data-JPAを使用してそれを構築します。 JPA実装方法では、Hibernateを使用します。データベース接続プールは、接続にDBCPを使用します。
2。プロジェクト構築
1。MySQLおよびJPA関連の依存関係を紹介します。
<! - spring-jdbc関連依存関係 - > <依存関係> groupid> org.springframework </groupid> <artifactid> spring-jdbc </artifactid> </依存関係> <! <artifactid> mysql-connector-java </artifactid> </dependency> <! - jpa関連の依存関係は、spring-data-jpa、spring-ormnate、hibernateが含まれます。 <artifactid> spring-boot-starter-data-jpa </artifactid> </dependency>
3つの依存関係を導入する必要があります。 JDBCは、Spring MySQLを統合することに必要な依存関係です。 2つ目はMySQLのデータベースドライバー依存関係で、3番目はSpring-Data-JPA関連の依存関係です。
これには、AOP、JDBC、スプリングオーム、トランザクショントランザクションAPI、冬眠などの依存関係が含まれています。したがって、JPAは、hibernateを使用して実装するデフォルトです。
2。構成ファイル構成:
構成ファイルの.ymlフォーマットファイルを選択し、DPCP2を使用して接続プールパラメーターを構成します。
1)プロジェクト関連の構成:
サーバー:#configurationポート番号ポート:8088Spring:アプリケーション:#configurationサービス名:CMS-DEPT
サーバーの開くことの構成に関する関連情報、主にサーバー名とポートの構成に関する関連情報は次のとおりです。
2)MySQL関連の構成
Spring:#DataソースとJPA構成DataSource:#データベース関連の構成URL -SSL接続は誤ったURLに設定されています:JDBC:MySQL:// localHost:3306/CRM?CharatereCoding = UTF8&USESSL = fals #configurationユーザー名:*
以下は、主にデータベースURL、アカウント、パスワードを構成するデータベース関連の構成をいくつか紹介します。 URL後の構成情報は、MySQL接続のエンコード形式であり、SSL暗号化が有効になっているかどうかです。
3)DBCP関連の構成
春:#次のものは接続プール関連の構成DBCP2ですTime-bet-bet-between-eviction-runs-millis:200000 #configure接続プールでの接続の最小生存時間を削除してください。
主に接続プール情報として構成されており、構成の詳細は上記のコメントに示されています。
4)Spring-Data-JPaは、ihibernata関連の構成に基づいています
春:JPA:#configureデータベースタイプデータベース:mysql #configure sql show-sqlを印刷するかどうか:true #hibernate関連する構成冬眠:#configure cascade level ddl-auto:naming:#daming strategy:org.hibernate.cfg.improvedingtragetis:hibernate org.hibernate.dialect.mysql5dialect
構成は接続データベースタイプであり、SQLとHibernateのカスケードを印刷するかどうかにかかわらず、いくつかのタイプがあります。
1)検証 - 冬眠がロードされたら、データベーステーブル構造の作成を確認します。
2)作成 - 冬眠がロードされるたびに、データベーステーブル構造が再作成されるたびに再作成されます。これがデータベーステーブルデータの損失の理由です。
3)Hibernateがロードされたときに作成された作成ドロップ、および出口はテーブル構造を削除することです。
4)更新型cascade更新ロードHibernateは、データベース構造を自動的に更新します。
ここでは、カスケードの更新を選択し、元のテーブルで反復します。
命名戦略には2つのタイプがあります。
1)、org.springframework.boot.orm.jpa.hibernate.springphysicalnamingstrategyは、大文字と「_」に遭遇します。
2)、org.hibernate.cfg.improvednamingstrategy変更なしの命名。
3.関連するクラスの構成:
構成クラスは、正常に構成する前に、空気圧クラスを使用した水平ディレクトリまたはサブディレクトリで構成する必要があります。ここでは、構成にXMLメソッドの代わりにJavaクラス構成を使用します。
/*** @Function説明:MySQL関連の構成のクラス* @Author Administrator* ///次の行を使用して、注釈インターフェイスをソートして負荷の優先順位の問題に対処します。 2つの列挙変数@Order(Ordered.highest_precedence)//次の行は、構成クラス@configuration //このクラスとしてこのクラスを表します。 @componentscan.filter(type = filtertype.annotation、value = service.class)} @enablejparepositories(basepackages = "com.hzt。**。リポジトリ")パブリッククラスmysqlconfig {@bean persistenceexceptiontranslationpostprocessor persipexceptiontranslationTranslation -slationpostprocessor( persistenceExceptionTranslationPostProcessor(); }} 1) @Order Annotation、クラスの読み込み優先度を構成するために使用される、2つの列挙変数があります。
Ordered.hide_precedence- integer.min_value-最小値、最優先事項
Ordered.lowest_precedence -integer.max_value -maximum値、最優先事項
2)@Configuration Annotation、つまり、このクラスが構成クラスであることを意味します
3)mysql proxytargetclassの@enabletransactionmanagementトランザクション管理=クラスのトランザクション管理を有効にするための真の手段
4)@EnableJParePositoriesは、トランザクションの構成に使用されます。ここでパスはCGNL式で表され、DeptrePository.classなどの特定のクラスとして定義することもできます。
その子要素conterfiltersは、includefilters = { @componentscan.filter(type = filtertype.annotation、value = service.class)などのトランザクションインターセプターを定義できます。
4。ORMマッピングJavaクラス関連コード:
1)データベーステーブル構造
2)エンティティクラスマッピング
@Entity //このタイプのマッピングエンティティクラスは、テーブル@table(name = "tbl_dept")のマッピングエンティティクラスを表します。 */ private static final long serialversionuid = 1l; /**プライマリキー-id uuid*/@id //このメモは、フィールドがクラスのプライマリキーであることを意味します@generatedValue(generator = "system -uuid")@genericgenerator(name = "system -uuid"、戦略= "uuid")// name -collumn = " /** numeral、unique*/// nullable-それはnull、デフォルトで真の一意になりますか? / **部門名*/ @column(name = "name"、unique = true、nullable = false)private string name; / **部門管理プライマリキー-id uuid*/ @column(name = "manager"、unique = true、nullable = false)private string manager; / **部門の説明*/ @column(name = "description")private string description; / **部門電話*/ @column(name = "電話")プライベート文字列電話。 / **部門電話*/ @column(name = "電話")プライベート文字列電話。 / **部門作成時間*/ @column(name = "createtime")@dateTimeFormat(pattern = "yyyy-mm-dd hh:mm:ss")private date createTime; / **部門の変更時間*/ @column(name = "edittime")@dateTimeFormat(pattern = "yyyy-mm-dd hh:mm:ss")private date edittime;}
(1)、@Entityは、このタイプのマッピングのテーブル構造をデータベースとして表します
(2)、@table(name = "tbl_dept")この注釈は、エンティティクラスとテーブルマッピングの関係を構成するために使用されます。名前はマッピングされたテーブル名を表します。
(3)@IDアノテーションは、このクラスが主キーであることを意味します
(4)、@generatedValueアノテーションを使用して、主要なキー関連情報の構成に使用され、ジェネレーター属性は生成戦略の構成に使用されます。次の列挙値があります。
1.auto-主キーはプログラムによって制御されます。
2。アイデンティティ - データベースによって自動的に生成されます。
3。エネルギー - 一次キーを生成するために使用されるジェネレーターを指定します。
4。シーケンス - 基礎となるデータベースのシーケンスに基づいてプライマリキーを生成します。
5。テーブル - 特定のデータベーステーブルを使用して、主キーを保存します。
6。System-UUIDは、マッチングのためにシステム生成されたUUIDの使用を表します。
(5)@Column Annotation列関連情報を構成するためのアノテーション1。名前フィールドは、テーブル構造にマッピングされたマッピングフィールドを指定するために使用されます。
2。長さは、このフィールドの長さの制約を表し、省略できます。
3.一意の属性は、このフィールドに一意の制約が有効になっているかどうかを表します。デフォルトはfalseで、一意は真です。
4. Nullableは、このフィールドが空になり、デフォルトが真であるかどうかを意味します。 falseは、空にすることができないことを意味します。
(6)@DateTimeFormatは、データベースのテーブル時間をマッピングするために使用されます。
対応するGETおよびSETメソッドは省略されています。
3)deptrepository層の実装
図に示すように、Respositoryは異なるサブインターフェイス継承を持つインターフェイス仕様です。親インターフェイスのすべての関数を継承することに加えて、各サブインターフェイスは、異なる実装のために追加のメソッドも追加します。 Crudrepositoryクラスは基本的な方法を定義し、そのサブクラスは個別に拡張されます。
たとえば、CrudrePositoryのすべての方法を継承することに加えて、PagingandSortingRepositoryクラスも拡張し、検索のページングに関連する方法を追加します。
iterable <t> findall(sort sort); page <t> findall(pageable pageable);
JParePositoryは、PagingandSortingRepositoryに基づいて拡張されています。
1。リポジトリレイヤー:
@Repositoryは、このクラスは春までに管理されていることを表しており、DAOレイヤーです
/*** @Function説明:部門テーブル操作のDAOレイヤーインターフェイス* @Author Administrator*/ @repository //リポジトリこれはDAOレイヤー実装パブリックインターフェイスDeptrePository拡張jparePository <dept、string> {}実装クラスに応じて、呼び出すさまざまな方法があります。一般的に、誰もが名前と意味を知ることでこの方法の使用を知ることができます。一般的なタイプでは、最初のパラメーターはテーブルマップのエンティティクラスを表し、2番目のパラメーターはプライマリキータイプを表します。
2。サービスレイヤーの実装:
/*** @Function説明:部門サービス運用の実装クラス* @Author Administrator*/ @ServicePublic DeptServiceImplはDeptService {/** Log Processing Class*/Private Final Logger log = LoggerFactory.getLogger(getClass()); @autowired private deptrepositoryリポジトリ。 @Override Public Dept QueryByID(String ID)スロー例外{try {dept result = repository.findone(id); log.info(result.toString());返品結果; } catch(例外e){log.info(e.tostring()、e);新しいserviceException( "ID!に従ってクエリをしている間に例外が発生しました!"); }}}findoneは、jparepositoryによって実装された方法です。
3。コントローラーレイヤーの実装:
@retscontroller@requestmapping( "/api/v1/dept")public class deptcontroller {/**ロギングクラス*/private logger log = loggerfactory.getLogger(getClass()); / **私自身のサービス*/ @Autowiredプライベートデプトサービスサービス。 /*** @Function説明:IDに基づいて部門コンテンツをクエリする方法* @return Dept*/@getMapping( "/id/get")public result getByid(string id)throws {verify(new verifyparam( "department id"、id));新しい結果を返します( "ID!"、service.querybyid(id)を介して取得しました); }}RestControllerがJSON形式を返すコントローラーを表す場合、@RequestMappingはクラスマップのURLを定義します。ここで受け入れるデータは、通常の文字列タイプです。 JSONタイプを受け入れる必要がある場合は、@RequestBody文字列IDが必要な場合があります。
4。テスト:
Spring-Data-JPAとMySQLの統合と構成を完了するために、GETリクエストを送信するシミュレーション。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。