Java Spring APIをvscode & postgresで作成します

18893 ワード

Javaは、すべての時間と春のWebアプリケーションを含むアプリケーションのすべてのタイプを構築するための最も人気のフレームワークの最も人気のあるプログラミング言語の一つです.このチュートリアルでは、エディタとしてvscodeを使用した非常に基本的なAPIを構築します.

必要条件
  • Java OpenJDK 11以上
  • VSCODE
  • VSCode拡張モジュール: Javaスプリング拡張パック
  • 構文ハイライトのためのどんなJava拡張でも
  • より高いインストールと実行
  • のPostgres 12

    新しいプロジェクトの初期化
    コマンドパレットを選択し、“新しいMavenプロジェクトを初期化”を選択します
  • 春のバージョンを選択し、私は2.4.3
  • を選択しています
  • 言語(Java、KotlinまたはGroovy)を選択します.
  • groupidを入れて、私はちょうど私の名前を使用しています.「アレックス.マーセド」
  • ProjectIDを入れて、私はデフォルトを続けました
  • パッケージをパッケージングタイプ
  • として選択します
  • はJavaバージョン11
  • を選びました
  • ウェブアプリケーション
  • を構築するためのSpring Web依存性を選択します.
  • PostgresqlドライバをPostgres
  • に接続します.
  • 春のデータJPAは、我々のORM
  • として行動します
  • プロジェクトを空のフォルダ
  • に生成します

    データベース設定
    次の設定をsrc/main/resources/applicationに追加します.プロパティ
    # Database Settings
    spring.datasource.url=jdbc:postgresql://localhost:5432/javaspringtest
    spring.datasource.username=test5
    spring.datasource.password=test5
    
    # The SQL dialect makes Hibernate generate better SQL for the chosen database
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
    
    # Hibernate ddl auto (create, create-drop, validate, update)
    # Allows for auto creation of tables
    spring.jpa.hibernate.ddl-auto = update
    

    申請書
    アプリケーションはsrc/main/java/アレックス/merced/にあります( Groupidとして選んだものによって異なります).このフォルダでは、デモと呼ばれるフォルダーが表示されます(または、プロジェクトが何であれ)、このフォルダにアプリケーションを初期化するファイルがあります.
    私たちはいくつかのコントローラを作成したいので、このフォルダ(私/src/main/java/アレックス/merced/demo)のコントローラフォルダを作成します.
    コントローラのフォルダで、コントローラと呼ばれるファイルを作成します.自動生成するJava.
    package alex.merced.demo.controllers;
    
    public class Controller {
    
    }
    
    そのような最も基本的なルートを作りましょう.
    package alex.merced.demo.controllers;
    
    //Imports, vscode should auto add these as needed
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    //This annotation tells Spring this is a RestAPI Controller
    @RestController
    public class Controller {
    
        // This tells spring this function is a route for a get request to "/"
        @RequestMapping(value="/", method=RequestMethod.GET)
        public String Hello() {
            // The response will include the return value
            return "Hello World";
        }
    
    }
    
    この後、アプリケーションを実行してローカルホスト上でそれを訪問するためにF 5を押すことができるはずです.

    エンティティの作成
    同じフォルダでは、demoapplication.Javaとコントローラフォルダが有効になったら、エンティティフォルダーを作成しましょう.エンティティは、データベースと対話するためのモデルクラスです.Hibernate/JPAは、私たちのためのエンティティ(後でリポジトリを作成した後)に基づいてテーブルを作成します.
    実体/人.ジャバ
    package alex.merced.demo.entities;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    @Entity
    public class Person {
    
        // MODEL ID FIELD
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        //Model Specific Properties
        public String name;
        public Integer age;
    
        //constructor
        public Person (){
    
        }
    
        public Person(String name, Integer age){
            this.name = name;
            this.age = age;
        }
    
        //getters
    
        public Long getId(){
            return this.id;
        }
    
        public String getName(){
            return this.name;
        }
    
        public Integer getAge(){
            return this.age;
        }
    
        //setters
    
        public void setId(Long id){
            this.id = id;
        }
    
        public void setName(String name){
            this.name = name;
        }
    
        public void setAge(Integer age){
            this.age = age;
        }
    
    
    }
    

    リポジトリの作成
    それで、実体は我々のデータのためのスキーマとして働きます、現在、倉庫は我々のコードとテーブルの間のインターフェースとして作用します.新しいフォルダのデモ/リポジトリを作成し、そこにPersonRepositoryと呼ばれるファイルを作成します.ジャバ.
    package alex.merced.demo.repositories;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import alex.merced.demo.entities.Person;
    
    // We create our repository, the <> typing defines the entity class acting as a schema, and type of the ID
    public interface PersonRepository extends JpaRepository<Person, Long> {
    
    }
    

    APIの作成
    我々は、データベースとの対話に必要なすべての作品を構築しました.今私たちは人のためのコントローラを構築する必要があるので、コントローラのフォルダでは、PersonControllerを作成します.
    package alex.merced.demo.controllers;
    
    import org.springframework.web.bind.annotation.DeleteMapping;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.PutMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import alex.merced.demo.repositories.PersonRepository;
    import java.util.List;
    import alex.merced.demo.entities.Person;
    
    @RestController
    public class PersonController {
    
        // Property to hold our repository
        public PersonRepository People;
    
        // Constructor that receives the repository via dependency injection
        public PersonController(PersonRepository people){
            this.People = people;
        }
    
        // Get to /people that returns list of people
        @GetMapping("/people")
        public List<Person> getPeople(){
            return People.findAll(); // Returns all people!
        }
    
        // Post to /people, takes in request body which must be of type Person
        @PostMapping("/people")
        public List<Person> createPerson(@RequestBody Person newPerson){
            People.save(newPerson); //creates new person
            return People.findAll(); // returns all cats
        }
    
        // put to /people/:id, takes in the body and url param id
        @PutMapping("/people/{id}")
        public List<Person> updatePerson(@RequestBody Person updatedPerson, @PathVariable Long id){
            // search for the person by id, map over the person, alter them, then save
            People.findById(id)
                .map(person -> {
                    person.setName(updatedPerson.getName());
                    person.setAge(updatedPerson.getAge());
                    return People.save(person); // save and return edits
                });
    
            return People.findAll(); // return all people
        }
    
        // delete request to /people/:id, deletes person based on id param
        @DeleteMapping("/people/{id}")
        public List<Person> deleteCat(@PathVariable Long id){
            People.deleteById(id);
            return People.findAll();
        }
    }
    

    APIのテスト
    あなたのすべてのルートをテストしてください、そして、我々は展開に着きます!

    Herokuへの配備
    プロジェクトのルートにある
  • (POM . xmlの場合)はシステムと呼ばれるファイルを作成します.次の行のプロパティ(Javaバージョンの調整).
  • java.runtime.version=11
    
  • アプリケーションのプロパティを更新しますので、データベースのURLを
  • # Database Settings
    # spring.datasource.url=jdbc:postgresql://localhost:5432/javaspringtest
    spring.datasource.url=${DATABASE_URL}
    # spring.datasource.username=test5
    # spring.datasource.password=test5
    
    # The SQL dialect makes Hibernate generate better SQL for the chosen database
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
    
    # Hibernate ddl auto (create, create-drop, validate, update)
    spring.jpa.hibernate.ddl-auto = update
    
  • コミットし、Githubにプッシュします.com
  • Herokuに行き、新しいプロジェクトを作成する
  • 下に
  • が配備されます
  • は、あなたのレポを接続します
  • 自動展開を有効にする
  • 手動展開
  • のトリガー
    この時点で、プロジェクトを構築し、自動的にデータベースを提供する必要がありますので、あなたのAPIをテストすることができますし、それが動作する必要があります!Java SpringでAPIビルドを展開しました.