рдЬреЗрдИрдИ рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдВ рдЧреНрд░реВрд╡реА рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди

  рдПрдХ рдЧрд╛рдбрд╝реА рдХрд╛ рджреЛрд╣рди рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ
 рдШреЛрдбрд╝рд╛ рдФрд░ рддрд░рдХрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдбреЛ
                         рдХреЗ рд░реВрдк рдореЗрдВ  рдкреБрд╢реНрдХрд┐рди

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЧреНрд░реВрд╡реА рдХреЛ рдореМрдЬреВрджрд╛ рдорд╛рд╡реЗрди-рдЖрдзрд╛рд░рд┐рдд рдЬреЗрдИрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП рдПрдВрдЯреЛрди рд╢реЙрд╕реНрдерд╛рдиреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдЙрдирдХреЗ рдЖрд▓реЗрдЦ рд╕реАрдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ : рдХреБрдХрд┐рдВрдЧ 3: рд╕реНрдкреНрд░рд┐рдВрдЧ 3 рдПрдорд╡реАрд╕реА + рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА + рд╣рд╛рдЗрдмрд░рдиреЗрдЯ ред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддреИрдпрд╛рд░реА

рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧрд╕реЛрд░реНрд╕ рдЯреВрд▓ рд╕реВрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЧреНрд░рд╣рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред ContactManager рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЖрдИрдбреАрдИ рдореЗрдВ рдЗрд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдордд рдХрд░реЛред рдпрджрд┐ рдЖрдк рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╣рдЯрд╛ рджреЗрдВ рддреЛ рдпрд╣ рдФрд░ рднреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧрд╛: .classpath .project рдФрд░ .settings рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред рдПрдВрдЯреЛрди рдХреЗ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рдж рд╕реЗ, рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдиреЗ рдХрджрдо рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИ, рдПрд╕рдЯреАрдПрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдПрдо 2 рдкреНрд▓рдЧрдЗрди рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг), рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рдкреЛрдо-рдлрд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рдПрд╕рдЯреАрдПрд╕ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВрдЧреЗред

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ pom.xml рд╕реЗ рдкрд╣рд▓реВ рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реЛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ MySQL рдХреЛ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд PostgreSQL (jdbc.properties рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдПрдХ рдХрд╣рд╛рд╡рдд рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдкрд░реА рдХрдерд╛ рд╣реИ: рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ

<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.8.6</version> </dependency> 


рдпрд╣ рд▓рдЧрднрдЧ рд╕рднреА, рдЧреНрд░реВрд╡реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдФрд░ рдЧреНрд░реВрд╡реА рдХреЗ рд╕рдВрдпреБрдХреНрдд рд╕рдВрдХрд▓рди рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

рдЧреНрд░реВрд╡реА-рдЧреНрд░рд╣рдг-рд╕рдВрдХрд▓рдХ

рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рддрдХ рд╣рдордиреЗ gmaven рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ "рдиреБрдХрд╕рд╛рди" рдереЗ, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдмреБрд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЧреНрд░реВрд╡реА-рдПрдХреНрд▓рд┐рдкреНрд╕-рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдмрджрд▓ рдЧрдПред рд╕рдВрдкрд╛рджрди pom.xml

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> <compilerId>groovy-eclipse-compiler</compilerId> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-compiler</artifactId> <version>2.6.0-01</version> </dependency> </dependencies> </plugin> 


Pom.xml рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрд╕рдЯреАрдПрд╕ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдлрд╝рд╛рдЗрд▓ -> рдЖрдпрд╛рдд -> рдорд╛рд╡реЗрди -> рдореМрдЬреВрджрд╛ рдорд╛рд╡реЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВред рдЧреНрд░реВрд╡реА рд╕рдВрдХреНрд░рдорд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд░рд╣реА рд╣реИред



рдПрд╕рдЯреАрдПрд╕ рдХрд╕рдо рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдорд╛рд╡реЗрди рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ
 mvn clean package 

рдФрд░ рд╣рдо рд▓реЙрдЧ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рджреЗрдЦрддреЗ рд╣реИрдВ:

 [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ contactmanager --- [INFO] Using Groovy-Eclipse compiler to compile both Java and Groovy files 


рдЧреНрд░реВрд╡реА рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ

рдЗрд╕рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рд╣рдордиреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣рд╛, рд╣рдо рдЧреНрд░реВрд╡реА рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд╕рдВрдкрд░реНрдХ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрди рд╕рдорд╛рди рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: "рдкрд░рд┐рд╡рд╛рд░", "рдХрд╛рдо", рдЖрджрд┐ред

рдЪрд▓рд┐рдП POJO рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛рдиреА PO G O рдХреЗ рд╕рд╛рдеред

Src / main / groovy рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВ, рдЗрд╕реЗ BuildPath рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдПрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг com.acme.contactmanager.domain рдореЗрдВ)

рдкреИрдХреЗрдЬ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ -> рдирдпрд╛ -> рдЧреНрд░реВрд╡реА рдХреНрд▓рд╛рд╕

рдЪрд▓реЛ рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ ... рдХрд╣рддреЗ рд╣реИрдВ ... рд╕рдВрдкрд░реНрдХ рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдЖрдзрд╛ рдХрд╛рд░реНрдп рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ:

 @Entity @Table(name = "CONTACT_TYPES", uniqueConstraints = [ @UniqueConstraint(columnNames = ["code"]), @UniqueConstraint(columnNames = ["name"]) ]) class ContactType { @Id @GeneratedValue Integer id @Basic @Column(unique = true, nullable = true) String code @Basic @Column(unique = true, nullable = true) String name @Basic @Column(nullable = true) Boolean defaulttype = false @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null } 


рдХреБрдЫ рднреА рдЕрд▓реМрдХрд┐рдХ, рд╕рд╛рдзрд╛рд░рдг рдПрдиреЛрдЯреЗрд╢рди рдирд╣реАрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ, рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЛрд╖реНрдардХ рдХреЗ рдмрдЬрд╛рдп, рд╡рд░реНрдЧ рд╡рд╛рд▓реЗред рдХреЛрдИ рднреА рд╕рдВрд╢реЛрдзрдХ, рд╕реЗрдЯрд░ рдЧреЗрдЯрд░реНрд╕ , рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо, рд╕рдм рдХреБрдЫ рд╕рд╛рдл рдФрд░ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рд╣рдо рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдИ рдЗрдХрд╛рдИ рд╣реИ

 <hibernate-configuration> <session-factory> <mapping class="net.schastny.contactmanager.domain.Contact" /> <mapping class="com.acme.contactmanager.domain.ContactType" /> </session-factory> </hibernate-configuration> 


Contact.java рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ, рдЖрдк рдпрд╣рд╛рдВ рдЧреЗрдЯ-рд╕реЗрдЯрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ

  @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.REFRESH, optional = false) private ContactType contacttype; public ContactType getContacttype() { return contacttype; } public void setContacttype(ContactType contacttype) { this.contacttype = contacttype; } 


рд╣рдо рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ hibernate.hbm2ddl.auto = рдЕрджреНрдпрддрди рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рддреИрдирд╛рддреА, рдФрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ CONTACT_TYPES рдФрд░ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб CONTACTS .contacttype_id рджреЗрдЦрддреЗ рд╣реИрдВред

рдиреЛрдЯ: рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдкрд░реНрдХ рд╣реИрдВ, рддреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдСрдкреНрдЯрд┐рдирд▓ = рдЭреВрдареА рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрд╢рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛ рдкрд╛рдПрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рднрд░рдирд╛ рдФрд░ рдЕрд╢рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рди рдХрд░рдирд╛ рдкрд╛рдардХреЛрдВ рдХреЛ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред

рдЧреНрд░реЛрд╡реА рджрд╛рдУ

рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рд░реБрдХрдирд╛ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИред рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЧреНрд░реВрд╡реА-рдбрд╛рдУ рд╣реИред рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдЗрдВрдЯрд░рдлрд╝реЗрд╕-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╕реЗ рдорд┐рд▓рдХрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╡рд╕рдВрдд рджреБрдЦреА рд╣реЛрдЧрд╛ред рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ (рдЗрд╕ рдмрд╛рд░ - com.acme.contactmanager.dao) рдФрд░ ContactTypeDAO.groovy рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ

 interface ContactTypeDAO { void addContactType(ContactType contactType) List<ContactType> listContactTypes() void removeContactType(Integer id) ContactType getDefault() } 


рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ 99% рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреМрд╢рд▓ рдХрд╛ рд╢рд┐рдЦрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред ListContactTypes () рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдЦреНрдп рдЖрдХрд░реНрд╖рдг рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рднреА рдиреЗ рд╢реБрд░реБрдЖрдд рдХреА (рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреЗрдВ):

 @Repository class ContactTypeDAOImpl implements ContactTypeDAO { @Autowired private SessionFactory sessionFactory; private Session getCurrentSession() { sessionFactory.getCurrentSession() } @Override @Transactional void addContactType(ContactType contactType) { currentSession.save(contactType) } @Override @Transactional List<ContactType> listContactTypes() { //    get-    get    def result = currentSession.createQuery("from ContactType").list() // ,   ,   if(!result){ //  List<Map<String, Object>>?    ! def types = [ //     , //      [name:'', code:'family', defaulttype: false], [name:'', code:'job', defaulttype: false], [name:'', code:'stuff', defaulttype: true] ] //      types.each { type -> ContactType contactType = new ContactType( //   Groovy-    , //   Map code: type.code, name : type.name, defaulttype : type.defaulttype ) currentSession.save(contactType) //   <<     //  result     result << contactType } } //   return   result } @Override @Transactional void removeContactType(Integer id) { ContactType contactType = currentSession.get(ContactType.class, id) if (contactType) { currentSession.delete(contactType) } } @Override @Transactional ContactType getDefault() { currentSession.createCriteria(ContactType.class) .add(Restrictions.eq('defaulttype', true)) .uniqueResult() } } 


рдпрд╣ рдЬрд╛рд╡рд╛-рд╕реЗрд╡рд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ DAO рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
 public interface ContactService { //   -  ... public List<ContactType> listContactType(); } 


 @Service public class ContactServiceImpl implements ContactService { //   -  ... @Autowired private ContactTypeDAO contactTypeDAO; @Override @Transactional public List<ContactType> listContactType() { return contactTypeDAO.listContactTypes(); } } 


рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ:
  @RequestMapping("/index") public String listContacts(Map<String, Object> map) { map.put("contact", new Contact()); map.put("contactList", contactService.listContact()); //     JSP map.put("contactTypeList", contactService.listContactType()); return "contact"; } 


рд╣рдо рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред * рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ JSP рдкрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА (рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджреЗрдЦреЗрдВ), рд╣рдо рддреИрдирд╛рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ:



рдлрд┐рд░ рдЖрдк рдкрд░реАрдХреНрд╖рдг, рдкрд╛рд░реНрд╕ рдПрдХреНрд╕рдПрдордПрд▓, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЧреНрд░реВрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрджрд┐

GitHub рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб ред

рдЧреНрд░реВрд╡реА рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрджрд░реНрдн

рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рд╕реАрдЦрдирд╛: рд╕реНрдкреНрд░рд┐рдВрдЧ 3 MVC + рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ + рд╣рд╛рдЗрдмрд░рдиреЗрдЯ
рдЧреНрд░реВрд╡реА рдШрд░
рдЧреНрд░реВрд╡реА рдЧреНрд░рд╣рдг рд╕рдВрдХрд▓рдХ
рд╕реНрдкреНрд░рд┐рдВрдЧрд╕реЛрд░реНрд╕ рдЯреВрд▓ рд╕реВрдЯ
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧреНрд░реВрд╡реА: рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдЙрддреНрдкрд╛рджрдХрддрд╛
рд▓реЛрдореНрдмреЛрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдпрд╛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдкрд░ рдпреБрджреНрдз рдХреА рдШреЛрд╖рдгрд╛

рдкреБрдирд╢реНрдЪ рдХреИрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рд▓рд┐рдЦрд╛ рд╣реИ ред рд╡реЗрдм рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

Source: https://habr.com/ru/post/In145158/


All Articles