«Чархро аз нав ихтироъ накунед» яке аз коидахои асосии кори бомуваффакият ва самарабахш мебошад. Аммо чӣ бояд кард, вақте ки шумо намехоҳед чархи худро аз нав ихтироъ кунед, аммо рули ягон каси дигар каҷ ва чархҳо мураббаъ мешаванд? Ин барраси пешбинӣ шудааст, ки ба қадри имкон муқаддимаи мухтасар дар бораи техникаи ислоҳи китобхонаҳои одамони дигар "ҳамчун чораи охирин" ва чӣ гуна паҳн кардани ин масъала берун аз компютери шумо бошад.
Пеш аз ворид кардани лоиҳа, биёед ба файле, ки тарзи сохтани онро тавсиф мекунад, баъзе тағйирот ворид кунем. Ин файл скрипти сохта номида мешавад ва build.gradle ном дорад. Он дар директорияе ҷойгир аст, ки дар он мо gradle init-ро иҷро кардем. Аз ин рӯ, мо онро танҳо мекушоем (масалан, дар Windows бо фармони start build.gradle). Мо дар он ҷо блоки " вобастагӣ " -ро пайдо мекунем, яъне. вобастагӣ. Ҳамаи зарфҳои тарафи сеюм, ки мо истифода хоҳем кард, дар ин ҷо тавсиф карда шудаанд. Акнун мо бояд фаҳмем, ки дар ин ҷо чӣ тасвир кардан лозим аст. Биёед ба вебсайти Hibernate равем ( http://hibernate.org/ ). Мо ба Hibernate ORM таваҷҷӯҳ дорем . Мо ба versionи охирин ниёз дорем. Дар менюи тарафи чап зербахши "Варақаҳо" мавҷуд аст. "Охиртарин мӯътадил" -ро интихоб кунед. Ба поён ҳаракат кунед ва "Татбиқи асосӣ (дар бар мегирад JPA)" -ро пайдо кунед. Қаблан дастгирии JPA-ро алоҳида пайваст кардан лозим буд, аммо ҳоло ҳама чиз соддатар шудааст ва танҳо як вобастагӣ кофӣ аст. Мо инчунин бояд бо пойгоҳи додаҳо бо истифода аз Hibernate кор кунем. Барои ин, биёед соддатарин вариантро гирем - Database H2 . Интихоб карда мешавад, инҳо вобастагии мо ҳастанд:
Як мисоли нофаҳмо, аммо биёед бигӯем, ки мо мехоҳем шумораи ҷойҳои дархостро ҳангоми оғозёбӣ тағир диҳем. Тавре ки мо мебинем, sqlQuery мо NativeQueryImpl аст. -ро клик кунед
Биёед фавран қайд кунем, ки Idea дар айни замон намедонад, ки рамзи сарчашмаи барномаро дар куҷо пайдо кунад (codeи сарчашма, яъне). Аз ин рӯ, вай бо меҳрубонӣ мундариҷаи файли синфро барои мо ҷудо кард:
Инчунин қайд кунед, ки дар унвони равзанаи IntelliJ Idea навишта шудааст, ки Gradle артефактро барои мо нигоҳ медорад. Акнун, биёед дар идеяи роҳе, ки артефакти мо ҷойгир аст, гирем:
Биёед бо истифода аз фармон ба ин директория дар сатри фармон равем
Акнун биёед файлро тартиб диҳем. Мо мекунем:
Бале, акнун шумо метавонед навсозии зарфро иҷро кунед. Мо метавонем аз маводи расмӣ роҳнамоӣ кунем :
бузург. Аммо дар ин ҷо савол ба миён меояд - аз сабаби чӣ? Танҳо аз сабаби он, ки вақте ки gradle лоиҳаро месозад, он вобастагӣ ва блоки анборҳоро таҳлил мекунад. Gradle як кэши муайяни бунёдӣ дорад, ки дар як макони муайян ҷойгир аст (ниг. " Чӣ тавр ҷойгиршавии кэши gradle насб карда шавад? " Агар дар кэш ягон вобастагӣ мавҷуд набошад, Gradle онро аз анбор зеркашӣ мекунад. Азбаски мо кӯзаро дар худи кэш, пас Gradle фикр мекунад, ки китобхона дар кэш аст ва чизеро берун намекунад.Аммо ҳама гуна тоза кардани кэш боиси гум шудани тағиротҳои мо мегардад. Илова бар ин, ба ҷуз мо ҳеҷ кас наметавонад танҳо рафта онҳоро дастрас кунад. Чӣ қадар нороҳатӣ. , ҳамин тавр не? Чӣ бояд кард. Ҳмм, зеркашиҳо аз анбор? Пас, мо ба анбори худ бо афзалиятҳо ва шоирон ниёз дорем. Ин қадами оянда аст.
"Оғози боркунӣ" ва сипас "Захира кардани файлҳо" -ро клик кунед. Пас аз ин, паёми муваффақияти сабз пайдо мешавад ва артефакт дар бахши "Муборак" дастрас мешавад. Ин бояд барои файлҳои jar ва pom анҷом дода шавад:
Ин ба он вобаста аст, ки вобастагии иловагии интизорӣ дар файли pom муайян карда шудааст. Ва мо танҳо 1 қадам мондаем - анборро дар скрипти сохтани мо муайян кунед:
Муқаддима
Мо ҳама аз ин ё он асбоб истифода мебарем. Аммо баъзан асбобҳо комилан мувофиқ нестанд ё хатогиҳо доранд. Ба шарофати хусусиятҳои забони Java, мо метавонем рафтори асбобҳоро дар ҷое, ки ба мо лозим аст, ислоҳ кунем. Ин хуб аст, вақте ки мо дар лоиҳаҳо саҳм мегузорем ва дархостҳои ҷалб мефиристем (шумо метавонед дар ин ҷо бештар хонед: “ GitHub - Ҳиссаи худро ба лоиҳаҳо ”). Аммо онҳо метавонанд фавран қабул нашаванд ва ё ҳатто онҳоро қабул намекунанд. Аммо барои эхтиёчоти лоиха хозир зарур аст. Ва дар ин ҷо, ман умедворам, ки ин мақола асбобҳоеро, ки барои мо ҳамчун таҳиягарон дастрасанд, нишон медиҳад. Мо бояд қадамҳои зеринро иҷро кунем, ки мо дар бораи он сӯҳбат хоҳем кард:- Масалан, як барномаи санҷишӣ омода кунед (бо истифода аз мисоли лоиҳаи Hibernate)
- Ҷустуҷӯи макони тағйирёбанда
- Тағйирот ворид кардан
- Ҷойгиркунии репозиторий
Омодасозии мавзӯъ
Ҳамин тавр, ба мо лоиҳаи санҷишӣ лозим аст. Гибернат барои мо беҳтарин аст, зеро... он «усто, муд, замонавй». Ман ба тафсилоти зиёд намеравам, зеро... Мақола дар бораи Hibernate нест. Мо ҳама чизро зуд ва ба таври дақиқ иҷро мекунем. Ва мо, ба монанди таҳиягарони мувофиқ, системаи сохтмонро истифода хоҳем бурд. Масалан, Gradle низ барои мо мувофиқ аст, ки бояд барои ин мақола насб карда шавад ( https://gradle.org/install/ ). Аввалан, мо бояд як лоиҳа эҷод кунем. Maven барои ин архетипҳо дорад ва Gradle барои ин плагини махсус дорад: Gradle Init . Ҳамин тавр, сатри фармонро бо ҳар роҳе, ки ба шумо маълум аст, кушоед. Барои лоиҳа директория эҷод кунед, ба он равед ва фармонро иҷро кунед:
mkdir javarush
cd javarush
gradle init --type java-application
dependencies {
// Базовая зависимость для Hibernate (новые версии включают и JPA)
compile 'org.hibernate:hibernate-core:5.2.17.Final'
// База данных, к которой мы будем подключаться
compile 'com.h2database:h2:1.4.197'
// Use JUnit test framework
testCompile 'junit:junit:4.12'
}
Аҷаб, оянда чӣ мешавад? Мо бояд Hibernate-ро танзим кунем. Hibernate дорои " Дастури оғозёбӣ " мебошад, аммо он аблаҳона аст ва монеаест, ки на аз кӯмак. Аз ин рӯ, биёед ба мисли одамони мувофиқ рост ба " Дастури корбар " биравем. Дар ҷадвали мундариҷа мо қисмати " Bootstrap ", ки ҳамчун "Bootstrapping" тарҷума шудааст, мебинем. Танҳо он чизе ки ба шумо лозим аст. Дар он ҷо бисёр калимаҳои оқилона навишта шудаанд, аммо гап дар он аст, ки дар роҳи синф бояд директорияи META-INF мавҷуд бошад ва файли persistence.xml бошад. Мувофиқи стандарт, дар синфхона директорияи "захираҳо" мавҷуд аст. Аз ин рӯ, мо директорияи муайяншударо эҷод мекунем: mkdir src\main\resources\META-INF
Дар он ҷо файли persistence.xml-ро эҷод кунед ва онро кушоед. Дар ҳуҷҷатҳо намунаи "Мисоли 268. Файли конфигуратсияи META-INF/persistence.xml" мавҷуд аст, ки аз он мо мундариҷаро гирифта, ба файли persistence.xml дохил мекунем. Баъдан, IDE-ро оғоз кунед ва лоиҳаи офаридаамонро ба он ворид кунед. Акнун мо бояд чизеро дар базаи маълумот захира кунем. Ин чизест, ки субъект номида мешавад. Объектҳо чизеро аз модели ба ном домейн муаррифӣ мекунанд. Ва дар ҷадвали мундариҷа, инак, мо мебинем " 2. Модели домейн ". Мо матнро поён мезанем ва дар боби "2.1. Намудҳои харитасозӣ" мисоли оддии an objectро мебинем. Биёед онро ба худ гирем ва онро каме кӯтоҳ кунем:
package entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity(name = "Contact")
public class Contact {
@Id
@GeneratedValue
private Integer id;
private String name;
public Contact(String name) {
this.name = name;
}
}
Ҳоло мо синфе дорем, ки an objectро ифода мекунад. Биёед ба persistence.xml баргардем ва дар он ҷо як ҷойро ислоҳ кунем: Дар ҷое, ки нишон дода шудааст, class
мо синфи худро нишон медиҳем entity.Contact
. Аҷоиб, танҳо оғози кор боқӣ мемонад. Биёед ба боби Bootstrap баргардем . Азбаски мо serverи барномавӣ надорем, ки ба мо муҳити махсуси EE (яъне, муҳите, ки рафтори муайяни системаро барои мо амалӣ мекунад) таъмин кунад, мо дар муҳити SE кор мекунем. Барои ин танҳо мисоли "Мисоли 269. Барномаи пурборшуда EntityManagerFactory" барои мо мувофиқ аст. Масалан, биёед ин корро кунем:
public class App {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("CRM");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Contact contact = new Contact("Vasya");
em.persist(contact);
em.getTransaction().commit();
Query sqlQuery = em.createNativeQuery("select count(*) from contact");
BigInteger count = (BigInteger) sqlQuery.getSingleResult();
emf.close();
System.out.println("Entiries count: " + count);
}
}
Оре, мавзуи мо тайёр аст. Ман намехостам ин қисматро тарк кунам , зеро... Барои бобҳои минбаъда, тавсия дода мешавад, ки фаҳмем, ки мавзӯи мо чӣ гуна ба вуҷуд омадааст.
Ҷустуҷӯи рафтори тағирёбанда
Биёед ҷои инициализатсияи майдони ҳисобкунии навъи BigIntegerро гирем ва дар он ҷо нуқтаҳои кандашавӣ муқаррар кунем ( BreakPoint ). Пас аз ворид кардани хати дилхоҳ, ин корро бо истифода аз Ctrl+F8 ё тавассути менюи Иҷро кардан -> Нуқтаи шикастани хатро иваз кардан мумкин аст. Пас, мо усули асосии худро дар debug иҷро мекунем (Иҷро кардан -> Debug):Ctrl+N
, номи синфро нависед ва ба он равед. Ҳамин тавр, вақте ки мо ба синф меравем, мо ба ҷойе, ки ин синф ҷойгир аст, интиқол дода мешавад ва автоматикунониро фаъол мекунем:
cd way to каталогу
. Ман фавран қайд хоҳам кард: агар лоиҳаро аз манбаъ сохтан имконпазир бошад, беҳтараш аз манбаъ сохтан беҳтар аст. Масалан, рамзи сарчашмаи Hibernate дар вебсайти расмӣ дастрас аст. Беҳтар аст, ки онро барои versionи дилхоҳ интихоб кунед ва ҳама тағиротро дар он ҷо ворид кунед ва бо истифода аз скриптҳои сохтмонӣ, ки дар лоиҳа нишон дода шудаанд, ҷамъ кунед. Ман дар мақола варианти даҳшатноктаринро пешниҳод мекунам - кӯза мавҷуд аст, аммо рамзи манбаъ нест. Ва қайди рақами 2: Gradle метавонад бо истифода аз плагинҳо рамзи сарчашмаро дастрас кунад. Барои тафсилот чӣ гуна javadocs ва манбаъҳоро барои jar бо истифода аз Gradle зеркашӣ кардан мумкин аст, нигаред .
Тағйирот ворид кардан
Мо бояд сохтори директорияро аз нав созем, ки мувофиқи он синфе, ки мо иваз мекунем, дар кадом баста аст. Дар ин ҳолат:mkdir org\hibernate\query\internal
, пас аз он мо дар ин директория файл эҷод мекунем NativeQueryImpl.java
. Ҳоло мо ин файлро мекушоем ва ҳамаи мундариҷаи синфро аз IDE дар он ҷо нусхабардорӣ мекунем (ҳамон файле, ки Idea барои мо декомпиляция кардааст). Сатрҳои заруриро иваз кунед. Барои намуна:
javac org\hibernate\query\internal\NativeQueryImpl.java
. Вой, шумо наметавонед онро бигиред ва бидуни хатогӣ тартиб диҳед. Мо як қатор хатогиҳои Рамзро ёфтан мумкин нест, зеро... синфи тағирёбанда бо синфҳои дигар алоқаманд аст, ки IntelliJ Idea одатан ба роҳи синф барои мо илова мекунад. Оё шумо тамоми фоиданокии IDE-ҳои моро ҳис мекунед? =) Хуб, худамон илова мекунем, мо низ метавонем. Биёед роҳҳоро барои: нусхабардорӣ кунем:
- [1] - hibernate-core-5.2.17.Final.jar
- [2] - hibernate-jpa-2.1-api-1.0.0.Final.jar
Ctrl+Shift+C
. Акнун биёед фармони зеринро эҷод ва иҷро кунем: javac -cp [1];[2] org\hibernate\query\internal\NativeQueryImpl.java
Дар натиҷа, файлҳои синфи нав дар паҳлӯи файли java пайдо мешаванд, ки бояд дар файли jar нав карда шаванд:
jar uf hibernate-core-5.2.17.Final.jar org\hibernate\query\internal\*.class
Open IntelliJ Idea эҳтимолан ба шумо имкон намедиҳад, ки файлҳоро тағир диҳед. Аз ин рӯ, пеш аз иҷрои навсозии кӯза, шумо эҳтимолан бояд Idea-ро пӯшед ва пас аз навсозӣ онро кушоед. Пас аз ин, шумо метавонед IDE-ро аз нав кушоед ва дубора дубагро иҷро кунед. Нуқтаҳои танаффус дар байни дубора оғоз кардани IDE барқарор карда намешаванд. Аз ин рӯ, иҷрои барнома дар он ҷое, ки қаблан буд, қатъ мешавад. Voila, мо мебинем, ки тағиротҳои мо чӣ гуна кор мекунанд:
Ҷойгиркунии репозиторий
Роҳҳои гуногуни ройгон барои ҷойгиркунии анбори шумо мавҷуданд: яке аз онҳо Artifactory ва дигаре Archive Apache мебошад . Артефактура муд, услубӣ, замонавӣ ба назар мерасад, аммо ман бо он душворӣ доштам, ман намехостам артефактҳоро дуруст ҷойгир кунам ва метамаълумоти нодурусти maven тавлид кардам. Аз ин рӯ, ногаҳон барои худам, versionи Apache барои ман кор кард. Маълум шуд, ки он чандон зебо нест, аммо он боэътимод кор мекунад. Дар саҳифаи зеркашӣ versionи мустақилро ҷустуҷӯ кунед ва онро кушоед. Онҳо " Оғози зуд " -и худро доранд . Пас аз оғоз, шумо бояд то суроғаиhttp://127.0.0.1:8080/#repositorylist
. Пас аз он, "Боркунии Артефакт" -ро интихоб кунед:
repositories {
jcenter()
maven {
url "http://127.0.0.1:8080/repository/internal/"
}
}
Ва, мутаносибан, versionи хоби мо чунин мешавад: compile 'org.hibernate:hibernate-core:5.2.17.Final-JAVARUSH'
. Ҳамааш ин аст, ҳоло лоиҳаи мо versionеро истифода мебарад, ки мо ислоҳ кардем, на нусхаи аслӣ.
Хулоса
Чунин ба назар мерасад, ки мо шинос шудаем. Умедворам ҷолиб буд. Чунин "ҳилаҳо" хеле кам анҷом дода мешаванд, аммо агар ногаҳон талаботи тиҷоратии шумо шартҳоеро муқаррар кунанд, ки китобхонаҳои шумо онҳоро қонеъ карда наметавонанд, шумо медонед, ки чӣ кор кардан лозим аст. Ва ҳа, инҳоянд чанд мисоле, ки онҳоро бо ин роҳ ислоҳ кардан мумкин аст:- Як serverи веб бо номи Undertow мавҷуд аст. То чанд вақт, хатогие вуҷуд дошт, ки ҳангоми истифодаи прокси ба мо имкон намедод, ки IP-и корбари ниҳоӣ фаҳмем.
- Дар айни замон, WildFly JPA як лаҳзае, ки аз ҷониби мушаххасот ба инобат гирифта нашудааст, ба таври муайян кор кард, бинобар ин Истисноҳо партофта шуданд. Ва он танзимшаванда набуд.
GO TO FULL VERSION