17527

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

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

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

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

Украинкский

2013-07-04

76.5 KB

6 чел.

Лабораторна робота №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.


 

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

20038. Дайте оценку Мюнхенскому договору и его последствиям 7.29 KB
  23 августа 1939 Пакт о ненападении Германии и СССР. Получившее название МолотоваРиббентропа к пакту прилагаются секретные материалы и карта Европы распределяющая влияние СССР и Германии на страны Европы. СССР заявил о своей готовности помочь Чехословакии в случае начала войны. Руководители Англии и Франции боялись что Гитлер развяжет войну в Европе что приведет к резкому усилению влияния СССР.
20039. Рычажные механизмы. Классификация. Конструкции. Регулировка длин рычагов 852 KB
  Регулировка длин рычагов. Рычажные механизмы состоят из рычагов стержней ползунов соединенных в кинематические пары. Подвижные звенья конструктивно могут быть выполнены в виде рычагов пранок пластин пружин стержней соединяемых между собой высшими нисшими кинематическими парами. Стержневые чаще всего имеют круглое сечение пластинчатые – прямоугольное сечение объемных или профильных рычагов может быть любое.
20040. Фрикционные механизмы. Классификация.Расчет 33.5 KB
  К ним относятся фрикционные передачи фрикционные муфты тормозные регуляторы тормоза фиксаторы замедлители и т. В зависимости от расположения осей различают передачи с параллельными и пересекающимися осями. Передачи со скрещивающимися осями используются крайне редко в связи с повышенным износом. По взаимному расположению поверхностей трения существуют передачи с внешним и внутренним контактом.
20041. Опоры вращения с трением качения. Опоры с малым моментом трения 1.29 MB
  Опоры с малым моментом трения. Опоры на ножах Опора состоит из ножа 1 контактирующего с подшипником – подушкой 2. В любом варианте опоры этого типа представляют собой контакт двух цилиндрических поверхностей максимальный угол поворота 10 момент трения минимальный. Опоры на кернах Опора на керне состоит из цапфы конической формы на конце которой выполнена сферическая полированная поверхность радиусом 01 – 015 мм и подшипника с вогнутой сферической поверхностью с радиусом =4 – 12 .
20042. Направляющие прямолинейного движения с трением скольжения 1.8 MB
  Для обеспечения поступательного движения одной детали относительно другой применяют направляющие. Требования к направляющим: надёжность технологичность невысокая стоимость Направляющие с трением скольжения просты в изготовлении имеют небольшие габаритные размеры но чувствительны к изменению температуры и уступают направляющим с трением качения в плавности и лёгкости хода. По конструктивному признаку различают: цилиндрические призматические направляющие. Цилиндрические направляющие наиболее просты в изготовлении но в них трудно...
20043. Направляющие прямолинейного движения с трением качения 1.21 MB
  По форме используемых тел качения различают направляющие на шариках и на роликах. При этом в качестве роликов могут быть использованы стандартные подшипники качения. В зависимости от способа установки различают направляющие с перекатывающимися и вращающимися вокруг своей оси телами качения.
20044. Конструирование механически обрабатываемых деталей 85.5 KB
  Рекомендуется уменьшать количество металла, снимаемого при обработке (в первую очередь это касается отливок); По возможности рекомендуется отказываться от обработки деталей со снятием стружки, переходить на штамповку, вытяжку, гибку;
20045. ОТДЕЛОЧНЫЕ ОПЕРАЦИИ ОБРАБОТКИ ВАЛОВ. СУПЕРФИНИШИРОВАНИЕ. ПРИТИРКА. ПОЛИРОВАНИЕ. НАКАТЫВАНИЕ РИФЛЕНИЙ 481 KB
  Отделочная обработка группа заключительных финишных операций обработки металлов в результате которых достигается высокая точность размеров и формы деталей и улучшается качество поверхности. Также находят применение такие методы как вальцевание калибровка обкатка и раскатка роликами и шариками дробеструйная обработка в результате которых уменьшается шероховатость поверхности и происходит её упрочнение изза поверхностной пластической деформации. Абразивные бруски пружинами прижимаются к поверхности детали с определенным удельным...
20046. Изготовление втулок. Классификация и заготовки. Последовательность выполнения операций при изготовлении точных втулок. Изготовление втулок на токарно-револьверных станках 27 KB
  Механическую обработку точных втулок осуществляют следующим образом: 1 предварительная токарная обработка вспомогательных и посадочных поверхностей 2 Окончательная токарная обработка посадочных цилиндрических поверхностей 3 обработка вспомогательных поверхностей пазов лысок фасонных поверхностей 4 Отделочная обработка посадочных поверхностей 5 нанесение покрытий. Зенкерование – обработка отверстий под последующее растачивание или развертывание. Возможна обработка сквозных и глухих отверстий с припускомдо 6мм на d. Обработка...