database programming including o/r mapping (as part of the the ptt lecture)
TRANSCRIPT
![Page 1: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/1.jpg)
Database Programming
Prof. Dr. Ralf LämmelUniversität Koblenz-LandauSoftware Languages Team
![Page 2: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/2.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Elevator speech
Think of information systems and data processing!1. How to persist data?2. How to separate data and functionality?3. How to deal with a lot of data efficiently?4. How to implement entity relationships?XML may serve 1.-2.Relational databases serve 1.-4.Exercise: what’s XML specifically good for?
Also: how to remain an OO programmer?
![Page 3: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/3.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Database programming(ignoring OO specifics)
1. Model data via entity-relationship (ER) model
2. Map ER model to relational model (tables)
3. Implement relational model via SQL
4. Implement CRUD functionality
akin to classes + associations
Tables = rows / columns of cells
Create, Read, Update, Delete
![Page 4: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/4.jpg)
The Entity/Relationship model
Just a quick ride; see your DB course
for details.
![Page 5: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/5.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Entities
company: namedepartment: nameemployee: name, address, salary, manager
There are only attributes of
“simple” types.
Just a quick ride; see your DB course
for details.
![Page 6: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/6.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Relationships
The company of a department.The super-department of a sub-department.The company of an employee.The department of an employee.
Exercise: figure out cardinalities for the listed relationships.
Just a quick ride; see your DB course
for details.
![Page 7: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/7.jpg)
The relational model
![Page 8: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/8.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Relations (tables)
RelationVertically: set of tuples (“rows”)Horizontally: set of columns
Each cell is of some type StringsNumbersRow IDs (numbers again)
![Page 9: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/9.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Relational schemas
Key termsAttributes (names)Attribute domains (types)Relational schema (attribute-domain pairs)
Instance of relational schema (sets of tuples)
![Page 10: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/10.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Relational algebra: compute relations
Projection (narrow down on certain columns)Selection (narrow down on certain rows)Join (compose two tables by condition)
![Page 11: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/11.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
The relational schemafor 101companies
Relational schemas (names only)
company (id, name)
department (id, name, cid, did)
employee (id, name, address, salary, manager, cid, did)
Key constraints:Primary key (underlined) for identification of tupleForeign key (italics) for reference to another table
![Page 12: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/12.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Map ER to relations
Every entity becomes a table.
Relationships
1:1 use foreign key
otherwise (mostly) use extra table.
Compare with implementation of UML class diagrams.
We also speak of tables instead of relations.
Just a quick ride; see your DB course
for details.
![Page 13: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/13.jpg)
SQL DDL
![Page 14: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/14.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CREATE TABLE company (
! id INTEGER,
! name VARCHAR(100)
)
DDL statement for company
![Page 15: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/15.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CREATE TABLE company (
! id INTEGER PRIMARY KEY,
! name VARCHAR(100) UNIQUE NOT NULL
)
More details
![Page 16: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/16.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CREATE TABLE company (
! id INTEGER AUTO_INCREMENT PRIMARY KEY,
! name VARCHAR(100) UNIQUE NOT NULL
)
More details
![Page 17: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/17.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CREATE TABLE department (
! id INTEGER,
! name VARCHAR(100),
! cid INTEGER,
! did INTEGER,
)
![Page 18: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/18.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CREATE TABLE department (
! id INTEGER PRIMARY KEY,
! name VARCHAR(100) NOT NULL,
! cid INTEGER NOT NULL,
! did INTEGER,
! FOREIGN KEY (cid) REFERENCES company(id),
! FOREIGN KEY (did) REFERENCES department(id)
)
More details
![Page 19: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/19.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CREATE TABLE department (
! id INTEGER PRIMARY KEY,
! name VARCHAR(100) UNIQUE NOT NULL,
! cid INTEGER NOT NULL,
! did INTEGER,
! FOREIGN KEY (cid) REFERENCES company(id)
! ON DELETE CASCADE ON UPDATE CASCADE,
! FOREIGN KEY (did) REFERENCES department(id)
! ON DELETE CASCADE ON UPDATE CASCADE
)
More details
![Page 20: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/20.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CREATE TABLE employee (
! id INTEGER PRIMARY KEY,
! name VARCHAR(50) NOT NULL,
! address VARCHAR(50) NOT NULL,
! salary DOUBLE NOT NULL,
manager BOOL NOT NULL,
! cid INTEGER NOT NULL,
! did INTEGER NOT NULL,
! FOREIGN KEY (cid) REFERENCES company(id),
! FOREIGN KEY (did) REFERENCES department(id)
)
![Page 21: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/21.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
DDL language summary
CREATE TABLENOT NULLPRIMARY / FOREIGN KEYON DELETE / UPDATE CASCADE
![Page 22: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/22.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Database programming with SQL (Structured Query Language)
Represent schema in DDL subset of SQL
DDL - Data Definition Language
Part of SQL for data definition
Represent population in DML subset of SQL
DML - Data Manipulation Language
Part of SQL for CRUD (Create, Read, Update, Delete)
![Page 23: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/23.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
DEMO
http://101companies.org/wiki/Contribution:mySqlMany
We use a local database server and SQL monitor; see the online documentation
for the contribution.
![Page 24: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/24.jpg)
SQL DML
![Page 25: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/25.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
CRUD
C: Create (SQL: Insert)R: Read (SQL: Select)U: UpdateD: Delete
![Page 26: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/26.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
INSERT INTO company (name) VALUES ("Acme Corporation")
Insert a new company into the corresponding table.
![Page 27: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/27.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
INSERT INTO department (name,cid) VALUES ("Research",1)INSERT INTO department (name,cid) VALUES ("Development",1)...
Insert several departments into the corresponding table.
![Page 28: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/28.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
SELECT * FROM DEPARTMENT
id,name,cid,did1,Research,1,NULL2,Development,1,NULL3,Dev1,1,24,Dev1.1,1,3
List of tuples of the department table.
![Page 29: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/29.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
SELECT SUM(salary) FROM employee
Select all employees, project to their salaries, and sum them up.
![Page 30: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/30.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
SELECT SUM(salary) FROM employee WHERE cid = 1
Retrieve only salaries of a specific company.
![Page 31: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/31.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
SELECT SUM(salary) FROM employee WHERE cid = (SELECT id FROM company WHERE name = "Acme Corporation")
Use a nested query to determine the company id.
![Page 32: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/32.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
UPDATE employee SET salary = salary / 2
Cut all salaries in half.
![Page 33: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/33.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
UPDATE employee SET salary = salary / 2 WHERE cid = 1
Limit update to employees with company id = 1.
![Page 34: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/34.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
UPDATE employee SET salary = salary / 2 WHERE cid = (SELECT id FROM company WHERE name = "Acme Corporation")
Use a nested query to determine the company id.
![Page 35: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/35.jpg)
Embedding SQL with JDBC
![Page 36: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/36.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Total all salaries public static double total(MyConnection myConnection, String companyName){ double total = 0; try { String query = "SELECT salary FROM employee " + "WHERE cid = (SELECT id FROM company WHERE name = ?);"; PreparedStatement pstmtEmployees = myConnection.getConn() .prepareStatement(query); pstmtEmployees.setString(1, companyName); ResultSet salaries = pstmtEmployees.executeQuery(); while (salaries.next()) total += salaries.getDouble("salary"); } catch (SQLException e){ e.printStackTrace(); } return total; }
We do not use SQL’s SUM here so that we
can demonstrate JDBC’s ResultSets with the
example.
![Page 37: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/37.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Library supportfor database programming
JDBC (part of Java Core API)Connections to databasesSubmit SQL statementsRetrieve results
MySQL connector (part of demo project)JDBC-based driver for MySQL
![Page 38: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/38.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Embedded SQL
Important JDBC typesConnectionStatement (different forms thereof)ResultSet (for queries in particular)SQL Exception
![Page 39: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/39.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Cut all salaries in half public static void cut(MyConnection myConnection, String companyName) {
try {
// cut salaries in all employee columns
String sqlCut = "UPDATE employee SET salary = salary / 2 "
+ "WHERE cid = (SELECT id FROM company WHERE name = ?);";
PreparedStatement pstmtEmployees = myConnection.getConn()
.prepareStatement(sqlCut);
pstmtEmployees.setString(1, companyName);
pstmtEmployees.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
Exercise: understand the notion of injection attacks and argue how “prepared statements” help avoiding
the problem.
![Page 40: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/40.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
DEMO
http://101companies.org/wiki/Contribution:jdbc
![Page 41: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/41.jpg)
Object/Relational Mapping
We travel between the O and R spaces here. We traveled between O and X spaces before.
![Page 42: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/42.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Context: X/O/R mappingThe Bermuda Triangle of data processing
Relations
Objects
XML
In fact, there are further technical spaces.
Thanks to Erik Meijer for contributing this slide or part thereof.
![Page 43: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/43.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Object model for 101companies System
public class Company { private String name; private List<Department> depts = new LinkedList<Department>(); public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Department> getDepts() { return depts; }}
public class Department { ... }
public class Employee { ... }
![Page 44: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/44.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
XSD for 101companies System
<xs:element name="company"> <xs:complexType> <xs:sequence> <xs:element ref="name"/> <xs:element maxOccurs="unbounded" minOccurs="0"
ref="department"/> </xs:sequence> </xs:complexType> </xs:element>
<xs:element name="department"> ... </xs:element>
<xs:complexType name="employee"> ... </xs:complexType>
![Page 45: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/45.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Relational schema (SQL DDL)
CREATE TABLE company (
! id INTEGER PRIMARY KEY,
! name VARCHAR(100) UNIQUE NOT NULL
)
CREATE TABLE department ( ... )
CREATE TABLE employee ( ... )Observe one detail: companies do not
refer to departments (but vice versa).
![Page 46: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/46.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Elevator pitchHow to persist objects in database tables?
How to map object models to relational schemas?
... or the other way around?
![Page 47: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/47.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Exercises
Bing for this statement and read about it:
“O/R Mapping … is the Vietnam of Computer Science”!
Read about the “O/R impedance mismatch”!
![Page 48: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/48.jpg)
Hibernate
![Page 49: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/49.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Hibernate:Simplifying persistence in Java
Capabilities
Store objects in database tables, one object per row.
Restore objects in different programs / runs.
![Page 50: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/50.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
The Hibernate architectureSource: Hibernate Reference Documentation
![Page 51: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/51.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
A persistent class
public class Cat { private String id; private String name; private char sex; private float weight; public String getId() { return id; } private void setId(String id) { this.id = id; } // … other getters and setters …}
Used for the primary key
![Page 52: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/52.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Metadata for O/R mapping
<hibernate-mapping> <class name=“Cat" table="CAT“> <id name="id" type="string" unsaved-value="null" > <column name="CAT_ID" sql-type="char(32)" not-null="true"/> <generator class="uuid.hex"/> </id> <property name="name“> <column name="NAME" length="16" not-null="true"/> </property> <property name="sex"/> <property name="weight"/> </class></hibernate-mapping>
Map Java String type to
SQL type with length
![Page 53: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/53.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
A database table
The CAT table in the database
Column | Type | Modifiers --------+-----------------------+----------- cat_id | character(32) | not null name | character varying(16) | not null sex | character(1) | weight | real |
Indexes: cat_pkey primary key btree (cat_id)
![Page 54: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/54.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
A Hibernate session(in Java code)
Session session = HibernateUtil.currentSession();Transaction tx= session.beginTransaction();
Cat princess = new Cat();princess.setName("Princess");princess.setSex('F');princess.setWeight(7.4f);
session.save(princess); tx.commit(); HibernateUtil.closeSession();
Make a n object persistent and
commit changes.
Regular OO code
Set up session and begin transaction
![Page 55: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/55.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Query query = session.createQuery( "select c from Cat as c where c.sex = :sex");query.setCharacter("sex", 'F');for (Iterator it = query.iterate(); it.hasNext();) { Cat cat = (Cat) it.next(); out.println("Female Cat: " + cat.getName() ); }
How to retrieve persistent objects? Use HQL (Hibernate query language).
![Page 56: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/56.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
So what’s O/R mapping?Wikipedia’s definition
Ralf’s definition (relatively naïve version):• Category 1:
– Start from (idiomatic) classes.– Map object model to relational schema.– Deploy relational schema in database.– Encode CRUD in OO code.– Add transactions to OO code.
• Category 2:– Start from database (schema, instance, SPROC).– Derive object model to encapsulate data access.– Continue as above ...
• Category 1 + 2: classes and tables given, mapping wanted.• Category 2’:
– Like Category 2 but ...– ER/relational model-level mapping.– Coverage of distributed database and data integration.
![Page 57: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/57.jpg)
http://101companies.org/wiki/Contribution:hibernate
![Page 58: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/58.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Hibernate configuration
See Makefile for usage scenario
Data dir to be used by HSQLDB
Hibernate-enabled object modelwith mapping files
SQL scripts with relational schema and instance data.
The usual features.
![Page 59: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/59.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Employee POJOspublic class Employee {
private long id; private String name; private String address; private double salary; private boolean manager;
public long getId() { return id; } @SuppressWarnings("unused") private void setId(long id) { this.id = id; }
...}
![Page 60: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/60.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Mapping for employees
<hibernate-mapping>
<class name="org.softlang.company.Employee" table="EMPLOYEE">
<id name="id" column="ID"> <generator class="native" /> </id>
<property name="name" /> <property name="address" /> <property name="salary" /> <property name="manager" />
</class>
</hibernate-mapping>
![Page 61: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/61.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Mapping for departments<hibernate-mapping>
<class name="org.softlang.company.Department" table="DEPARTMENT"> <id name="id" column="ID"> <generator class="native" /> </id>
<property name="name" />
<set name="employees" cascade="all"> <key column="DEPT_ID" /> <one-to-many class="org.softlang.company.Employee" /> </set>
<set name="subdepts" cascade="all"> <key column="DEPT_ID" /> <one-to-many class="org.softlang.company.Department" /> </set>
</class>
</hibernate-mapping>
![Page 62: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/62.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Hibernate configuration
<hibernate-configuration> <session-factory> <!-- Database connection settings. --> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:hsql://localhost</property> <property name="connection.username">sa</property> <property name="connection.password"></property>
<!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- Create the database schema, if needed; update otherwise --> <property name="hbm2ddl.auto">update</property>
<!-- Mapping files in the project --> <mapping resource="org/softlang/company/Company.hbm.xml" /> <mapping resource="org/softlang/company/Department.hbm.xml" /> <mapping resource="org/softlang/company/Employee.hbm.xml" />
... </session-factory></hibernate-configuration>
![Page 63: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/63.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
DEMO
http://101companies.org/wiki/Contribution:hibernate
![Page 64: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/64.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
After starting DB and GUI
Non-default selection
![Page 65: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/65.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
After JUnit test Load and Refresh
![Page 66: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/66.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
After executing PopulateTables.sql
![Page 67: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/67.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Running a simple SQL query
![Page 68: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/68.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
SummaryUse OOP as the programming paradigm.Use relational DBs as the data management paradigm. OO programs can use embedded SQL for database access.
SQL may be represented as strings.Query results may be as weakly typed collections.
Object models may be mapped to relational schemas.Relational data may be loaded into objects.Object changes may be saved back to database.Beware of the O/R impedance mismatch.
![Page 69: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/69.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Hibernate topics not covered
Use annotations instead of mapping files R-to-O
Database schema already present No need to manually write mapping No need to manage constraints Use Hibernate’s generator tools
Object queries Use Hibernate’s language for object queries
EJB-QL
![Page 70: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/70.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Developer’s view on using Hibernate
The content on this slide
is covered “in passing”
in the lecture.
![Page 71: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/71.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Developer’s view on using Hibernate
1. Link Hibernate libraries2. Configure database3. Hibernate-enable classes 4. Define a mapping 5. Write CRUD code
The content on this slide
is covered “in passing”
in the lecture.
![Page 72: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/72.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Developer’s view on using Hibernate
1. Link Hibernate libraries2. Configure database3. Hibernate-enable classes 4. Define a mapping 5. Write CRUD code
The content on this slide
is covered “in passing”
in the lecture.
![Page 73: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/73.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Download Hibernatehttp://www.hibernate.org/
The content on this slide
is covered “in passing”
in the lecture.
![Page 74: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/74.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Required for Hibernate 3.2(+ HSQLDB support)
antlr-2.7.6.jar asm.jar asm-attrs.jar cglib-2.1.3.jar commons-collections-2.1.1.jar commons-logging-1.0.4.jar dom4j-1.6.1.jar ehcache-1.2.3.jar jta.jar log4j-1.2.11.jar
hibernate3.jar hsqldb.jar
Tip: create a lib dir within your project and place all those jars over there. Then, make sure your project’s build path references the jars.
![Page 75: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/75.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Developer’s view on using Hibernate
1. Link Hibernate libraries2. Configure database3. Hibernate-enable classes 4. Define a mapping 5. Write CRUD code
The content on this slide
is covered “in passing”
in the lecture.
![Page 76: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/76.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Hibernate relies on a RDBMS
Simple option
Use hsqldb (HyperSQL DB engine)
hsqldb.jar
More flexible option
Use any SQL database via JDBC
The content on this slide
is covered “in passing”
in the lecture.
![Page 77: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/77.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Using hsqldb
Create a “data” subdirectory in your project directory.
Start the DB engine from within the “data” directory:java -cp ../lib/hsqldb.jar org.hsqldb.Server
Keep it running in the background.
Use database manager to monitor database.
java -cp lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing
![Page 78: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/78.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Developer’s view on using Hibernate
1. Link Hibernate libraries2. Configure database3. Hibernate-enable classes4. Define a mapping 5. Write CRUD code
The content on this slide
is covered “in passing”
in the lecture.
![Page 79: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/79.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Hibernate-enable classes
Use POJOsProvide a default constructorModel the following fieldprivate Long id;+ public getter+ private setter
The content on this slide
is covered “in passing”
in the lecture.
![Page 80: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/80.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Developer’s view on using Hibernate
1. Link Hibernate libraries2. Configure database3. Hibernate-enable classes 4. Define a mapping 5. Write CRUD code
The content on this slide
is covered “in passing”
in the lecture.
![Page 81: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/81.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
O/R mappingwith Hibernate
Defined in an XML fileMyClass.javaMyClass.hbm.xml
The content on this slide
is covered “in passing”
in the lecture.
![Page 82: Database programming including O/R mapping (as part of the the PTT lecture)](https://reader033.vdocuments.net/reader033/viewer/2022042814/5549578ab4c905f74e8b5027/html5/thumbnails/82.jpg)
(C) 2010-2013 Prof. Dr. Ralf Lämmel, Universität Koblenz-Landau (where applicable)
Developer’s view on using Hibernate
1. Link Hibernate libraries2. Configure database3. Hibernate-enable classes 4. Define a mapping 5. Write CRUD code
The content on this slide
is covered “in passing”
in the lecture.