17529

Розробка Java-програм з Web-інтерфейсом, що працюють з базами даних, на основі фреймворка Spring та Java Persistence API (JPA)

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота №3 Тема: Розробка Javaпрограм з Webінтерфейсом що працюють з базами даних на основі фреймворка Spring та Java Persistence API JPA. Мета: Навчитись використовувати шаблон проектування MVC та фреймворк Spring при створенні Javaпрограм з Webінтерфейсом. Навчитись вико...

Украинкский

2013-07-04

305.5 KB

11 чел.

Лабораторна робота №3

Тема: Розробка Java-програм з Web-інтерфейсом, що працюють з базами даних, на основі фреймворка Spring та Java Persistence API (JPA).

Мета: Навчитись використовувати шаблон проектування MVC та фреймворк Spring при створенні Java-програм з Web-інтерфейсом. Навчитись використовувати Java Persistence API для роботи з базами даних.

Хід роботи:

Теоретичні відомості:

Java Persistence API

Java Persistence API забезпечує object/relational mapping для роботи з реляційними даними в Java-програмах. Java Persistence складається з трьох частин:

Java Persistence API

• Мови запитів (Query language)

Метаданих для object/relational mapping

Entities

Entity – це легковісний клас, об’єкти якого використовується для збереження даних в БД. Зазвичай, entity представляє якусь таблицю реляційної БД, а екземпляр entity відповідає одному рядку таблиці. Інформація для збереження в БД представляється або через persistent-поля, або через persistent-властивості. Ці поля чи властивості використовують анотації об’єктно-реляційного відображення (object/relational mapping annotations) для зв’язування entities та їх зв’язків з реляційними даними в базі даних.

Spring

Spring є Java framework, який надає розробнику сукупність сервісів для побудови масштабованих J2EE програм. Spring реалізує в собі концепцію MVC

Inversion of Control (IoC)

Іноді можна почути терміни Inversion of Control та Dependency Injection як взаємозамінні, але це не зовсім вірно. Inversion of Control набагато більш загальна річ, що виражається багатьма різними способами. Dependency Injection є одним з таких способів.

Inversion of Control покриває широке поле методів, які дозволяють об’єкту бути пасивним учасником в системі. Коли застосовується IoC метод, то об’єкт передає контроль над якимись своїми властивостями чи аспектами framework'у чи середовищу. Прикладами такого контролю можуть бути створення об’єктів чи передача управління залежним об’єктам. IoC може виключити необхідність явного програмування вказаних дій за допомогою використання Dependency Injection та аспектно-орієнтованого програмування (Aspect-Oriented Programming AOP) відповідно.

Dependency Injection

Поняття Dependency Injection є стержневим в Spring. Dependency Injection є методом обєднання різних обєктів в єдину систему. При його застосування framework сам забезпечує встановлення звязків між обєктами, позбавляючи програміста необхідності написання в своєму коді логіки звязування обєктів чи створення обєктів.

Якщо два об’єкти зв’язані, бажано, щоб зв’язок не був жорстким і не був прив’язаний до конкретного середовища.

Application Context

The ApplicationContext є реалізацією BeanFactory, яка, в свою чергу, є реєстром всіх обєктів, керованих Spring. Загалом, BeanFactory відповідає за створення бінів, звязування їх з залежними бінами і забезпечення засобів зручного пошуку бінів. ApplicationContext може розглядатися як повнофункціональна BeanFactory. ApplicationContexts також додає деякі додаткові можливості до BeanFactory. Він може автоматично обробляти BeanFactory після ініціалізації шляхом запуску BeanFactoryPostProcessors. Він також забезпечує можливість інтернаціоналізації, механізм маршрутизації повідомлень для слабо звязаних обєктів і підтримує інтерфейси життєвого циклу, такі, як ApplicationContextAware.

Plain Old Java Objects (POJO)

Отже, Dependency Injection та Spring Application Context є двома центральними концепціями в Spring Framework. Вони є інструментом забезпечення можливості побудови програми на основі виключно plain old Java objects (POJOs). Це дає можливість розробляти web-програми, які є повністю обєктно-орієнтованими без привязки до конкретного framework всередині бізнес-логіки. Це дає змогу сфокусуватися на розробці бізнес-логіки вбудовану в model замість концентрації на специфічному для використовуваного framework коді. Це відчиняє двері для всіх  design patterns, принципів і практик ефективної обєктно-орієнтованої розробки.

Лістинг програми:

Bludo.java

package org.chdtu.samples.tryspringjpa;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Table;

@Entity

@Table(name="BLUDO")

public class Bludo extends BaseEntity{

private static final long serialVersionUID = -5675138799302239629L;

 

@Column(name="nazvablud")

private String nazvablud;

 

@Column(name="prix")

private String prix;

 

@Column(name="id_ingredient")

private Integer idingredient;

public String getNazvablud() {

 return nazvablud;}

public void setNazvablud(String nazvablud) {

 this.nazvablud = nazvablud;}

public String getPrix() {

 return prix;}

public void setPrix(String prix) {

 this.prix = prix;}

public Integer getIdingredient() {

 return idingredient;}

public void setIdingredient(Integer idingredient) {

 this.idingredient = idingredient;}

 

}

Ingredient.java

package org.chdtu.samples.tryspringjpa;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Table;

@Entity

@Table(name="INGREDIENT")

public class Ingredient extends BaseEntity{

private static final long serialVersionUID = -5675138799302239629L;

@Column(name="nameingredient")

private String nameingredient;

@Column(name="priceforvaga")

private String priceforvaga;

 

@Column(name="vaga")

private String vaga;

 

@Column(name="idbludo")

private Integer idbludo;

 

public String getNameingredient() {

 return nameingredient;

}

public void setNameingredient(String nameingredient) {

 this.nameingredient = nameingredient;

}

public String getPriceforvaga() {

 return priceforvaga;

}

public void setPriceforvaga(String priceforvaga) {

 this.priceforvaga = priceforvaga;

}

public String getVaga() {

 return vaga;

}

public void setVaga(String vaga) {

 this.vaga = vaga;

}

public Integer getIdbludo() {

 return idbludo;

}

public void setIdbludo(Integer idbludo) {

 this.idbludo = idbludo;

}

 

}

Blud. java

package org.chdtu.samples.tryspringjpa.jpa;

import java.util.Collection;

import org.chdtu.samples.tryspringjpa.Bludo;

import org.springframework.dao.DataAccessException;

/**

* The high-level TrySpringAndJPA business interface.

*

* <p>This is basically a data access object.

* TrySpringAndJPA doesn't have a dedicated business facade.

*

*/

public interface Blud {

Collection<Bludo> getBludos() throws DataAccessException;

}

Ingredientt. java

package org.chdtu.samples.tryspringjpa.jpa;

import java.util.Collection;

import org.chdtu.samples.tryspringjpa.Ingredient;

import org.springframework.dao.DataAccessException;

public interface Ingredientt {

Collection<Ingredient> getIngredients() throws DataAccessException;

}

EntityManagerBlud. java

package org.chdtu.samples.tryspringjpa.jpa;

import java.util.Collection;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import org.chdtu.samples.tryspringjpa.Bludo;

import org.springframework.stereotype.Repository;

import org.springframework.transaction.annotation.Transactional;

/**

* JPA implementation of the Clinic interface using EntityManager.

*

* <p>The mappings are defined in "orm.xml" located in the META-INF directory.

*

* @author Mike Keith

* @author Rod Johnson

* @author Sam Brannen

* @since 22.4.2006

*/

@Repository

@Transactional

public class EntityManagerBlud implements Blud {

@PersistenceContext

private EntityManager em;

@Transactional(readOnly = true)

@SuppressWarnings("unchecked")

public Collection<Bludo> getBludos() {

 return this.em.createQuery("SELECT vet FROM Bludo vet").getResultList();

}

}

EntityManagerIngredient. java

package org.chdtu.samples.tryspringjpa.jpa;

import java.util.Collection;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import org.chdtu.samples.tryspringjpa.Ingredient;

import org.springframework.stereotype.Repository;

import org.springframework.transaction.annotation.Transactional;

/**

* JPA implementation of the Clinic interface using EntityManager.

*

* <p>The mappings are defined in "orm.xml" located in the META-INF directory.

*

* @author Mike Keith

* @author Rod Johnson

* @author Sam Brannen

* @since 22.4.2006

*/

@Repository

@Transactional

public class EntityManagerIngredient implements Ingredientt {

@PersistenceContext

private EntityManager em;

@Transactional(readOnly = true)

@SuppressWarnings("unchecked")

public Collection<Ingredient> getIngredients() {

 return this.em.createQuery("SELECT vet FROM Ingredient vet").getResultList();

}

}

BludoController. java

package org.chdtu.samples.tryspringjpa.web;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.chdtu.samples.tryspringjpa.jpa.Blud;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

public class BludoController {

private final Blud bludo;

protected final Log logger = LogFactory.getLog(getClass());

@Autowired

public BludoController(Blud bludo) {

 this.bludo = bludo;

}

@RequestMapping("/bludo.do")

public ModelMap bludoHandler() {

 return new ModelMap(this.bludo.getBludos());

}

}

IngredientController. java

package org.chdtu.samples.tryspringjpa.web;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.chdtu.samples.tryspringjpa.jpa.Ingredientt;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

public class IngredientController {

private final Ingredientt ingredient;

protected final Log logger = LogFactory.getLog(getClass());

@Autowired

public IngredientController(Ingredientt ingredient) {

 this.ingredient = ingredient;

}

@RequestMapping("/ingredient.do")

public ModelMap ingredientHandler() {

 return new ModelMap(this.ingredient.getIngredients());

}

}

Jdbc.properties

# Properties file with JDBC and JPA settings.

#

# Applied by <context:property-placeholder location="jdbc.properties"/> from

# various application context XML files (e.g., "applicationContext-*.xml").

# Targeted at system administrators, to avoid touching the context XML files.

#-------------------------------------------------------------------------------

# Common Settings

hibernate.generate_statistics = true

hibernate.show_sql            = true

jpa.showSql                   = true

#-------------------------------------------------------------------------------

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/restoran

jdbc.username=root

jdbc.password=admin

hibernate.dialect=org.hibernate.dialect.MySQLDialect

jpa.databasePlatform = oracle.toplink.essentials.platform.database.MySQL4Platform

jpa.database = MYSQL

aop.xml

<?xml version="1.0"?>

<!-- Custom aspects for the TrySpringAndJPA sample application -->

<aspectj>

<weaver>

 <include within="org.chdtu.samples.tryspringjpa..*"/>

</weaver>

</aspectj>

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"

 version="1.0">

<persistence-unit name="restoran" transaction-type="RESOURCE_LOCAL">

 <!-- Explicitly define mapping file path, else Hibernate won't find the default -->

 <mapping-file>META-INF/orm.xml</mapping-file>

 <!-- Prevent annotation scanning. In this app we are purely driven by orm.xml -->

 <exclude-unlisted-classes>true</exclude-unlisted-classes>

</persistence-unit>

</persistence>

orm.xml

<?xml version="1.0" encoding="Utf-8"?>

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"

 version="1.0">

<persistence-unit-metadata>

 <xml-mapping-metadata-complete/>

 <persistence-unit-defaults>

  <access>PROPERTY</access>

 </persistence-unit-defaults>

</persistence-unit-metadata>

<package>org.chdtu.samples.tryspringjpa</package>

<mapped-superclass class="BaseEntity">

 <attributes>

  <id name="id">

   <generated-value strategy="IDENTITY"/>

  </id>

 </attributes>

</mapped-superclass>

<entity class="Bludo">

 <table name="BLUDO"/>

 <attributes>

  <basic name="nazvablud"/>

  <basic name="prix"/>

  <basic name="idingredient">

  <column name="id_ingredient"/>

  </basic>

 </attributes>

</entity>

 

<entity class="Ingredient">

 <table name="INGREDIENT"/>

 <attributes>

  <basic name="nameingredient"/>

  <basic name="priceforvaga"/>

  <basic name="vaga"/>

  <basic name="idbludo">

  <column name="idbludo"/>

  </basic>

 </attributes>

</entity>

</entity-mappings>

web.xml

<?xml version="1.0" encoding="Windows-1251"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Simple Spring with JPA Program</display-name>

<description>Simple Spring with JPA Program</description>

<context-param>

 <param-name>webAppRootKey</param-name>

 <param-value>tryspringandjpa.root</param-value>

</context-param>

<context-param>

 <param-name>log4jConfigLocation</param-name>

 <param-value>/WEB-INF/log4j.properties</param-value>

</context-param>

<context-param>

 <param-name>contextConfigLocation</param-name>

 <param-value>/WEB-INF/applicationContext-jpa.xml</param-value>

</context-param>

<listener>

 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<servlet>

 <servlet-name>tryspringandjpa</servlet-name>

 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

 <load-on-startup>2</load-on-startup>

</servlet>

<servlet-mapping>

 <servlet-name>tryspringandjpa</servlet-name>

 <url-pattern>*.do</url-pattern>

</servlet-mapping>

<session-config>

 <session-timeout>10</session-timeout>

</session-config>

<welcome-file-list>

 <!-- Redirects to "welcome.htm" for dispatcher handling -->

 <welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<error-page>

 <exception-type>java.lang.Exception</exception-type>

 <location>/WEB-INF/jsp/uncaughtException.jsp</location>

</error-page>

</web-app>

bludo.jsp

<%@ include file="/WEB-INF/jsp/includes.jsp" %>

<%@ include file="/WEB-INF/jsp/header.jsp" %>

<h2>Dishs</h2>

Display all dishs...

<table>

 <tr>

 <thead>

   <th>Number</th>

   <th>Name</th>

   <th>Price</th>

   <th>Number ingredient</th>

   <th><img src="images/Pag2.png" align="right" style="position:relative;right:0px;"></th>

 </thead>

 </tr>

 <c:forEach var="vet" items="${bludoList}">

   <tr>

     <td>${vet.id}</td>

     <td>${vet.nazvablud}</td>

     <td>${vet.prix}</td>

     <td>${vet.idingredient}</td>

   </tr>

 </c:forEach>

</table>

<a href="<c:url value="/addbludo.do"/>">Add Dish</a>

<p>&nbsp;</p>

<%@ include file="/WEB-INF/jsp/footer.jsp" %>

ingredient.jsp

<%@ include file="/WEB-INF/jsp/includes.jsp" %>

<%@ include file="/WEB-INF/jsp/header.jsp" %>

<h2>Ingredients</h2>

Display all ingredients...

<table>

 <tr>

 <thead>

   <th>Number</th>

   <th>Name</th>

   <th>Price for weight</th>

   <th>Weight</th>

   <th>Number Dishs</th>

 </thead>

 </tr>

 <c:forEach var="vet" items="${ingredientList}">

   <tr>

     <td>${vet.id}</td>

     <td>${vet.nameingredient}</td>

     <td>${vet.priceforvaga}</td>

     <td>${vet.vaga}</td>

     <td>${vet.idbludo}</td>

   </tr>

 </c:forEach>

</table>

<p>&nbsp;</p>

<%@ include file="/WEB-INF/jsp/footer.jsp" %>

welcome.jsp

<%@ include file="/WEB-INF/jsp/includes.jsp" %>

<%@ include file="/WEB-INF/jsp/header.jsp" %>

<h2>Restaurants</h2>

Display all restaurant...

<table>

 <tr>

 <thead>

   <th>ID</th>

   <th>Name</th>

   <th>Creation Year</th>

 </thead>

 </tr>

 <c:forEach var="vet" items="${groupList}">

   <tr>

     <td>${vet.id}</td>

     <td>${vet.nazva}</td>

     <td>${vet.creationYear}</td>

   </tr>

 </c:forEach>

</table>

<p>&nbsp;</p>

<%@ include file="/WEB-INF/jsp/footer.jsp" %>

index.jsp

<%@ include file="/WEB-INF/jsp/includes.jsp" %>

<%-- Redirected because we can't set the welcome page to a virtual URL. --%>

<c:redirect url="/welcome.do"/>

footer.jsp

 <table class="footer">

   <tr>

          <td><a href="<c:url value="/bludo.do"/>">Bludo</a></td>

      <td><a href="<c:url value="/ingredient.do"/>">Ingredients</a></td>

     <td align="right"><img src="<c:url value="/images/springsource-logo.png"/>"/></td>

   </tr>

 </table>

 </div>

</body>

</html>

Результати роботи:

Рисунок 1 - Сторінка з списком блюд

Рисунок 2 - Сторінка з списком інгредієнтів

Висновок

В даній лабораторній роботі використовувались шаблон проектування MVC та фреймворк Spring при створенні Java-програм з Web-інтерфейсом.  Було здобуто навички використання Java Persistence API для роботи з базами даних.


 

А также другие работы, которые могут Вас заинтересовать

24651. Методика аналізу якості продукції 33 KB
  Методика аналізу якості продукції. Показники якості продукції є одними з найважливіших показників діяльності підприємства. Якість продукції залежить від багатьох факторів таких як: техніка і технологія впровадження іновацій організація виробництва і праці організація роботи служби матеріально технічного постачання трудова дисципліна та ін. Якість продукції впливає на обсяг товарної і реаліз.
24652. Аналіз динаміки та структури основних фондів 35 KB
  Характеристику руху о з дають коефіцієнти оновлення і вибуття Коефіцієнт оновлення=вартість прибулих о з за звітний період розділити на первісну вартість о з на кінець звітного періоду Показує яку частку від наявності на кінець звітного періоду складають нові о з Коеф вибуття= вартість вибулих о з за звітний період розділити на первісну вартість о з на початок звітного періоду Показує яка частина о з з якими підприємство починало свою діяльність у звітному році вибула через зношеність та інші причини. Технічний стан о з характеризується: Коеф...
24653. Аналіз ефективності використання основних фондів 26.5 KB
  Аналіз ефективності використання основних фондів. Під раціональним та найповнішим використанням діяючих промисловиробничих основних засобів розуміють той максимальний економічний ефект який отримує суспільство за певний період у вигляді відповідного обсягу та якості продукції. Економічна ефективність використання основних засобів визначається відношенням економічного ефекту одержаного на підприємстві за відповідний період до витрат необхідних для створення основних засобів. Для характеристики ефективності використання основних засобів...
24654. Оцінка забезпеченості підприємства трудовими ресурсами 31.5 KB
  Аналізуючи питання забезпеченості робочою силою потрібно пам'ятати що в сучасних умовах внаслідок помітних скорочень обсягів виробництва підприємства більше стикаються не з проблемою недостачі а з наявністю зайвої робочої сили необхідністю скорочення робочих місць і водночас збереження кваліфікованих кадрів на майбутнє. Із питанням забезпечення робочою силою тісно пов'язане питання закріплення кадрів на підприємстві. При цьому вивчають загальні показники прийняття та звільнення робітників і службовців розраховують коефіцієнти обороту...
24655. Аналіз ефективності використання робочої сили 24.5 KB
  прийому = Чпр сер Ч Коеф вибуття = Чвир сер Ч Коеф заг обор = Чпр Чвир сер Ч Коеф пот кадрів = Ч виб за власним бажанням сер Ч.
24656. Аналіз продуктивності праці 29.5 KB
  Розрахунок продуктивності праці: ПП = V серЧ V обсяг виробництва продукції сер Ч середньооблікова чисельність персоналу для окремих цехів: ПП = Vнат сер Ц сер Ч Vнат обсяг в натуральних одиницях сер Ц середньооблікова ціна Оцінка впливу обсягу виробництва продукції дельта ППв дельта ППв = Vф сер Цпл сер Чпл Пл. сер Цпл сер Чпл Оцінка впливу середньооблікової чисельності робітників дельта ППч = Vф чер Цпл сер ЧФ Vф сер Цпл сер Чпл Оцінка впливу середньої оптової ціни дельта ППсер ц = Vф сер Цф сер Чф Vф сер Цпл...
24657. Аналіз ефективності використання матеріальних ресурсів 25.5 KB
  Аналіз використання матеріалів здійснюється за наступними узагальнюючими показниками: матеріаловіддача зняття продукції із гривні витрат на матеріали це відношення обсягу випущеної продукції до загальної суми матеріальних витрат; матеріалоємність сума матеріальних витрат на випуск однієї гривні продукції це відношення загальної суми матеріальних витрат на обсяг виготовленої продукції. У процесі аналізу можна використати також допоміжні показники рівня використання матеріальних ресурсів: коефіцієнт використання матеріалів рівень...
24658. Аналіз витрат на виробництво за елементами та статтями витрат 26.5 KB
  Аналіз витрат на виробництво за елементами та статтями витрат. Найбільш корисним для вивчення змін у структурі витрат на виробництво є аналіз собівартості за елементами витрат. Елементні витрати це однорідні за складом витрати підприємства. До них належать матеріальні витрати оплата праці відрахування на соціальні потреби амортизаційні відрахування інші грошові витрати.
24659. Аналіз витрат на одну гривню товарної продукції 25 KB
  Аналіз витрат на одну гривню товарної продукції.товарної продукції є основним показником який харзує рівень і динаміку витрат на підво які розробляють різновидну продукцію. товварної продукції є загальним показником рівня витрат він може бути розрахованим для будь якого підващо дуже важливо до порівняння аналізу між підвами їх оцінки конкурентно спроможності. товарної продукції харзує успішність роботи підвапо впровадженя нової технікипідвищення продукції праці раціонально викорастаних ресурсів.