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を教えます。これはプログラム設定 です。@SeqID(name="xxxuseq"は、getterメソッドに作用して、beetlsqlに教えます。これはシーケンスのメインキーです。 。
属性のIDという自己増加キーに対しては、annotationは不要です。beetlsqlデフォルトは@AutoIDです。
コメントは、複数のデータベースをサポートするために、これらのannotationを一緒に に重畳することができる。
7.2.@Tail
@Tailはクラスに作用し、オブジェクトがハイブリッドモデルであることを表し、次の章の混合モデルを参照して、sqlクエリはpojoでマッピングできない列または結果セットはTailで指定する方法を使用します。
7.3.属性を無視する
BeetlSqlはInsertIgnore、UpdateIgnoreの2つの注釈を提供し、属性フィールドまたはgetter方法に作用します。前者は挿入時に無視されます。後者は内蔵更新時に無視されます。
7.4.@EnumMapping
Entityに対しては、エニュメレーションを属性値として使用していますが、エニュメレーション類ではEnumMappingを定義しています。エニュメレーションとデータベース値を相互に変換する方法は4つあります。@EnumMappingが使用されていない場合は、エニュメレーションの名前を属性 として使用する。@EnumMapping(EnumMappingn.EnumType.STRING)と同様に、列挙名を属性として使用しており、データベース対応列は文字列 であるべきです。@EnumMapping(EnumMappingn.EnumType.ORDINAL)は列挙の順序を属性として使用しており、データベース対応列はintタイプであるべきです。これをマッピングするには、列挙の再構築を防ぐ必要があります。データベースも再構築します。 @EnumMapping(「xxx」)は上記の定義でないと、beetlsqlは列挙類のxxx属性を検索します。この値を属性として使用します。例えば、 です。
7.5.@テーブル
ラベル@Table(name="xxxxx")はbeetlsqlに対して教えています。このような対応xxxxx表はデータベースにUserテーブルがあります。User類はUserテーブルに対応しています。Userテーブルも作成できます。UserQueryオブジェクトもUserテーブルに対応しています。
7.6.@Table Template@Table Template()はテンプレートクエリのために使用され、何の値もなければ、メインキーの降順に並べられます。つまりorder byキーの名前desc です。@DateTemplate()は、日付フィールドの属性フィールドまたはgetter方法として、2つの属性acceptとcompar方法があり、それぞれテンプレートクエリに日付フィールドが空でない場合、 の日付範囲を表しています。
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方法で楽観的なロックの実現に用いられます。
7.Beetl SQL Annotation
自動的に生成されるsqlについては、デフォルトではいかなるannotatonも必要とせず、クラス名は表名(NameConverstion類を通じて)に対応し、getterメソッドの属性名は列明(NameConverstionクラスを通じて)に対応するが、場合によってはまだanntationが必要である。
7.1.@AutoIDと@AsignID、@SeqID
@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;
}
属性のIDという自己増加キーに対しては、annotationは不要です。beetlsqlデフォルトは@AutoIDです。
コメント
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("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
@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の記録に行錠を使うことができます。仕事が終わった後だけ、このロックを解除します。