簡単さこそ美しい!SpringBoot+JPA


SpringBootは急速にプロジェクトを構築して、本当に使ってやっと知って、JPAを組み合わせて持続的な層として、最後まで簡単にします!以下にプロジェクトの構築を記録し、その後NOSQL redis、検索エンジンelasticSearchなどを追加し、時代遅れではないものを追加します.
開発ツールidea、プロジェクト構築gradle、テンプレートエンジンthymeleaf
プロジェクト構築
1.【new】->「product」->「Spring Initializrの選択」->「next」
2.Group,Artifact,Type->【next】を記入する
3.ガイドパック
  • 1.左はWebを選択右はWeb 2をチェックする.左選択SQL右チェックJPA 3.左はSQLを選択右はmysql 4をチェックします.左はTemplate Engines、右はThymeleaf 5を選択します.【next】->【finish】

  • 現在のプロジェクト構造は
    Bootjpa Applicationはプロジェクトの起動クラスresources/templates/フォルダはページを置くbuildです.gradle jarパケット座標の格納
    application.properties
    spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.jpa.properties.hibernate.hbm2ddl.auto=update
    

    @RestController
    構成が完了したらコントロールを書いてみてください
    @RestController
    public class HelloBootController {
    
        @RequestMapping("helloBoot")
        public String helloBoot(){
            return "Hello Boot-JPA";
        }
    }

    Bootjpaアプリケーションファイルで起動
    @RestController注記@Controller+@ResponseBodyの代わりにページに戻ってそのまま@Controllerを使えば良い
    現在JPAに登場
    db
    注記はhibernateと同じです.
    @Entity
    public class User {
    
        private long id;
        private String name;
        private String passWord;
        private  String email;
    
        @Id
        @GeneratedValue
        public long getId() {
            return id;
        }
        。。。。。
      }
    

    今、奇跡を目撃する時だ!
    dao
    dao層はJpaRepositoryを継承すればよい
    public interface UserRepository extends JpaRepository {
    }

    なんだ!これで終わり??はい、控えめです.
    controller
    コントロールレイヤ、サービスレイヤがスキップされます.
    @Controller
    public class HelloBootController {
    
        @Autowired
        UserRepository userRepository;
    
        @RequestMapping("/toHello")
        public String toHello(ModelMap modelMap){
            userRepository.save(new User("Mshu","123456","[email protected]"));
            List users = userRepository.findAll();
            modelMap.put("users",users);
            return "helloBoot";   //    
        }
    }
    

    thymeleaf
    ページについては、デフォルトはresources/templates/のhtmlで、解析器がデフォルト構成を構成していることを試みます.
      :resources/templates/
      :html

    では、resources/templates/の下にhelloBoot.htmlというページを新規作成し、thymeleafを導入してthymeleaf構文を使用したことに注意します.
    
    
    
        
        Title
    
    
    
    

    起動して、住所を入力して、車に戻ります!
    application.properties
    アプリケーションをpropertiesに構成されたデータをクラスに注入するには、次のアプリケーションを実行します.propertiesのデータ;
    #elasticsearch
    cluster.name=elasticsearch
    elasticsearch.ip=127.0.0.1
    elasticsearch.port=9300

    クラスで@Value注入を使用し、${}ラップを使用することを忘れないでください.
    @Component
    public class ELClient {
    
        @Value("${cluster.name}")
        private  String clusterName;
    
        @Value("${elasticsearch.ip}")
        private  String elacticSearchIp;
    
        @Value("${elasticsearch.port}")
        private  Integer  elacticSearchPort;
    }
    
    

    すばらしい回顧
    さっきdaoレイヤは1つのインタフェースしか書いていないのに、どうしてsave()を呼び出すことができて、findAll()を呼び出すことができて、JPAに対して多くの基礎の添削の方法をデフォルトして、直接呼び出すことができます.デフォルトで与えられた方法以外はどう書きますか?
    public interface UserRepository extends JpaRepository {
        User findByName(String name);
    }

    呼び出すとそのまま
    User user = userRepository.findByName("Mshu");
    

    では、どのようにマッピングしたのか、それはどのように私のパラメータnameが表のnameに対応していることを知っていて、元の名前のようにマッピングすることができて、道理があるようで間違いなくそんなに簡単で、このような書き方はhibernateすぎます.
    注意事項
  • ブラウザアクセスコントローラが見つかった場合404https://segmentfault.com/n/13...
  • Srpingboot打war包https://segmentfault.com/n/13...