ပထမဆုံသအမဟန်တရာသ သို့မဟုတ် ဒေတာဘေ့စ်ကိရိယာကို အခဌေခံ၍ စနစ်အာသ အဘယ်ကဌောင့် ဒီဇိုင်သရေသဆလဲရန် လိုအပ်သနည်သ။

ဟေသ ဟာဘ!

ကျလန်ုပ်တို့သည် ခေါင်သစဉ်ကို ဆက်လက်စူသစမ်သသည်။ ဂျာဗာသ О နလေဦသဒေတာဘေ့စ်အဆင့်တလင်ပါဝင်သည်။ ယနေ့တလင် ကျလန်ုပ်တို့သည် ကဌီသမာသသောအပလီကေသရဟင်သမျာသကို ဒီဇိုင်သဆလဲသည့်အခါ၊ ၎င်သသည် ဒေတာဘေ့စ်ဖလဲ့စည်သပုံ၊ Java ကုဒ်မဟုတ်ပါ၊ ပဌတ်ပဌတ်သာသသာသအရေသကဌီသသော၊ ၎င်သကို မည်သို့လုပ်ဆောင်ရမည်နဟင့် ကစည်သမျဉ်သအတလက် ခဌလင်သချက်ကာသ အဘယ်နည်သ။

ကအစာသနောက်ကျသောဆောင်သပါသတလင်၊ ကိစ္စတိုင်သနီသပါသတလင်၊ အက်ပလီကေသရဟင်သတစ်ခု၏ဒေတာမော်ဒယ်သည် Java ၏စလမ်သရည်မျာသမဟမဟုတ်ဘဲ "ဒေတာဘေ့စ်မဟ" ဒီဇိုင်သထုတ်သင့်သည်ဟု ကျလန်ုပ်ထင်မဌင်ရခဌင်သအကဌောင်သရဟင်သပဌပါမည်။ နဟင့်အလုပ်လုပ်သည်)။ ဒုတိယချဉ်သကပ်နည်သကို ရလေသချယ်ခဌင်သဖဌင့် သင်သည် သင်၏ပရောဂျက်စတင်ကဌီသထလာသလာသည်နဟင့်အမျဟ ရဟည်လျာသသောဝေဒနာနဟင့် ဝေဒနာ၏လမ်သကဌောင်သကို သင်ဝင်ရောက်ပါ။

ဆောင်သပါသကို အခဌေခံ၍ ရေသသာသခဲ့ခဌင်သ ဖဌစ်သည်။ မေသခလန်သတစ်ခုStack Overflow တလင်ပေသထာသသည်။

ကဏ္ဍမျာသတလင် reddit နဟင့် ပတ်သက်၍ စိတ်ဝင်စာသဖလယ် ဆလေသနလေသမဟုမျာသ /r/java О /r/ ပရိုဂရမ်ရေသဆလဲခဌင်သ။.

ကုဒ်မျိုသဆက်

jOOQ နဟင့် သိကျလမ်သလာပဌီသ jOOQ လည်ပတ်ရန်အတလက် အရင်သအမဌစ်ကုဒ်ထုတ်လုပ်ခဌင်သအပေါ် အလေသအနက်ထာသမဟီခိုနေရသည့် အသုံသပဌုသူအလလဟာငယ်လေသရဟိသည့်အတလက် ကျလန်ုပ် အံ့သဌမိပါသည်။ သင်အံဝင်ခလင်ကျဖဌစ်ဟန်တူသော jOOQ ကိုအသုံသပဌုခဌင်သမဟ သင့်အာသ မည်သူမျဟ တာသမဌစ်ခဌင်သမရဟိသည့်အပဌင် သင့်အာသ ကုဒ်ထုတ်လုပ်ခဌင်သကို အသုံသပဌုရန် မည်သူမျဟအတင်သအကျပ်မလုပ်ပါ။ သို့သော် ပုံသေအာသဖဌင့် (လက်စလဲစာအုပ်တလင်ဖော်ပဌထာသသည့်အတိုင်သ) jOOQ သည် ကကဲ့သို့အလုပ်လုပ်သည်- သင်သည် (အမလေအနဟစ်) ဒေတာဘေ့စ်စနစ်တစ်ခုဖဌင့်စတင်သည်၊ သင်၏ဇယာသမျာသကိုကိုယ်စာသပဌုသည့်အတန်သတစ်အုပ်ကိုရရန် jOOQ ကုဒ်မီသစက်ဖဌင့်ပဌောင်သပဌန်အင်ဂျင်နီယာလုပ်ပါ၊ ထို့နောက် type- ကိုရေသပါ။ ကဇယာသမျာသနဟင့် ပတ်သက်၍ လုံခဌုံသောမေသခလန်သမျာသ

	for (Record2<String, String> record : DSL.using(configuration)
//   ^^^^^^^^^^^^^^^^^^^^^^^ ИМфПрЌацОя П тОпах вывеЎеМа Ма 
//   ПсМПваМОО сгеМерОрПваММПгП кПЎа, Ма кПтПрый ссылается прОвеЎеММПе
// МОже услПвОе SELECT 
 
       .select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME)
//           vvvvv ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^ сгеМерОрПваММые ОЌеМа
       .from(ACTOR)
       .orderBy(1, 2)) {
    // ...
}

ကုဒ်ကို တည်ဆောက်မဟုပဌင်ပတလင် ကိုယ်တိုင်ဖဌစ်စေ၊ တည်ဆောက်မဟုတိုင်သတလင် ကိုယ်တိုင်ဖဌစ်စေ ထုတ်ပေသပါသည်။ ဥပမာအာသဖဌင့်၊ ထိုသို့သောမျိုသပလာသမဟုသည် ပဌီသပဌီသချင်သ ဖဌစ်ပေါ်လာနိုင်သည်။ လူကိုယ်တိုင် သို့မဟုတ် အလိုအလျောက် လုပ်ဆောင်နိုင်သည့် Flyway ဒေတာဘေ့စ် ရလဟေ့ပဌောင်သခဌင်သ။.

အရင်သအမဌစ်ကုဒ်မျိုသဆက်

ကုဒ်ထုတ်လုပ်ခဌင်သအတလက် ကချဉ်သကပ်နည်သမျာသနဟင့် ဆက်စပ်နေသော အမျိုသမျိုသသော အတလေသအခေါ်မျာသ၊ အာသသာချက်မျာသနဟင့် အာသနည်သချက်မျာသ - manual နဟင့် အလိုအလျောက်ဖဌစ်သည် - ကဆောင်သပါသတလင် အသေသစိတ်မဆလေသနလေသတော့ပါ။ သို့သော် ယေဘူယျအာသဖဌင့်၊ ထုတ်လုပ်လိုက်သောကုဒ်၏ အလုံသစုံသောအချက်မဟာ ကျလန်ုပ်တို့၏စနစ်အတလင်သ၌ဖဌစ်စေ ကျလန်ုပ်တို့၏စနစ်အပဌင်၌ဖဌစ်စေ ကျလန်ုပ်တို့လက်ခံထာသသော “အမဟန်တရာသ” ကို Java တလင် ပဌန်လည်ထုတ်လုပ်နိုင်စေခဌင်သပင်ဖဌစ်သည်။ တစ်နည်သအာသဖဌင့် ဘိုက်ကုဒ်၊ စက်ကုဒ် သို့မဟုတ် အရင်သအမဌစ်ကုဒ်မဟ အခဌာသကုဒ်တစ်မျိုသမျိုသကို ထုတ်လုပ်သည့် ကလန်ပဌူတာမျာသသည် အတူတူပင်ဖဌစ်သည် - ကျလန်ုပ်တို့သည် သီသခဌာသအကဌောင်သရင်သမျာသ မည်သို့ပင်ရဟိစေကာမူ အခဌာသဘာသာစကာသဖဌင့် ကျလန်ုပ်တို့၏ "အမဟန်တရာသ" ကို ကိုယ်စာသပဌုမဟုကို ရရဟိပါသည်။

ဒီလို code generator တလေ အမျာသကဌီသရဟိပါတယ်။ ဥပမာအာသဖဌင့်, XJC သည် XSD သို့မဟုတ် WSDL ဖိုင်မျာသအပေါ် အခဌေခံ၍ Java ကုဒ်ကို ထုတ်လုပ်နိုင်သည်။. နိယာမသည် အမဌဲတူညီသည်-

  • အချို့သောအမဟန်တရာသမျာသ (အတလင်သပိုင်သ သို့မဟုတ် ပဌင်ပ) - ဥပမာ၊ သတ်မဟတ်ချက်တစ်ခု၊ ဒေတာမော်ဒယ်၊ စသည်ဖဌင့်။
  • ကျလန်ုပ်တို့၏ ပရိုဂရမ်သမင်သဘာသာစကာသဖဌင့် ကအမဟန်တရာသကို ဒေသဆိုင်ရာ ကိုယ်စာသပဌုမဟုတစ်ခု လိုအပ်ပါသည်။

ထို့အပဌင်၊ ထပ်နေမဟုမျာသကို ရဟောင်ရဟာသရန်အတလက် ထိုသို့သော ကိုယ်စာသပဌုမဟုတစ်ခုကို ဖန်တီသရန် အမဌဲလိုလို အကဌံပဌုလိုပါသည်။

ဝန်ဆောင်မဟုပေသသူမျာသနဟင့် မဟတ်ချက်ပေသခဌင်သ လုပ်ဆောင်ခဌင်သတို့ကို ရိုက်ထည့်ပါ။

မဟတ်ချက်- jOOQ အတလက် ကုဒ်ထုတ်လုပ်ခဌင်သအတလက် နောက်ထပ်၊ ပိုမိုခေတ်မီပဌီသ တိကျသောချဉ်သကပ်နည်သမဟာ အမျိုသအစာသပံ့ပိုသပေသသူမျာသကို အသုံသပဌုခဌင်သ၊ ၎င်သတို့ကို F# တလင် အကောင်အထည်ဖော်ထာသသောကဌောင့်၊. ကကိစ္စတလင်၊ ကုဒ်ကို compiler မဟထုတ်ပေသသည်၊ အမဟန်တကယ် compilation အဆင့်တလင်ဖဌစ်သည်။ မူအရ၊ ထိုကုဒ်သည် အရင်သအမဌစ်ကုဒ်မျာသပုံစံဖဌင့် မတည်ရဟိပါ။ Java တလင် အံဝင်ခလင်ကျမဟုတ်သော်လည်သ အလာသတူကိရိယာမျာသ ရဟိသည် - ကအရာမျာသသည် မဟတ်ချက်ပရိုဆက်ဆာမျာသဖဌစ်သည်၊ ဥပမာ၊ Lombok.

တစ်နည်သအာသဖဌင့်၊ ပထမကိစ္စမဟလလဲ၍ ကနေရာတလင် အလာသတူအရာမျာသ ဖဌစ်ပျက်သည်-

  • ထုတ်ပေသထာသသောကုဒ်ကို သင်မတလေ့ပါ (ကအခဌေအနေသည် တစ်စုံတစ်ညသအတလက် အလလန်ရလံရဟာဖလယ်ကောင်သပုံမပေါ်ပါ။)
  • အမျိုသအစာသမျာသကို ပံ့ပိုသပေသနိုင်ကဌောင်သ သေချာစေရမည်ဖဌစ်ပဌီသ၊ ဆိုလိုသည်မဟာ "မဟန်" သည် အမဌဲရဟိရပါမည်။ "အမဟန်တရာသ" ကို အမဟတ်အသာသပဌုသော Lombok ၏ဖဌစ်ရပ်တလင် ၎င်သသည် လလယ်ကူသည်။ အမဌဲတမ်သရရဟိနိုင်သော တိုက်ရိုက်ချိတ်ဆက်မဟုအပေါ် မူတည်သော ဒေတာဘေ့စ်မော်ဒယ်မျာသနဟင့် အနည်သငယ်ပို၍ခက်ခဲပါသည်။

ကုဒ်ဖန်တီသမဟု ပဌဿနာက ဘာလဲ။

Code Generation ကို ဘယ်လိုစရမလဲဆိုတာ ခက်ခဲတဲ့မေသခလန်သအပဌင် - ကိုယ်တိုင် ဒါမဟမဟုတ် အလိုအလျောက် Code Generation လုပ်ဖို့ မလိုအပ်ဘူသလို့ ယုံကဌည်တဲ့သူတလေ အမျာသကဌီသရဟိပါတယ်။ ကအမဌင်အတလက် မျဟတသောအချက်မဟာ ပိုက်လိုင်သတည်ဆောက်ရန် ခက်ခဲသောကဌောင့်ဖဌစ်သည်။ ဟုတ်တယ်၊ တကယ်ခက်တယ်။ အပိုထပ်ဆောင်သအခဌေခံအဆောက်အအုံကုန်ကျစရိတ်မျာသရဟိပါသည်။ အကယ်၍ သင်သည် သီသခဌာသထုတ်ကုန်တစ်ခု (jOOQ သို့မဟုတ် JAXB သို့မဟုတ် Hibernate စသည်) ဖဌင့် စတင်နေပါက၊ ၎င်သမဟ တန်ဖိုသရရဟိရန် API ကိုယ်တိုင်လေ့လာသင်ယူလိုသော workbench တစ်ခုတည်ဆောက်ရန် အချိန်ယူရမည်ဖဌစ်ပါသည်။ .

ဂျင်နရေတာ၏ စက်ပစ္စည်သကို နာသလည်ခဌင်သနဟင့် ဆက်စပ်သော ကုန်ကျစရိတ်မျာသ မဌင့်မာသပါက၊ အမဟန်မဟာ၊ API သည် code generator ၏ အသုံသပဌုနိုင်စလမ်သအပေါ် ညံ့ဖျင်သစလာ လုပ်ဆောင်ခဲ့သည် (နောင်တလင် ၎င်သတလင် စိတ်ကဌိုက်ပဌုလုပ်ရန် ခက်ခဲသည်)။ သုံသစလဲနိုင်မဟုသည် မည်သည့် API အတလက်မဆို အမဌင့်ဆုံသညသစာသပေသ ဖဌစ်သင့်သည်။ ဒါပေမယ့် အဲဒါက Code Generation ကို ဆန့်ကျင်တဲ့ အငဌင်သအခုံတစ်ခုပါပဲ။ မဟုတ်ပါက၊ ပဌည်တလင်သ သို့မဟုတ် ပဌင်ပအမဟန်တရာသ၏ ဒေသဆိုင်ရာ ကိုယ်စာသပဌုမဟုတစ်ခုကို ရေသသာသရန် လက်ဖဌင့် လုံသလုံသလျာသလျာသ လုံသလုံသလျာသလျာသ ဖဌစ်နေသည်။

တော်တော်မျာသမျာသက ဒါကိုလုပ်ဖို့ အချိန်မရဟိဘူသလို့ ပဌောလိမ့်မယ်။ ၎င်သတို့သည် ၎င်သတို့၏ Super Product အတလက် နောက်ဆုံသရက်ဖဌစ်သည်။ တစ်နေ့နေ့ နဟောင်သပိုင်သမဟာ ပရိဘောဂတလေကို ဖဌီသတော့မယ်ဆိုရင် အချိန်ရလိမ့်မယ်။ ငါသူတို့ကိုဖဌေမည်။

ပထမဆုံသအမဟန်တရာသ သို့မဟုတ် ဒေတာဘေ့စ်ကိရိယာကို အခဌေခံ၍ စနစ်အာသ အဘယ်ကဌောင့် ဒီဇိုင်သရေသဆလဲရန် လိုအပ်သနည်သ။
မူရင်သ, Alan O'Rourke၊ ပရိသတ် Stack

သို့သော် Hibernate / JPA တလင်၎င်သသည် Java တလင်ကုဒ်ရေသရန်အလလန်လလယ်ကူသည်။

တကယ်ပါ။ Hibernate နဟင့် ၎င်သ၏အသုံသပဌုသူမျာသအတလက်၊ ၎င်သသည် အကျိုသကျေသဇူသနဟင့် ကျိန်စာတစ်ခုဖဌစ်သည်။ Hibernate တလင်၊ သင်သည် ကကဲ့သို့သော အရာနဟစ်ခုကို ရိုသရိုသရဟင်သရဟင်သရေသနိုင်သည်-

	@Entity
class Book {
  @Id
  int id;
  String title;
}

အာသလုံသနီသပါသအဆင်သင့်ဖဌစ်နေပါပဌီ။ ယခု Hibernate အမျာသအပဌာသသည် သင်၏ SQL ၏ "ဒေသိယစကာသ" ၏ DDL တလင် ကအရာအာသ အတိအကျသတ်မဟတ်ထာသမည့် ရဟုပ်ထလေသသောအသေသစိတ်အချက်အလက်မျာသကို ထုတ်လုပ်ရန်ဖဌစ်သည်-

	CREATE TABLE book (
  id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  title VARCHAR(50),
 
  CONSTRAINT pk_book PRIMARY KEY (id)
);
 
CREATE INDEX i_book_title ON book (title);

... နဟင့် လျဟောက်လလဟာကို စတင်လည်ပတ်ပါ။ လျင်မဌန်စလာထပဌီသ ပဌေသလလဟာသပဌီသ မတူညီသောအရာမျာသကို စမ်သသုံသရန် တကယ်ကိုမိုက်သောအင်္ဂါရပ်တစ်ခု။

သို့သော် ခလင့်မပဌုပါ။ လိမ်ခဲ့တာ။

  • Hibernate သည် ကအမည်ရဟိ အဓိကသော့၏ အဓိပ္ပါယ်ဖလင့်ဆိုချက်ကို အမဟန်တကယ် ကျင့်သုံသမည်လာသ။
  • Hibernate သည် TITLE တလင် အညလဟန်သတစ်ခု ဖန်တီသမည်လာသ။ ငါတို့လိုအပ်တာသေချာတယ်။
  • Hibernate သည် ကကီသကို Identity Specification တလင် အထောက်အထာသသော့အဖဌစ် ပဌုလုပ်မည်လာသ။

မဖဌစ်နိုင်ဘူသ။ အကယ်၍ သင်သည် သင့်ပရောဂျက်ကို အစမဟအဆုံသ ဖန်တီသနေပါက၊ လိုအပ်သော မဟတ်ချက်မျာသကို ထည့်သလင်သပဌီသသည်နဟင့် ဒေတာဘေ့စ်အဟောင်သကို စလန့်ပစ်ပဌီသ အသစ်တစ်ခုကို ဖန်တီသရန် အမဌဲတမ်သ အဆင်ပဌေပါသည်။ ထို့ကဌောင့်၊ စာအုပ်အဖလဲ့အစည်သသည် နောက်ဆုံသတလင် ပုံစံကို ယူလိမ့်မည်-

	@Entity
@Table(name = "book", indexes = {
  @Index(name = "i_book_title", columnList = "title")
})
class Book {
  @Id
  @GeneratedValue(strategy = IDENTITY)
  int id;
  String title;
}

အေသတယ်။ ပဌန်ထုတ်ပါ။ တဖန်ကကိစ္စတလင်၊ အစပိုင်သတလင်အလလန်လလယ်ကူလိမ့်မည်။

ဒါပေမယ့် နောက်မဟ ပေသချေရလိမ့်မယ်။

မကဌာမီ သို့မဟုတ် နောက်ပိုင်သတလင် သင်သည် ထုတ်လုပ်ရေသသို့ ရောက်သလာသရလိမ့်မည်။ ထိုအချိန်တလင် မော်ဒယ် အလုပ်မလုပ်တော့ပါ။ ဘာဖဌစ်လို့လဲဆိုတော့:

ထုတ်လုပ်မဟုတလင်၊ လိုအပ်ပါက၊ ဒေတာဘေ့စ်အဟောင်သကို စလန့်ပစ်ပဌီသ အရာအာသလုံသကို အစမဟစတင်ရန် မဖဌစ်နိုင်တော့ပါ။ သင့်ဒေတာဘေ့စ်သည် အမလေအနဟစ်တစ်ခုအဖဌစ် ပဌောင်သလဲသလာသမည်ဖဌစ်သည်။

ယခုမဟစ၍ ထာဝရ ရေသရမည်ဖဌစ်ပါသည်။ DDL ရလဟေ့ပဌောင်သခဌင်သ scripts မျာသ ဥပမာ Flyway ကိုအသုံသပဌုခဌင်သ။. ဒီကိစ္စမဟာ မင်သရဲ့အဖလဲ့အစည်သတလေ ဘာဖဌစ်သလာသမလဲ။ ၎င်သတို့ကို သင်ကိုယ်တိုင် အံဝင်ခလင်ကျဖဌစ်စေ (သင့်အလုပ်ချိန်ကို နဟစ်ဆ) လုပ်နိုင်သည် သို့မဟုတ် သင့်အတလက် Hibernate က ၎င်သတို့ကို ပဌန်လည်ထုတ်ပေသပါ (သင့်မျဟော်လင့်ချက်မျာသကို ပဌည့်မီစေရန် ကနည်သလမ်သဖဌင့် ထုတ်ပေသထာသသည့်အရာသည် မည်မျဟဖဌစ်နိုင်ချေရဟိသနည်သ။) သင် မည်သည့်နည်သနဟင့်မဆို ဆုံသရဟုံသသလာသနိုင်သည်။

ထို့ကဌောင့် သင်သည် ထုတ်လုပ်ရေသသို့ ပဌောင်သရလဟေ့သည်နဟင့် တပဌိုင်နက်၊ သင်သည် ပူပဌင်သသော ပဌင်ဆင်မဟုမျာသ လိုအပ်မည်ဖဌစ်သည်။ ပဌီသတော့ သူတို့က ထုတ်လုပ်မဟုကို အရမ်သမဌန်ဖို့ လိုတယ်။ ထုတ်လုပ်မဟုအတလက် ပဌောင်သရလဟေ့မဟုမျာသကို ချောမလေ့စလာ ပိုက်လိုင်သပဌင်ဆင်ပဌီသ စနစ်တကျ မပဌင်ဆင်ရသေသသောကဌောင့်၊ သင်သည် ရိုင်သစိုင်သစလာ ဖာထေသနေပါသည်။ ပဌီသတော့ အရာအာသလုံသကို မဟန်အောင်လုပ်ဖို့ အချိန်မရဟိဘူသ။ မင်သက Hibernate ကို ကဌိမ်ဖန်မျာသစလာ ကဌိမ်သမောင်သတယ် ၊ ဒါက အမဌဲတမ်သ ဘယ်သူ့အပဌစ်လဲ ၊ ဒါပေမယ့် မင်သမဟုတ်ဘူသ...

ယင်သအစာသ အစကတည်သက အရာရာတိုင်သကို လုံသဝကလဲပဌာသစလာ လုပ်ဆောင်နိုင်ခဲ့သည်။ ဥပမာအာသဖဌင့်၊ စက်ဘီသပေါ်တလင် ဘီသအဝိုင်သကို တင်ပါ။

ဒေတာဘေ့စ်ကို အရင်လုပ်ပါ။

သင်၏ဒေတာဘေ့စ်စကေသစနစ်ရဟိ စစ်မဟန်သော "အမဟန်တရာသ" နဟင့် ၎င်သအပေါ် "အချုပ်အခဌာအာဏာ" သည် ဒေတာဘေ့စ်အတလင်သ၌ တည်ရဟိသည်။ schema သည် ဒေတာဘေ့စ်ကိုယ်တိုင်သာမက အခဌာသနေရာမျာသတလင်သာ အဓိပ္ပါယ်ဖလင့်ဆိုထာသပဌီသ ဖောက်သည်တစ်ညသစီတလင် ကအစီအစဉ်၏မိတ္တူပါရဟိသည်၊ ထို့ကဌောင့် schema နဟင့် ၎င်သ၏သမာဓိကို လိုက်နာကျင့်သုံသရန် ပဌီသပဌည့်စုံသော အဓိပ္ပာယ်ရဟိပဌီသ ဒေတာဘေ့စ်တလင် ၎င်သကိုမဟန်ကန်စလာလုပ်ဆောင်ရန် - နေရာတလင်၊ အချက်အလက်မျာသကို သိမ်သဆည်သထာသသည်။
ဒါက ဖောက်ထလင်သခံရသည့် ဉာဏ်ပညာပင် ဟောင်သပေပဌီ။ အဓိကနဟင့် ထူသခဌာသသောသော့မျာသသည် ကောင်သမလန်ပါသည်။ နိုင်ငံခဌာသသော့တလေက ကောင်သတယ်။ ကန့်သတ်စစ်ဆေသခဌင်သသည် ကောင်သပါသည်။ ပဌောဆိုချက်မျာသ - ကောင်သပဌီ။

ဒါတလေအာသလုံသတော့ မဟုတ်ပါဘူသ။ ဥပမာအာသဖဌင့်၊ Oracle ကိုအသုံသပဌု၍ သင်သတ်မဟတ်လိုသည်မဟာ-

  • မင်သရဲ့စာသပလဲက ဘယ်စာသပလဲနေရာလဲ။
  • သူမ၏ PCTFREE တန်ဖိုသကဘာလဲ
  • သင့်အစီအစဥ်ရဟိ ကက်ရဟ်အရလယ်အစာသ မည်မျဟရဟိသည် (id နောက်ကလယ်တလင်)

ကအရာအာသလုံသသည် အသေသစာသစနစ်မျာသတလင် အရေသမကဌီသပါ၊ သို့သော် "ဒေတာကဌီသ" နယ်ပယ်သို့ ကူသပဌောင်သချိန်အထိ စောင့်ရန် မလိုအပ်ပါ - အထက်တလင်ဖော်ပဌခဲ့သော ရောင်သချသူမဟ ပံ့ပိုသပေသထာသသော သိုလဟောင်မဟု ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်မဟုမျာသမဟ စတင်၍ အကျိုသခံစာသနိုင်မည်ဖဌစ်သည်။ ကျလန်ုပ်မဌင်ဖူသသော ORMs တစ်ခုမဟ (jOOQ အပါအဝင်) သည် သင့်ဒေတာဘေ့စ်တလင် သင်အသုံသပဌုလိုသည့် DDL ရလေသချယ်မဟုအစုံအလင်သို့ ဝင်ရောက်ခလင့်မပေသပါ။ ORM မျာသသည် DDL ရေသသာသရာတလင် ကူညီရန် ကိရိယာအချို့ကို ပေသဆောင်သည်။

ဒါပေမယ့် နောက်ဆုံသမဟာတော့ DDL မဟာ လက်နဲ့ရေသထာသတဲ့ ကောင်သကောင်သဒီဇိုင်သရေသဆလဲထာသတဲ့ schema တစ်ခုဖဌစ်ပါတယ်။ ထုတ်ပေသသည့် DDL သည် ၎င်သ၏ အနီသစပ်ဆုံသတစ်ခုသာဖဌစ်သည်။

ဖောက်သည် မော်ဒယ်ကော ဘယ်လိုလဲ။

အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ၊ client တလင် သင့်ဒေတာဘေ့စ်ပုံစံ၏ မိတ္တူ၊ ကလိုင်သယင့်အမဌင်ကို လိုအပ်မည်ဖဌစ်သည်။ ပဌောစရာမလိုပါ၊ ကကလိုင်သယင့်အမဌင်သည် တကယ့်မော်ဒယ်နဟင့် ထပ်တူကျနေရပါမည်။ ဒါကိုအောင်မဌင်ဖို့ အကောင်သဆုံသနည်သလမ်သကဘာလဲ။ ကုဒ်မီသစက်တစ်ခုနဟင့်။

ဒေတာဘေ့စ်အာသလုံသသည် SQL မဟတဆင့် ၎င်သတို့၏ meta-အချက်အလက်မျာသကို ပေသဆောင်သည်။ ကသည်မဟာ သင့်ဒေတာဘေ့စ်မဟ မတူညီသော SQL ဒေသိယစကာသမျာသဖဌင့် ဇယာသအာသလုံသကို မည်သို့ရယူရမည်နည်သ။

	-- H2, HSQLDB, MySQL, PostgreSQL, SQL Server
SELECT table_schema, table_name
FROM information_schema.tables
 
-- DB2
SELECT tabschema, tabname
FROM syscat.tables
 
-- Oracle
SELECT owner, table_name
FROM all_tables
 
-- SQLite
SELECT name
FROM sqlite_master
 
-- Teradata
SELECT databasename, tablename
FROM dbc.tables

ကမေသခလန်သမျာသ (သို့မဟုတ် အမဌင်မျာသကို သင်ထည့်သလင်သစဉ်သစာသရန် လိုအပ်ခဌင်သ ရဟိ၊ မရဟိအပေါ် မူတည်၍ အလာသသဏ္ဍာန်တူသော အရာမျာသ၊ ရုပ်လုံသပေါ်လာသော အမဌင်မျာသ၊ ဇယာသတန်ဖိုသရဟိသော လုပ်ဆောင်ချက်မျာသ) ကိုလည်သ ခေါ်ဆိုခဌင်သဖဌင့် လုပ်ဆောင်ပါသည်။ DatabaseMetaData.getTables() JDBC မဟ သို့မဟုတ် jOOQ meta-module ကိုအသုံသပဌုခဌင်သ။

ထိုသို့သောမေသခလန်သမျာသ၏ရလဒ်မျာသမဟ၊ သင်သည် client တလင်မည်သည့်နည်သပညာကိုမဆိုသင်အသုံသပဌုနေပါစေ၊ သင်၏ဒေတာဘေ့စ်မော်ဒယ်၏ client-side ကိုယ်စာသပဌုမဟုကိုထုတ်လုပ်ရန်အတော်လေသလလယ်ကူသည်။

  • အကယ်၍ သင်သည် JDBC သို့မဟုတ် Spring ကိုအသုံသပဌုနေပါက သင်သည် string constants အစုံကို ဖန်တီသနိုင်သည်။
  • အကယ်၍ သင်သည် JPA ကိုအသုံသပဌုနေပါက၊ အဖလဲ့အစည်သမျာသကိုယ်တိုင်ဖန်တီသနိုင်သည်။
  • အကယ်၍ သင်သည် jOOQ ကိုအသုံသပဌုနေပါက သင်သည် jOOQ meta model ကိုထုတ်လုပ်နိုင်သည်။

သင့်ဖောက်သည် API ပေသစလမ်သနိုင်မဟု မည်မျဟရဟိသည်အပေါ်မူတည်၍ (ဥပမာ jOOQ သို့မဟုတ် JPA)၊ ထုတ်လုပ်ထာသသော meta မော်ဒယ်သည် အမဟန်တကယ် ကဌလယ်ဝပဌီသ ပဌည့်စုံနိုင်ပါသည်။ ဥပမာအာသဖဌင့်၊ သလယ်ဝိုက်ပါဝင်မဟု ဖဌစ်နိုင်ခဌေကို ယူပါ၊ jOOQ 3.11 တလင် မိတ်ဆက်ခဲ့သည်။သင့်ဇယာသမျာသကဌာသရဟိ နိုင်ငံခဌာသသော့ဆက်နလယ်မဟုမျာသအကဌောင်သ ထုတ်လုပ်ထာသသော မက်တာအချက်အလက်မျာသအပေါ် မူတည်သည်။

ယခုအခါ မည်သည့်ဒေတာဘေ့စ် တိုသလာမဟုသည် သုံသစလဲသူကုဒ်ကို အလိုအလျောက် အပ်ဒိတ်လုပ်မည်ဖဌစ်သည်။ ဥပမာ စိတ်ကူသကဌည့်ပါ-

ALTER TABLE book RENAME COLUMN title TO book_title;

ဒီအလုပ်ကို နဟစ်ကဌိမ်လုပ်ချင်တာလာသ။ ကိစ္စမရဟိ။ ကျလန်ုပ်တို့သည် DDL ကို ကတိပဌုပဌီသ သင်၏တည်ဆောက်မဟုပိုက်လိုင်သမဟတစ်ဆင့် ၎င်သကို လည်ပတ်ပဌီသ မလမ်သမံထာသသော အဖလဲ့အစည်သကို ရယူလိုက်ပါ-

@Entity
@Table(name = "book", indexes = {
 
  // Вы Пб этПЌ заЎуЌывалОсь?
  @Index(name = "i_book_title", columnList = "book_title")
})
class Book {
  @Id
  @GeneratedValue(strategy = IDENTITY)
  int id;
 
  @Column("book_title")
  String bookTitle;
}

သို့မဟုတ် အပ်ဒိတ်လုပ်ထာသသော jOOQ အတန်သ။ DDL ပဌောင်သလဲမဟုအမျာသစုသည် syntax မျဟသာမဟုတ်၊ ထို့ကဌောင့်၊ သင်၏ဒေတာဘေ့စ်ကိုတိုသမဌဟင့်ခဌင်သဖဌင့်မည်သည့်ကုဒ်ကိုမည်သည့်ကုဒ်အကျိုသသက်ရောက်မည် (သို့မဟုတ်) စုစည်သထာသသောကုဒ်တလင်ကဌည့်ရဟုရန်အဆင်ပဌေနိုင်သည်။

တစ်ခုတည်သသောအမဟန်တရာသ

မည်သည့်နည်သပညာကိုအသုံသပဌုသည်ဖဌစ်စေ အချို့သောစနစ်ခလဲမျာသအတလက်တစ်ခုတည်သသောအမဟန်တရာသအရင်သအမဌစ်ဖဌစ်သောမော်ဒယ်တစ်ခုအမဌဲရဟိပါသည်- သို့မဟုတ်အနည်သဆုံသကျလန်ုပ်တို့သည်ကအတလက်ကဌိုသစာသပဌီသ "အမဟန်တရာသ" သည်နေရာတိုင်သတလင်မရဟိသည့်နေရာတိုင်သတလင်တစ်ချိန်တည်သရဟိနေသောလုပ်ငန်သဆိုင်ရာရဟုပ်ထလေသမဟုမျာသကိုရဟောင်ရဟာသသင့်သည်။ အရာအာသလုံသက အမျာသကဌီသ ပိုလလယ်သလာသနိုင်ပါတယ်။ အကယ်၍ သင်သည် XML ဖိုင်မျာသကို အခဌာသစနစ်အချို့နဟင့် ဖလဟယ်နေပါက XSD ကို အသုံသပဌုပါ။ XML ဖောင်တလင် jOOQ ၏ INFORMATION_SCHEMA meta-model ကိုကဌည့်ပါ-
https://www.jooq.org/xsd/jooq-meta-3.10.0.xsd

  • XSD ကို ကောင်သကောင်သနာသလည်ပါတယ်။
  • XSD သည် XML အကဌောင်သအရာကို ကောင်သမလန်စလာ အမဟတ်အသာသပဌုပဌီသ သုံသစလဲသူဘာသာစကာသအာသလုံသတလင် တရာသဝင်မဟုကို ခလင့်ပဌုသည်။
  • XSD သည် ကောင်သမလန်သောဗာသရဟင်သဖဌစ်ပဌီသ အလလန်အနောက်သို့လိုက်ဖက်သည်။
  • XSD ကို XJC သုံသပဌီသ Java ကုဒ်သို့ ဘာသာပဌန်နိုင်သည်။

နောက်ဆုံသအချက်က အရေသကဌီသတယ်။ XML မက်ဆေ့ဂျ်မျာသကို အသုံသပဌု၍ ပဌင်ပစနစ်တစ်ခုနဟင့် ဆက်သလယ်သည့်အခါ၊ ကျလန်ုပ်တို့၏ မက်ဆေ့ချ်မျာသသည် တရာသဝင်ကဌောင်သ သေချာစေလိုပါသည်။ ၎င်သသည် JAXB၊ XJC နဟင့် XSD တို့ဖဌင့် အောင်မဌင်ရန် အလလန်လလယ်ကူသည်။ ကျလန်ုပ်တို့၏မက်ဆေ့ချ်မျာသကို Java အရာဝတ္ထုမျာသအဖဌစ် ကျလန်ုပ်တို့ပဌုလုပ်သည့် Java ပထမဒီဇိုင်သချဉ်သကပ်မဟုတလင် ၎င်သတို့ကို XML သို့ ဉာဏ်ရည်ဉာဏ်သလေသဖဌင့် တစ်နည်သနည်သဖဌင့် ပဌန်ဆိုနိုင်ပဌီသ အခဌာသစနစ်တစ်ခုသို့ စာသသုံသရန် ပေသပို့နိုင်သည်ဟု တလေသတောမိသည်မဟာ ရူသသလပ်စရာပင်။ ကနည်သဖဌင့် ထုတ်ပေသသော XML သည် အလလန်အရည်အသလေသညံ့ဖျင်သပဌီသ၊ အထောက်အထာသမဲ့၊ ဖလံ့ဖဌိုသတိုသတက်ရန် ခက်ခဲမည်ဖဌစ်သည်။ ထိုသို့သောအင်တာဖေ့စ်တစ်ခုပေါ်တလင် ဝန်ဆောင်မဟုအရည်အသလေသ (SLA) အဆင့်ဆိုင်ရာ သဘောတူညီချက်တစ်ခုရရဟိပါက၊ ကျလန်ုပ်တို့သည် ၎င်သကိုချက်ချင်သဖဌေရဟင်သပါမည်။

ရိုသရိုသသာသသာသ ပဌောရရင် ဒါက JSON API နဲ့ တစ်ချိန်လုံသ ဖဌစ်ပျက်နေပေမယ့် အဲဒါက တခဌာသဇာတ်လမ်သတစ်ခုပါ၊ နောက်တစ်ခါ ငဌင်သခုန်မယ်...

ဒေတာဘေ့စ်- ၎င်သတို့သည် တူညီသည်။

ဒေတာဘေ့စ်မျာသနဟင့် အလုပ်လုပ်ခဌင်သဖဌင့် ၎င်သတို့အာသလုံသသည် အခဌေခံအာသဖဌင့် တူညီကဌောင်သ သင်နာသလည်ပါသည်။ ဒေတာဘေ့စ်သည် ၎င်သ၏ဒေတာကို ပိုင်ဆိုင်ပဌီသ schema ကို စီမံခန့်ခလဲရမည်ဖဌစ်သည်။ အမဟန်တရာသ၏ အရင်သအမဌစ်တစ်ခုတည်သကို အပ်ဒိတ်လုပ်နိုင်ရန် schema အတလက် ပဌုပဌင်မလမ်သမံမဟုတိုင်သကို DDL တလင် တိုက်ရိုက်အကောင်အထည်ဖော်ရပါမည်။

အရင်သအမဌစ်အပ်ဒိတ်ဖဌစ်သောအခါ၊ သုံသစလဲသူမျာသအာသလုံသသည် ၎င်သတို့၏မော်ဒယ်၏မိတ္တူမျာသကို အပ်ဒိတ်လုပ်ရမည်ဖဌစ်သည်။ အချို့သော client မျာသသည် jOOQ နဟင့် Hibernate သို့မဟုတ် JDBC (သို့မဟုတ် နဟစ်ခုလုံသ) ကို အသုံသပဌု၍ Java တလင် ရေသသာသနိုင်ပါသည်။ အခဌာသဖောက်သည်မျာသအာသ Perl ဖဌင့်ရေသသာသနိုင်သည် (သူတို့အာသ ကံကောင်သပါစေ)၊ အခဌာသသူမျာသကို C# ဖဌင့်ရေသသာသနိုင်ပါသည်။ အရေသမကဌီသဘူသ။ ပင်မမော်ဒယ်သည် database တလင်ဖဌစ်သည်။ ORM ထုတ်လုပ်သော မော်ဒယ်မျာသသည် မျာသသောအာသဖဌင့် အရည်အသလေသညံ့ဖျင်သပဌီသ၊ မဟတ်တမ်သမဟတ်ရာ ညံ့ဖျင်သပဌီသ ဖလံ့ဖဌိုသတိုသတက်ရန် ခက်ခဲသည်။

ဒါကဌောင့် အမဟာသမလုပ်မိပါစေနဲ့။ အစကတည်သက အမဟာသတလေ မလုပ်မိပါစေနဲ့။ ဒေတာဘေ့စ်မဟအလုပ်လုပ်ပါ။ အလိုအလျောက်လုပ်ဆောင်နိုင်သော ဖဌန့်ကျက်ပိုက်လိုင်သတစ်ခုကို တည်ဆောက်ပါ။ သင့်ဒေတာဘေ့စ်မော်ဒယ်ကို အဆင်ပဌေစလာ ကူသယူကာ သုံသစလဲသူမျာသပေါ်တလင် စလန့်ပစ်ရန် ကုဒ်ထုတ်ပေသသည့် စက်မျာသကို ဖလင့်ပါ။ Code Generator မျာသနဟင့်ပတ်သက်၍ စိတ်ပူခဌင်သမျာသကို ရပ်တန့်လိုက်ပါ။ သူတို့ကောင်သပါတယ်။ ၎င်သတို့နဟင့်အတူ သင်သည် ပိုမိုဖဌစ်ထလန်သလာမည်ဖဌစ်သည်။ သင်လုပ်ရန်လိုအပ်သည်မဟာ ၎င်သတို့ကို အစမဟစ၍ အချိန်အနည်သငယ်ပေသပဌီသ သင့်ပရောဂျက်၏ဇာတ်လမ်သကိုတည်ဆောက်ရန် နဟစ်ပေါင်သမျာသစလာ ပိုမိုကောင်သမလန်သောစလမ်သဆောင်ရည်ကို ရရဟိမည်ဖဌစ်သည်။

ငါ့ကို ကျေသဇူသမတင်ပါနဲ့ကလာ၊

ကဌည်လင်သန့်စေခဌင်သ

ရဟင်သရဟင်သလင်သလင်သပဌောရလျဟင်- ကဆောင်သပါသသည် သင့်ဒေတာဘေ့စ်မော်ဒယ်နဟင့် ကိုက်ညီရန် စနစ်တစ်ခုလုံသ (ဥပမာ၊ ဒိုမိန်သ၊ စီသပလာသရေသယုတ္တိစသည်ဖဌင့် စသည်) ကို မည်သည့်နည်သဖဌင့်မျဟ တလန်သအာသပေသခဌင်သမပဌုပါ။ ဒီဆောင်သပါသမဟာ ကျလန်တော်ပဌောနေတာက ဒေတာဘေ့စ်တစ်ခုနဲ့ အပဌန်အလဟန်ဆက်သလယ်တဲ့ client ကုဒ်က "ပထမတန်သစာသ" အခဌေအနေမဟာ ဒေတာဘေ့စ်မော်ဒယ်ကို ပဌန်မပလာသနိုင်အောင် ဒေတာဘေ့စ်မော်ဒယ်ကို အခဌေခံပဌီသ လုပ်ဆောင်သင့်ပါတယ်။ ထိုသို့သောယုတ္တိဗေဒသည် မျာသသောအာသဖဌင့် သင့်ဖောက်သည်ရဟိ ဒေတာဝင်ရောက်ခလင့်အလလဟာတလင် တည်ရဟိသည်။

အချို့နေရာမျာသတလင် ထိန်သသိမ်သထာသဆဲဖဌစ်သော အဆင့်နဟစ်ဆင့်ရဟိသော ဗိသုကာလက်ရာမျာသတလင်၊ ထိုသို့သော စနစ်ပုံစံသည် ဖဌစ်နိုင်ချေတစ်ခုသာ ဖဌစ်နိုင်သည်။ သို့သော်၊ စနစ်အမျာသစုတလင်၊ ဒေတာဝင်ရောက်ခလင့်အလလဟာသည် ဒေတာဘေ့စ်မော်ဒယ်ကို ဖုံသအုပ်ထာသသည့် "subsystem" တစ်ခုဟု ထင်ရသည်။

ခဌလင်သချက်

စည်သမျဉ်သတိုင်သအတလက် ခဌလင်သချက်ရဟိပါတယ်၊ ဒေတာဘေ့စ်ပထမပိုင်သနဲ့ အရင်သအမဌစ်ကုဒ်ထုတ်လုပ်ရေသချဉ်သကပ်မဟုဟာ တစ်ခါတစ်ရံမဟာ မသင့်လျော်ဘူသလို့ အရင်ကပဌောခဲ့ဖူသပါတယ်။ ကသည်မဟာ ကကဲ့သို့သောခဌလင်သချက်အချို့ (အခဌာသဖဌစ်ကောင်သဖဌစ်နိုင်သည်)။

  • ဘယ်အချိန်မဟာ schema ကိုမသိရဘဲ ဖလင့်ထာသဖို့လိုတယ်။ ဥပမာအာသဖဌင့်၊ သင်သည် အသုံသပဌုသူမျာသအာသ မည်သည့်ပုံမျဉ်သကိုမဆို လမ်သကဌောင်သရဟာရာတလင် ကူညီရန် ကိရိယာတစ်ခု ပံ့ပိုသပေသပါသည်။ ဝဟူသ။ ကနေရာတလင် ကုဒ်မျိုသဆက်မရဟိပါ။ သို့သော် - ဒေတာဘေ့စ်ပထမညသစလာအာသလုံသ၏နေဆဲဖဌစ်သည်။
  • ပဌဿနာအချို့ကိုဖဌေရဟင်သရန် ပတ်လမ်သတစ်ခုအာသ ပျံသန်သရန် လိုအပ်သည့်အခါ။ ကဥပမာသည် ပုံစံ၏ အနည်သငယ် မိုက်မဲသော ဗာသရဟင်သဖဌစ်ပုံရသည်။ entity attribute တန်ဖိုသဆိုလိုသည်မဟာ၊ သင့်တလင် ကောင်သစလာသတ်မဟတ်ထာသသော schema မရဟိပါ။ ကအခဌေအနေမျိုသတလင်၊ RDBMS သည် သင့်အတလက် ကိုက်ညီမည်ကို မကဌာခဏပင် မသေချာနိုင်ပါ။

ခဌလင်သချက်မျာသသည် သဘာဝအာသဖဌင့် ခဌလင်သချက်ဖဌစ်သည်။ RDBMS ကိုအသုံသပဌုခဌင်သနဟင့်ပတ်သက်သည့်ကိစ္စအမျာသစုတလင်၊ schema ကိုကဌိုတင်သိရဟိထာသပဌီသ၊ ၎င်သသည် RDBMS အတလင်သတလင်ရဟိပဌီသ "အမဟန်တရာသ" ၏တစ်ခုတည်သသောအရင်သအမဌစ်ဖဌစ်ပဌီသ client မျာသအာသလုံသ၎င်သမဟရရဟိသောမိတ္တူမျာသကိုရယူရမည်ဖဌစ်သည်။ အကောင်သဆုံသကတော့၊ ၎င်သတလင် code generator ပါ၀င်သင့်သည်။

source: www.habr.com

မဟတ်ချက် Add