17527

Робота з базами даних в Java з використанням OR/M Hibernate

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

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

Лабораторна робота №1 Тема: Робота з базами даних в Java з використанням OR/M Hibernate. Мета: Навчитись виконувати основні операції при роботі з базами даних в Java використовуючи OR/M Hibernate. Ознайомитись з середовищем програмування Eclipse. Хід роботи: Теоретичні відомості: O/RM ...

Украинкский

2013-07-04

76.5 KB

7 чел.

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

Тема: Робота з базами даних в Java з використанням OR/M Hibernate.

Мета: Навчитись виконувати основні операції при роботі з базами даних в Java, використовуючи OR/M Hibernate. Ознайомитись з середовищем програмування Eclipse.

Хід роботи:

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

O/RM система Hibernate

JavaBeans.

Поняття JavaBeans визначається Sun Microsystems як "повторно-використотовувані програмні компоненти, які можуть маніпулюватися візуально в IDE-середовищі".

Для того, щоб вважатися JavaBean класом, клас повинен відповідати певним критеріям відносно назви методів, конструкторів і поведінки. Ці критерії дають можливість створювати програмні інструменти, що можуть використовувати, повторно використовувати, заміняти і підключати JavaBean'и.

Обов’язкові критерії такі:

  •  клас повинен бути serializable (здатний зберігатися на диску);
  •  в класі повинен бути конструктор без параметрів;
  •  його властивості повинні бути доступні через спеціальні get та set методи, які відповідають загальній системі іменування;
  •  він повинен мати всі необхідні методи обробки подій.

В найпростішому випадку розробники сприймають JavaBean'и як прості Java-класи, що відповідають певним правилам іменування.

Hibernate.

Hibernate є легковісним O/RM сервісом для Java. Легковісний означає, що він спроектований як нескладний для вивчення і використання, а також висуває невисокі вимоги до системних ресурсів в порівнянні з деякими іншими системами.

Hibernate може використовувати XML-документи (другий спосіб – використання анотаційних класів) для відображення зв’язку між таблицями БД і Java-класами, які проектуються у вигляді JavaBeans.

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

Book.java

package veadtable;

import org.apache.commons.lang.builder.EqualsBuilder;

import org.apache.commons.lang.builder.HashCodeBuilder;

public class Book {

   private int id;

private String nam;

private String avtor;

private String vudav;

private int god;

public int getId() {

 return id;}

public void setId(int number) {

 this.id = number;}

public String getNam() {

 return nam;}

public void setNam(String ima) {

 this.nam = ima;}

public String getAvtor() {

 return avtor;}

public void setAvtor(String avtorik) {

 this.avtor = avtorik;}

public String getVudav() {

 return vudav;}

public void setVudav(String vudavn) {

 this.vudav = vudavn;}

public int getGod() {

 return god;}

public void setGod(int rik) {

 this.god = rik;}

 

public boolean equals(Object other){

 if (!(other instanceof Book  )) return false;

 Book castOther=(Book)other;

 return new EqualsBuilder()

 .append(this.getId(), castOther.getId())

 .isEquals();}

 

public int hashCode(){

 return new HashCodeBuilder()

 .append(getId())

 .toHashCode();}

}

AboutBook.java

package veadtable;

public class AboutBook {

private int id;

private int countPage;

private String kolir;

private int cina;

 

public int getId() {

 return id;}

public void setId(int id) {

 this.id = id;}

public int getCountPage() {

 return countPage;}

public void setCountPage(int countPage) {

 this.countPage = countPage;}

public String getKolir() {

 return kolir;}

public void setKolir(String kolir) {

 this.kolir = kolir;}

public int getCina() {

 return cina;}

public void setCina(int cina) {

 this.cina = cina;}

}

MyTableModel.java

package veadtable;

import java.util.List;

import java.util.ListIterator;

import javax.swing.table.AbstractTableModel;

import org.hibernate.Session;

public class MyTableModel extends AbstractTableModel{

   static List<Book> data;

   static Session session;

  

   public MyTableModel(Session session) {

  this.session=session; }

  

   public void executeQuery(String query) {

       data=session.createQuery(query).list(); }

  

   public Object getValueAt(int aRow,int aColumn) {

       Book row=data.get(aRow);

   

    switch(aColumn) {

           case 0: return row.getId();

        case 1: return row.getNam();

        case 2: return row.getAvtor();

        case 3: return row.getVudav();

        case 4: return row.getGod();

        default:return "";

       }

  }

   public int getColumnCount() {   

       return 5; }

   public int getRowCount() {

       return data.size();}   

}

MyTableAboutModel.java

package veadtable;

import java.util.List;

import java.util.ListIterator;

import javax.swing.table.AbstractTableModel;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

public class MyTableAboutModel extends AbstractTableModel{

   static List<AboutBook> data;

   static Session session;  

   

   public MyTableAboutModel(Session session) {

      this.session=session;   }

  

   public void executeQuery(String query) {

      data=session.createQuery(query).list();}

 

   public Object getValueAt(int aRow,int aColumn) {

       AboutBook row=data.get(aRow);

       switch(aColumn) {

        case 0: return row.getId();

        case 1: return row.getCountPage();

        case 2: return row.getKolir();

        case 3: return row.getCina();

        default:return "";}

   }

   public int getColumnCount() {   

       return 4;}

   public int getRowCount() {

       return data.size();}   

}

Book.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping

  PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>

<class name="veadtable.Book" table="Book">

 <id name="id" type="int" column="id">

  <generator class="sequence"/>

 </id>

    <property name="nam" type="java.lang.String" column="imya"/>

 <property name="avtor" type="java.lang.String" />

 <property name="vudav" type="java.lang.String"/>

 <property name="god" type="int" column="rik"/>

 

</class>

</hibernate-mapping>

AboutBook.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping

  PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>

<class name="veadtable.AboutBook" table="AboutBook">

 <id name="id" type="int" column="id">

  <generator class="sequence"/>

 </id>

    <property name="countPage" type="int" column="countPage"/>

 <property name="kolir" type="java.lang.String" />

 <property name="cina" type="int" column="cina"/>

 

</class>

</hibernate-mapping>

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

 <property name="connection.driver_class">

           org.firebirdsql.jdbc.FBDriver

 </property>

 <property name="connection.url">

           jdbc:firebirdsql://localhost/d:/book.fdb?characterEncoding=utf8

 </property>

 <property name="connection.username">sysdba</property>

 <property name="connection.password">masterkey</property>

 <property name="connection.pool_size">10</property>

 <property name="show_sql">true</property>

 <property name="dialect">org.hibernate.dialect.FirebirdDialect</property>

 <property name="useUnicode">true</property>

 <property name="hibernate.hbm2ddl.auto">update</property>

   <!-- Mapping files //-->

    <mapping resource="veadtable/Book.hbm.xml"/>

    <mapping resource="veadtable/AboutBook.hbm.xml"/>

</session-factory>

</hibernate-configuration>

Run.java

package readtable;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.util.List;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTable;

import javax.swing.JTextField;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import veadtable.AboutBook;

import veadtable.MyTableAboutModel;

import veadtable.MyTableModel;

public  class Run{

static Configuration config;

   static SessionFactory sf;

   static Session session;

   public static void main(String[] args) {

       config=new Configuration();

       config.configure("/veadtable/hibernate.cfg.xml");

       sf=config.buildSessionFactory();

       session=sf.openSession();

       

 final JFrame frame= new JFrame("Лабораторна робота №1");

 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 frame.getContentPane().setLayout(null);

 JPanel panel1 = new JPanel();

 JPanel panel2 = new JPanel();

 panel1.setLayout(new GridLayout(1,5));

 panel2.setLayout(new GridLayout(1,5));

 

 final JTextField field1 = new JTextField("Номер №");

 final JTextField field2 = new JTextField("Назва книжки");

 final JTextField field3 = new JTextField("Автор");

 final JTextField field4 = new JTextField("Видавництво");

 final JTextField field5 = new JTextField("Рік");

 

 final JTextField field6 = new JTextField("Номер id");

 final JTextField field7 = new JTextField("Кількість сторінок");

 final JTextField field8 = new JTextField("Колір книжки");

 final JTextField field9 = new JTextField("Ціна в гривнях");

 

 field1.setEditable(false);

 field2.setEditable(false);

 field3.setEditable(false);

 field4.setEditable(false);

 field5.setEditable(false);

 field6.setEditable(false);

 field7.setEditable(false);

 field8.setEditable(false);

 field9.setEditable(false);

 

 panel1.add(field1);

 panel1.add(field2);

 panel1.add(field3);

 panel1.add(field4);

 panel1.add(field5);

 

 panel2.add(field6);

 panel2.add(field7);

 panel2.add(field8);

 panel2.add(field9);

   

 final MyTableModel table = new MyTableModel(session);

 final MyTableAboutModel abouttable = new MyTableAboutModel(session);

 table.executeQuery("from veadtable.Book");

 abouttable.executeQuery("from veadtable.AboutBook");

 final JTable tabl = new JTable(table);

 final JTable tabl1 = new JTable(abouttable);

 frame.getContentPane().add(panel1).setBounds(0, 0, 600,20);

 frame.getContentPane().add(tabl1).setBounds(0, 140, 600, 240);

 frame.getContentPane().add(panel2).setBounds(0, 120, 600, 20);

 frame.getContentPane().add(tabl).setBounds(0, 20, 600, 80);

 frame.setSize(new Dimension(600,300));

 frame.show();

}   

   

}

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

Висновок

В даній лабораторній роботі було виконано основні операції при роботі з базами даних в Java, використовуючи OR/M Hibernate та ознайомлено з середовищем програмування Eclipse.


 

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

29624. Процедура проведения социометрического опроса 27 KB
  Теперь исходя из практики исследований оптимальным принято считать численный состав малой группы в 1020 человек. При социометрическом опросе каждому опрашиваемому вручается социометрическая анкета социометрическая карточка и список членов социометрируемой группы. Для удобства работы и простоты последующей обработки фамилии членов группы шифруются или кодируются номером в списке группы. Проранжируйте пожалуйста членов Вашей группы по степени симпатии к ним сначала назовите самого близкого для Вас товарища потом менее близкого и т.
29625. Обработка данных социометрического опроса: социометрическая матрица 31.5 KB
  Персональные социометрические индексы – это отражение индивидуальных социальнопсихологических свойств личности проявляющихся в отношении к членам группы. Социометрический статус – персональный социометрический индекс отражающий отношение членов группы к каждому её представителю выбор отвержение опускание. Персональный социометрический статус вычисляется по формуле: Ci = где Ci социометрический статус R и R положительные и отрицательные выборы полученные i членом группы. N – число членов группы Индекс эмоциональной...
29626. Обработка данных социометрического опроса: социограммы 26.5 KB
  Графическое изображение связей внутри коллектива устанавливаемых на основании выбора называется социограммой. Его выделение важно при изучении функциональных связей рабочего коллектива или эмоциональнопсихологических связей симпатий внутри коллектива. Связь между двумя элементами – Диада структура очень часто наблюдаемая в небольших коллективах например в форме совместной деятельности а также как дружеские и доверительные связи между двумя людьми. В круговых социограммах все члены коллектива располагаются по окружности внутри...
29627. Метод тестов в социологическом исследовании. Назначение, опыт использования 23.5 KB
  Родоночальник Кендал Тесты :1 гомогенные отдельные св ва личности система заданий в которых чел должен выбрать конкретный вариант поведения 2 гетерогенные – оценивают совокупность личностных свв в соответствии с теорией. Изменения в тесты не рекомендуется делать. Проективная методика и тесты это совть методик основ. На результатов интерпретации Могут делиться на ряд групп: А Ассоциативные тесты анализ ситуации Методика незаконченных предложений Методика симантический дифференциал Б интерпретационные тесты – тест ТАД истолкование...
29628. Обработка данных социологического исследования: метод группировки 24.5 KB
  Простая группировка это классификация или упорядочение данных по одному признаку. Перекрестная группировка это связывание данных предвари тельно упорядоченных по двум признакам свойствам показате лям с целью: а обнаружить какието взаимозависимости; б осуществить взаимоконтроль показателей сформировать новый составной показатель определить направление связей влияния одного явления на другое. Анализ эмпирических данных согласно теоретической типологии предпо лагает вопервых определение частот распределения по каждому типу;...
29629. Подготовка отчета по результатам исследования. Требования к отчету 33.5 KB
  Административнофинансовое: по отчету определяются объем сроки содержание уровень качество выполненных работ затраты эффективность используемых средств Типы отчетов: По типу исследования По отношению к объему выполненных работ По автору По функциональному назначению Отчет о результатах фундаментального исследования Отчет о результатах прикладного исследования Итоговый Этапный промежуточный Отчет по направлению разделу Отчет по выполненному виду работ Монографический коллективный Итоговый полный Краткий резюме По целевому...
29630. Выборочный метод в социологическом исследовании. Основные понятия выборочного метода 27 KB
  Одной из задач которые стоят перед социологом при проведении исследования является сбор необходимых эмпирических данных об объекте исследования. Множество элементов составляющих объект исследования называют генеральной совокупностью ГС. Основная идея выборочного метода заключается в том чтобы закономерности полученные при изучении относительно небольшой группы людей ВС распространить на весь объект исследования ГС. Выборочный метод позволяет не только сократить временные и материальные затраты на...
29631. Объем выборки, факторы, влияющие на объем выборочной совокупности 21 KB
  Существует способы математического определения для объёма выборки. Опытным путём установлено что объём выборки колеблется от 3961000 1200 человек. Чем более дробный мы предполагаем сделать анализ тем при прочих равных условиях мы должны брать большой объём выборки.
29632. Класс строго вероятностных способов формирования выборочной совокупности. Механический отбор 26.5 KB
  Способы построения выборки делятся на 2 крупных класса: Случайные вероятностные – это такие способы отбора когда каждый элемент генеральной совокупности имеет известную чаще всего равную вероятность быть выбранным. Для реализации случайного отбора необходимо иметь основу выборки списки элементов генеральной совокупности. Строго говоря лишь вероятностные выборки являются репрезентативными следовательно только для них может быть рассчитана статистическая погрешность. Механический отбор где элементы генеральной совокупности...