Presentation is loading. Please wait.

Presentation is loading. Please wait.

EXtreme Programming XP Тема 8. XP Объектно-реляционное связывание позволяет связать реляционную базу данных и простые объекты Java. Обычно связывание.

Similar presentations


Presentation on theme: "EXtreme Programming XP Тема 8. XP Объектно-реляционное связывание позволяет связать реляционную базу данных и простые объекты Java. Обычно связывание."— Presentation transcript:

1 eXtreme Programming XP Тема 8

2 XP Объектно-реляционное связывание позволяет связать реляционную базу данных и простые объекты Java. Обычно связывание осуществляется с помощью файлов XML. Представитель такой технологии – Hibernate.

3 Вертикальное связывание. Все классы в иерархии привязываются к различным таблицам. Например, если имеются классы Dog и Cat, которые наследуют от абстрактного класса Animal, то в базе данных должно быть три таблицы. Горизонтальное связывание. К таблице привязан конкретный класс. Объединяющее связывание. К единой таблице привязывается несколько классов. XP

4

5

6 Это облегченный механизм баз данных Java (2001 г.). Он достаточно маленький, поэтому способен полностью располагаться в оперативной памяти или полностью включиться в war-файл приложения. Для работы требуется скопировать hsqldb.jar в папку lib проекта.

7 XP

8 XP <java fork="true" classname="${hclass}" classpath="${hjar}" args="${hfile} -dbname.0 ${halias} –port ${hport}"/>

9 XP <java fork="true" classpath="${hjar}" classname="org.hsqldb.util.DatabaseManagerSwing"/> <!-- При связывании с базой данных указывается аргумент url. Например, для учебного проекта следует указать url=jdbc:hsqldb:hsql://localhost:9005/timex -->

10 XP

11 <sql classpath="${hjar}" driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:hsql://localhost:${hport}/${halias}" userid="sa" password="" print="yes"> -- Step 1: Drop objects if they exist DROP TABLE Department IF EXISTS; DROP TABLE Employee IF EXISTS; DROP TABLE Timesheet IF EXISTS; DROP INDEX TimesheetIndex IF EXISTS; DROP INDEX DepartmentCodeIndex IF EXISTS; DROP INDEX EmployeeIdIndex IF EXISTS;

12 XP -- Step 2: Create tables CREATE TABLE Department ( departmentCode CHAR(2) NOT NULL, name VARCHAR(255) NOT NULL ); CREATE TABLE Employee ( employeeId INT NOT NULL, name VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL, employeeCode CHAR(1) NOT NULL, password VARCHAR(10) NOT NULL, managerEmployeeId INT NULL );

13 XP CREATE TABLE Timesheet ( timesheetId IDENTITY NOT NULL, employeeId INT NOT NULL, statusCode CHAR(1) NOT NULL, periodEndingDate DATE NOT NULL, departmentCode CHAR(4) NOT NULL, minutesMon INT NULL, minutesTue INT NULL, minutesWed INT NULL, minutesThu INT NULL, minutesFri INT NULL, minutesSat INT NULL, minutesSun INT NULL );

14 -- Step 3: Create indexes CREATE UNIQUE INDEX TimesheetIndex ON Timesheet (employeeId, periodEndingDate); CREATE UNIQUE INDEX DepartmentCodeIndex ON Department (departmentCode); CREATE UNIQUE INDEX EmployeeIdIndex ON Employee (employeeId); -- Step 4: Insert some reference and test data INSERT INTO Department (departmentCode, name) VALUES ('AC', 'Accounting'); INSERT INTO Department (departmentCode, name) VALUES ('CS', 'Customer Support'); INSERT INTO Department (departmentCode, name) VALUES ('HR', 'Human Resources'); INSERT INTO Department (departmentCode, name) VALUES ('IT', 'Information Technology'); XP

15 INSERT INTO Employee (employeeId, name, employeeCode, password, email, managerEmployeeId) VALUES (1, 'Mike Dover', 'H', 'rapidjava', 'mdover@acme.com', 3); INSERT INTO Employee (employeeId, name, employeeCode, password, email, managerEmployeeId) VALUES (2, 'Ajay Kumar', 'H', 'visualpatterns', 'akumar@acme.com', 3); INSERT INTO Employee (employeeId, name, employeeCode, password, email, managerEmployeeId) VALUES (3, 'Teresa Walker', 'M', 'agilestuff', 'twalker@acme.com', 4); INSERT INTO Employee (employeeId, name, employeeCode, password, email) VALUES (4, 'Tom Brady', 'E', 'superbowl', 'tbrady@acme.com'); XP

16 INSERT INTO Timesheet(timesheetId, employeeId, statusCode, periodEndingDate, departmentCode, minutesMon, minutesTue, minutesWed,minutesThu, minutesFri, minutesSat, minutesSun) VALUES (1, 2, 'P', '2006-08-19', 'IT', 480, 480, 360, 480, 480, 0, 0); INSERT INTO Timesheet(timesheetId, employeeId, statusCode, periodEndingDate, departmentCode, minutesMon, minutesTue, minutesWed, minutesThu, minutesFri, minutesSat, minutesSun) VALUES (2, 1, 'A', '2006-08-19', 'HR', 0, 0, 480, 480, 480, 0, 0); -- Step 5: Verify tables and test data look ok SELECT * FROM Department; SELECT * FROM Employee; SELECT * FROM Timesheet; XP

17

18 В lib-каталог следует скопировать jar-файлы: hibernate3.jar antlr.jar encache-1.1.jar antlr-2.7.6rc1.jar asm-attrs.jar asm.jar cglib-2.1.3.jar commons-collections-2.1.1.jar commons-logging-1.0.4.jar dom4j-1.6.1.jar jta.jar log4j-1.2.11.jar

19 XP Используется три типа файлов Hibernate: файл конфигурации Hibernate (hibernate.cfg.xml) соответствующие классы Java файлы таблиц связывания (с расширением.hbm.xml).

20 XP <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration- 3.0.dtd"> org.hsqldb.jdbcDriver jdbc:hsqldb:hsql://localhost:9005/timex sa

21 XP 2 true org.hibernate.dialect.HSQLDialect thread org.hibernate.cache.NoCacheProvider

22 XP <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <class name="com.visualpatterns.timex.model.Department" table="Department">

23 XP Может содержать определение связи:

24 XP package com.visualpatterns.timex.model; public class Department { String departmentCode; String name; public String getDepartmentCode() { return this.departmentCode; } public void setDepartmentCode(String departmentCode) { this.departmentCode = departmentCode; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }

25 XP Постоянные объекты – это объекты, которые в настоящее время связаны с сеансом Hibernate (гарантируется, что они соответствуют реальным записям базы данных). Отсоединенные объекты – после закрытия сеансов ими становятся постоянные объекты. Временные объекты – это объекты, которые не связаны с сеансом Hibernate и не имеют идентификатора объекта.

26 XP package com.visualpatterns.timex.test; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.visualpatterns.timex.model.Department; public class HibernateTest { public static void main(String args[]) throws Exception { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession();

27 XP Transaction tx = session.beginTransaction(); Department department; department = (Department) session.get(Department.class, "IT"); System.out.println("Name for IT = " + department.getName()); List departmentList = session.createQuery("from Department").list(); for (int i = 0; i < departmentList.size(); i++) { department = (Department) departmentList.get(i); System.out.println("Row " + (i + 1) + "> " + department.getName() + " (" + department.getDepartmentCode() + ")"); } tx.commit(); session.close(); sessionFactory.close();} }

28 XP <java fork="true" classpathref="master-classpath" classname="com.visualpatterns.timex.test.HibernateTest" />

29 XP Department department = (Department) session.get(Department.class, "IT"); Или Department department=(Department) session.load(Department.class,IT);

30 XP List departmentList = session.createQuery("from Department").list(); Или с помощью критериев: List departmentList = session.createCriteria(Department.class). add(Restrictions.eq("departmentCode", "IT")).list(); Другие ограничения – between, in, isEmpty, isNull, and, or, like, conjunction, disjunction

31 XP Запросы можно создавать в файле связывания, именовать их и обращаться к ним из классов по имени. Например, в файле связывания: from Timesheet where employeeID=:employeeID Обращение к этому запросу выглядит так: List departmentList = session.getNamedQuery(getTomesheet).setInteger (employeeID,1).list();

32 XP Department d1=new Department(); d1.setDepartmentCode("MY"); d1.setName("ПРОБНОЕ НАЗВАНИЕ"); session.saveOrUpdate(d1); Или с помощью sql-запроса: session.createSQLQuery("insert into Department (name,departmentCode) values (?,?)").setString(0, "proba").setString(1, "PB").executeUpdate(); Существуют функции установки параметров других типов, например, setInteger, setDate.

33 XP Department d2=(Department) session.get(Department.class,PB); d2.setName(Новое имя); session.saveOrUpdate(d2); Или с помощью sql-запроса.

34 XP Department d2=(Department) session.get(Department.class,PB); d2.delete(d2); Или с помощью sql-запроса.


Download ppt "EXtreme Programming XP Тема 8. XP Объектно-реляционное связывание позволяет связать реляционную базу данных и простые объекты Java. Обычно связывание."

Similar presentations


Ads by Google