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.


 

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

50792. Повторение операторов цикла 31 KB
  Цель: Проверить уровень знаний по теме операторы цикла. 1. Напечатать столбиком: а) все целые числа от 20 до 35...
50793. Циклы с условием 32.5 KB
  Дано целое число N 0. Найти наименьшее целое положительное 2 число K квадрат которого превосходит N: K N. Дано целое число N 0. Найти наибольшее целое число K квадрат 2 которого не превосходит N: K N.