BeetlSQLコメント

9726 ワード

Beetl Sql公式サイト:http://ibeetl.com/guide/#beetlsql
7.Beetl SQL Annotation
自動的に生成されるsqlについては、デフォルトではいかなるannotatonも必要とせず、クラス名は表名(NameConverstion類を通じて)に対応し、getterメソッドの属性名は列明(NameConverstionクラスを通じて)に対応するが、場合によってはまだanntationが必要である。
7.1.@AutoIDと@AsignID、@SeqID
  • @AutoIDは、属性フィールドまたはgetter方法に作用し、beetlsqlを教えます。これは自己増加キーで、データの自己成長
  • に対応します。
  • @AsignIDは、属性フィールドまたはgetter方法に作用し、beetlsqlを教えます。これはプログラム設定
  • です。
    @AssignID()
    public Long getId() {
        return id;
    }
    
    コード設定キーは、@AsignIDのようにIDに入ることができます。自動的にシーケンスを生成します。beetlはデフォルトでsnowflakeアルゴリズムを提供します。分散環境のためのidジェネレータです。https://github.com/twitter/snowflake)
    @AssignID("simple")
    public Long getId() {
        return id;
    }
    
    simpleはbeetlsqlが提供するデフォルトのsnowflakeで実現します。sql Managerを通じて自分でidジェネレータを登録することができます。
    sqlManager.addIdAutonGen("uuid2", new IDAutoGen(){
        @Override
        public Object nextID(String params) {
            return "hi"+new Random().nextInt(10000);
        }
    });
    
    @AssignID("uuid2")
    public Long getId() {
        return id;
    }
    
  • @SeqID(name="xxxuseq"は、getterメソッドに作用して、beetlsqlに教えます。これはシーケンスのメインキーです。

  • 属性のIDという自己増加キーに対しては、annotationは不要です。beetlsqlデフォルトは@AutoIDです。
    コメント
  • は、複数のデータベースをサポートするために、これらのannotationを一緒に
  • に重畳することができる。
    7.2.@Tail
    @Tailはクラスに作用し、オブジェクトがハイブリッドモデルであることを表し、次の章の混合モデルを参照して、sqlクエリはpojoでマッピングできない列または結果セットはTailで指定する方法を使用します。
    7.3.属性を無視する
    BeetlSqlはInsertIgnore、UpdateIgnoreの2つの注釈を提供し、属性フィールドまたはgetter方法に作用します。前者は挿入時に無視されます。後者は内蔵更新時に無視されます。
    @UpdateIgnore
    public Date getBir(){
        return  bir;
    }
    
    beetlsqlの前のバージョンでColumnIgnoreを提供します。insertまたはudate属性を提供して無視します。
    @ColumnIgnore(insert=true,update=false)
    public Date getBir(){
        return  bir;
    }
    
    上記の例のように、BIr属性を無視して挿入します。更新時は無視できません。@ColumnIgnoreのinsertデフォルトはtrueで、udateはfalseですので、@ColumnIgnore()をそのまま使ってもいいです。
    7.4.@EnumMapping
    Entityに対しては、エニュメレーションを属性値として使用していますが、エニュメレーション類ではEnumMappingを定義しています。エニュメレーションとデータベース値を相互に変換する方法は4つあります。
  • @EnumMappingが使用されていない場合は、エニュメレーションの名前を属性
  • として使用する。
  • @EnumMapping(EnumMappingn.EnumType.STRING)と同様に、列挙名を属性として使用しており、データベース対応列は文字列
  • であるべきです。
  • @EnumMapping(EnumMappingn.EnumType.ORDINAL)は列挙の順序を属性として使用しており、データベース対応列はintタイプであるべきです。これをマッピングするには、列挙の再構築を防ぐ必要があります。データベースも再構築します。
  • @EnumMapping(「xxx」)は上記の定義でないと、beetlsqlは列挙類のxxx属性を検索します。この値を属性として使用します。例えば、
  • です。
    @EnumMapping("value")
    public enum Color {
        RED("RED",1),BLUE ("BLUE",2);
        private String name;
        private int value;
        private Color(String name, int value) {
            this.name = name;
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value = value;
        }
    
    }
    
    beetlsqは、列挙されたvalue属性(getValueを呼び出す)を取得して、列挙属性値を取得します。
    7.5.@テーブル
    ラベル@Table(name="xxxxx")はbeetlsqlに対して教えています。このような対応xxxxx表はデータベースにUserテーブルがあります。User類はUserテーブルに対応しています。Userテーブルも作成できます。UserQueryオブジェクトもUserテーブルに対応しています。
    @Table(name="user")
    public class QueryUser ..
    
    注:オブジェクトにデータベースshcemaを指定することができます。name="cms.user"のように、cmsライブラリ(またはcmsのユーザは、異なるデータベースに対して名前が異なります。)の下のuserデータテーブルにアクセスします。
    7.6.@Table Template
  • @Table Template()はテンプレートクエリのために使用され、何の値もなければ、メインキーの降順に並べられます。つまりorder byキーの名前desc
  • です。
  • @DateTemplate()は、日付フィールドの属性フィールドまたはgetter方法として、2つの属性acceptとcompar方法があり、それぞれテンプレートクエリに日付フィールドが空でない場合、
  • の日付範囲を表しています。
    @DateTemplate(accept="minDate,maxDate",compare=">=,
    テンプレートで検索すると、翻訳されます。
    @if(!isEmpty(minDate)){
     and date>=#minDate#
    @}
    @if(!isEmpty(maxDate)){
     and date<#maxDate#
    @}
    
    注意
    minDate、maxDateは2つの追加変数です。pojoクラスに定義する必要があります。DateTemplateにもデフォルト値があります。もし@DateTemplate()なら、@DateTemplateに相当します。
    7.7.Mapperに関するコメント
    Mapperはsqlテンプレートファイルを具体的なDaoメソッドクラスにマッピングし、方位コードの開発とメンテナンスを行います。
    Mapperの中の注解は、常用するSql Sttement、Sql Sttement、Sql、Paramにはまだ使われていないRowSize、RowStartが含まれています。Mapperを具体的に参照してください。
    7.8.ORMQuery
    beetlsqlはエンティティクラスでORMQuery注釈を追加することをサポートしています。このように実体のクエリに対して怠惰な負荷を引き起こし、ORMクエリ機能を実現します。
    7.9.@Version
    注@Versionはタイプint、longの属性またはgetter方法で楽観的なロックの実現に用いられます。
    public class Credit   implements Serializable{
        private Integer id ;
        private Integer balance ;
        @Version
        private Integer version ;
    
    内蔵のudateByIdを呼び出したり、udateTemlateByIdを呼び出した場合、@Verssionに注釈されたフィールドはwhere条件の一部となります。
    ┏━━━━━ Debug [credit._gen_updateTemplateById] ━━━
    ┣ SQL:     update `credit` set `balance`=?, `version`=`version`+1 where `id` = ? and `version` = ?
    ┣   :     [15, 1, 5]
    ┣   :     org.beetl.sql.test.QuickTest.main(QuickTest.java:38)
    ┣   :     4ms
    ┣   :     [1]
    ┗━━━━━ Debug [credit._gen_updateTemplateById] ━━━
    
    BeetlSQLも悲観ロックの実現をサポートしています。つまりselect for udate方式を採用しています。SQLManager.lock(Class cls,Object key)を起動すれば、clsに対応するテーブルのメインキーはkeyの記録に行錠を使うことができます。仕事が終わった後だけ、このロックを解除します。