Сервер баз данных HSQLDB и Hibernate

  • Upload
    torgny

  • View
    42

  • Download
    1

Embed Size (px)

DESCRIPTION

Тема 8. Сервер баз данных HSQLDB и Hibernate. XP. eXtreme Programming. Объектно-реляционное связывание ( ORM ). Объектно-реляционное связывание позволяет связать реляционную базу данных и простые объекты Java . Обычно связывание осуществляется с помощью файлов XML . - PowerPoint PPT Presentation

Citation preview

  • eXtreme Programming

    XP 8

  • XP

    - Java. XML. Hibernate.

  • . . , Dog Cat, Animal, . . . . .

    XP

  • XP

  • XP

  • XP Java (2001 .). , war- .

    hsqldb.jar lib .

  • XP

  • XP

  • XP

  • XP

  • XP

    -- 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;

  • 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 );

  • 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 );

  • -- Step 3: Create indexesCREATE 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 dataINSERT 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

  • INSERT INTO Employee (employeeId, name, employeeCode, password, email, managerEmployeeId) VALUES (1, 'Mike Dover', 'H', 'rapidjava', '[email protected]', 3);INSERT INTO Employee (employeeId, name, employeeCode, password, email, managerEmployeeId) VALUES (2, 'Ajay Kumar', 'H', 'visualpatterns', '[email protected]', 3);INSERT INTO Employee (employeeId, name, employeeCode, password, email, managerEmployeeId) VALUES (3, 'Teresa Walker', 'M', 'agilestuff', '[email protected]', 4);INSERT INTO Employee (employeeId, name, employeeCode, password, email) VALUES (4, 'Tom Brady', 'E', 'superbowl', '[email protected]');XP

  • 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 okSELECT * FROM Department;SELECT * FROM Employee;SELECT * FROM Timesheet;

    XP

  • XP

  • XP 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

  • XP Hibernate: Hibernate (hibernate.cfg.xml) Java ( .hbm.xml).

  • XP

    org.hsqldb.jdbcDriver

    jdbc:hsqldb:hsql://localhost:9005/timex

    sa

  • XP2true

    org.hibernate.dialect.HSQLDialect

    thread

    org.hibernate.cache.NoCacheProvider

  • XP

  • XP

    :

  • XPpackage 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; }}

  • XP

    , Hibernate (, ). . , Hibernate .

  • XPpackage 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();

  • 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();}}

  • XP

  • XP

    Department department = (Department) session.get(Department.class, "IT");

    Department department=(Department) session.load(Department.class,IT);

  • 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

  • XP , ., : from Timesheet where employeeID=:employeeID

    :List departmentList = session.getNamedQuery(getTomesheet).setInteger (employeeID,1).list();

  • XPDepartment 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.

  • XP

    Department d2=(Department) session.get(Department.class,PB);d2.setName( );session.saveOrUpdate(d2);

    sql-.

  • XP

    Department d2=(Department) session.get(Department.class,PB);d2.delete(d2);

    sql-.

    *******