springboot基底JPAの開発02

1.データベース操作

データベースの操作で春ブーツでは簡単ですが、ここではJPAを使用し、JPAは、自動化されたSQLの多様性を生成するために休止状態を使用することで、単純なCRUDを達成することができます

1.1依存のmaven JPAを追加

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

1.2クラス定義の実体

package com.mp.prj;

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name = "person_test")
public class Person implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    /**
     * 指定name,则为数据库中的列名,这里做个映射
     */
    @Column(name = "uname",length = 32,nullable = false,unique = true)
    private String name;
    /**
     * 省略默认列名就是属性名
     */
    @Column(length = 32)
    private String passwd;

    /*
    * @Transient 注解不会映射成表的字段 ,如果字段不写注解,则默认为@Column
    * */
    @Transient
    private String time;

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    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 getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    public Person(String name,String passwd){
        this.name = name;
        this.passwd = passwd;
    }

    public Person(String name){
        this.name = name;
    }

    public Person(){}
}

注釈説明:
@Entity(1):必須の注釈であり、クラス宣言は、データベーステーブルに対応
(2)@Table(名=「 person_test」): 任意の注釈は、データベーステーブルと実体宣言でありますマッピング情報、指定されていない場合、同じテーブルの代わりに、エンティティの名前
(3)@Id:宣言属性一意に対応するエンティティを識別する
(4)@GeneratedValue(戦略= GenerationType.IDENTITYを ): 成長をからの
(5)@Column (名前、=「は、uname」長さ = 32、真=ユニーク、偽= NULL可能): フィールド名指定されたエンティティ矛盾フィールドとテーブル、同じエンティティを表す、デフォルトのフィールドを表す対応する属性宣言フィールドに
(6)@Transient Notesフィールドは、フィールドがノートを書かされていない場合、デフォルトは@Basicで、テーブルにマップされることはありません

注意:これがデフォルトコンストラクタを指定する必要があります。

永続インタフェースサービス1.3

package com.mp.prj;


import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface PersonRepository extends JpaRepository<Person,Long> {
//    Person findbyName(String name);

    /*
    * 自定义查询, @Query 注解中增加一个 nativeQuery = true 的属性,就可以采用原生 SQL 语句的方式来编写查询
    * */
    @Query(nativeQuery = true, value = "select * from person_test where uname=:name and passwd = :passwd")
    List<Person> findPersonByNameAndPasswd(@Param("name") String name,@Param("passwd") String passwd);
}

説明注:
(1)@Repository:すべてのマーク@RepositoryのクラスはBeanとして登録されます春
(2)デフォルトでは、JPAは、基本的なCRUD操作を提供しますが、のニーズを満たすためにしている
(3)ここで、またI私たちは@query注釈の使用は、SQLクエリをカスタマイズすることができ、使用のニーズを満たすことができない場合にはこの方法を、書きました

1.4コントローラを実現

package com.mp.prj;

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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/person")
public class PersonController {
    @Autowired
    PersonRepository personRepository;

    @RequestMapping("/insert")
    public String insertPerson(@RequestParam(value = "name") String name,
                            @RequestParam(value = "passwd") String passwd){
        personRepository.save(new Person(name,passwd));
        return "add person success";
    }

    @RequestMapping("/add/{name}")
    public String addPerson(@PathVariable("name") String name){
        personRepository.save(new Person(name));
        return "add person ok";
    }

    @RequestMapping("/findbyid/{id}")
    public Person findById(@PathVariable("id") String id){
        return personRepository.findById(Long.valueOf(id)).get();
    }

    @RequestMapping("/list")
    public List<Person> list(){
        return personRepository.findAll();
    }

    @RequestMapping("/find2/{name}/{passwd}")
    public List<Person> find2(@PathVariable("name") String name,
                        @PathVariable("passwd") String passwd){
        return personRepository.findPersonByNameAndPasswd(name,passwd);
    }
}

注釈説明:
@Autowired(1):種類別(byType)嵌合依存オブジェクト
(2)@PathVariable @RequestParamと
容易に理解、再び、全く詳細ありません

1.6データベース構成ファイル

メインパスでは、新しいリソースフォルダがルートリソース、新規ファイルapplication.yamlとして指定します

spring:
  datasource:
    url: jdbc:mysql://10.1.0.9:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: test
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
      naming:
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

    show-sql: true

DDL-自動パラメータ:
(1)を作成します。すべてのテーブルを一度に削除されます上の生成休止状態、及び2は、そのような変更を持っていない場合でも、その後、実施されるべきである、あなたのモデルタイプに基づいて新しいテーブルを再生成するロードされていますこれは、データ損失のデータベーステーブルの重要な原因です。
(2)ドロップを作成:休止状態に応じて各モデルのクラステーブルをロードし、しかしのSessionFactory閉じテーブルは自動的に削除されます。
(3)更新:最も一般的に使用されるプロパティ、あなた最初の負荷を自動的にさえテーブル構造場合は、自動的にモデルクラスに基づいてテーブル構造を更新しますが、後に休止状態にロードされている(前提が良いデータベースを設定することである)、テーブルのモデルクラスの構造に応じて設定休止状態テーブルの行を変更するが、前の行がまだ存在する削除されません。サーバーにデプロイする場合、テーブル構造がすぐに確立されることはありません、それは最初のアプリケーションの起動と前に実行した後に待機することに注意してください。
(4)検証:あなたは休止状態をロードするたびに、データベースのテーブル構造の検証を作成し、データベース内のテーブルのみが比較され、それは新しいテーブルを作成しませんが、新しい値を挿入します。

1.7サービスの開始

(1)新ユーザー:HTTP:// localhostの:? 8080 /人/ INSERT名= zhangsan1&passwdファイル= 123456
成功は、データベースにデータを挿入すること

(2)PathVariable方法新しいユーザーを使用します。
HTTP:// localhostを:8080 /人/追加/ zhangsan2は、
(3)ユーザーの検索:
HTTP:// localhostを:8080 /人/一覧表示していない
他はもはや詳細に記載されています...

1.8ロード詳細なメモ

分析のためのトピックの後

おすすめ

転載: blog.csdn.net/mapeng765441650/article/details/94716122