crash introduction to modern java data access
TRANSCRIPT
![Page 1: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/1.jpg)
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery
Dr. Vladimir Bacvanski
Session Code: E13
May 6, 2011 * 8:00 – 9:00am | Platform: Cross Platform
![Page 2: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/2.jpg)
Outline
• Database/Programming Languages Chasm
• Persistence Options
• JDBC
• Object Relational Mapping
• JPA & Hibernate
• MyBatis
• pureQuery
• Conclusions
2
![Page 3: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/3.jpg)
Database/Programming Languages Chasm
• Relational Database
• The world consists of
tables
• Java
• The world consists of
objects, which are
instances of classes
Customerid name phone email1 Joe 123-… joe@...
AddresscustId street city1 1 Nice … San…
c1: Customername="Joe"
phone=123- 456-7890
email="[email protected]"
a1: Addressstreet="1 Nice Way"
city="San Francisco"
3
![Page 4: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/4.jpg)
Accessing Databases: Many Choices!
JDBCpureQuery
SQLJ
Hibernate
JPA
MyBatis(iBatis)
EJB
There are more choices, but we'll discuss just the more popular ones4
![Page 5: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/5.jpg)
JDBC
• JDBC (Java Database Connectivity) provides an API
allowing for explicit creation of SQL queries from Java
• The API allows for issuing of SQL commands
• Prepared queries
• Ad-hoc queries
• Callable statements
• The result comes back as a cursored table
5
![Page 6: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/6.jpg)
Code Example: JDBC
Table Column TypeEMP NAME CHAR(64)
EMP ADDRESS CHAR(128)
EMP PHONE_NUM CHAR(10)
class Employee {public String name;public String homeAddress;public String homePhone;…
}
java.sql.PreparedStatement ps = con.prepareStatement(
"SELECT NAME, ADDRESS,PHONE_NUM FROM EMP
WHERE NAME=?");
ps.setString(1, name);
java.sql.ResultSet rs = ps.executeQuery();
rs.next();
Employee myEmp = new Employee();
myEmp.setName(rs.getString(1));
myEmp.setHomeAddress(rs.getString(2));
myEmp.setHomePhone(rs.getString(3));
rs.close();
6
![Page 7: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/7.jpg)
Issues with Plain JDBC
• Benefits
• Performance
• It is possible to write optimized queries for a particular task
• It is possible to take advantage of underlying DB capabilities
• Ease of debugging
• The connection between the DB and application code is clear
• Drawbacks
• Cumbersome programming
• The mapping from the application world (Java objects) to the DB
world may be cumbersome and complex
• Much code may have to be written and debugged
• It is easy to introduce mechanical bugs
• E.g., closing of connections
• JDBC API lags behind modern database features 7
![Page 8: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/8.jpg)
Object-Relational Mapping
• Issues with JDBC led to development of O/R mapping,
most notably Hibernate as the leading implementation
• One popular approach to connect applications to the
database is the use of an object-relational mapping tool
(ORM)
• Many ORM technologies and implementations available:
• JPA: The dominant specification
• Hibernate, OpenJPA, EclipseLink: JPA implementations
8
![Page 9: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/9.jpg)
Mapping Between the WorldsThe Object-Oriented View
The Relational Database View
VEHICLE_TBL
PK id char(10)
FK1 owner_id char(10)
name varchar(50)
type smallint
MOTORIZED_VEHICLE_TBL
PK,FK1,FK2 id char(10)
fuel_consumption real
type_id char(10)
BIKE_TBL
PK,FK1 id char(10)
bike_type smallint
VEHICLE_2_PERSON_MAP
PK,FK2 legal_driver_id char(10)
PK,FK1 available_car_id char(10)
ADDRESS_TBL
PK id varchar(16)
FK1 occupant_id char(10)
street varchar(250)
city varchar(50)
state varchar(50)
country varchar(40)
PERSON_TBL
PK id char(10)
name varchar (50)
MOTORIZED_VEHICLE_TYPE
PK id char(10)
name varchar(50)
description varchar(255)
name: String
Vehicle
name: String
Person
1*
vehiclePark owner
**
availableCars legalUsers
fuelCapacity: Integer
MotorizedVehicle
bikeType: BikeType
Bike
RACING
MOUNTAIN
STREET
UNICYCLE
<<enumeration>>
BikeType
name: String
description: String
MotorizedVehicleType
instances
type1
*
street: String
city: String
state: String
country: String
Address
*
O/R Mapping
map
map
map
map
map
Mapping:
Annotations or XML
9
![Page 10: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/10.jpg)
JPA Example: Annotations
@Entity
public class Employee {
@Id
private Long id;
@ManyToOne
private Department department;
...
}
@Entity
public class Department {
@OneToMany(mappedBy="department")
private Collection<Employee> employees = new HashSet();
10
![Page 11: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/11.jpg)
JPA Inheritance Example
@Entity
@Inheritance
@DiscriminatorColumn(name="DISC", discriminatorType=STRING,length=20)
@DiscriminatorValue(“PERSON")
public class Person { ... }
@Entity
@DiscriminatorValue("CUSTOMER")
public class Customer extends Person { ... }
11
![Page 12: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/12.jpg)
Hibernate: More than JPA
• JPA was heavily inspired by Hibernate
• Today, Hibernate implements the JPA standard
• Provides more features in areas:
• Primary key generators
• Control over cascade behaviors
• Criteria for query building
• Query language HQL
• Caching
• …
12
![Page 13: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/13.jpg)
Issues with ORM Tools
• Benefits
• Ease of use for the application programmer
• The programmer writes code assuming an object model
• The tool maps the object model to SQL
• Continuity
• The domain model (from analysis) is preserved in implementation
• Drawbacks
• Performance
• It is hard for the general purpose mapping tool to take advantage of
the underlying database capabilities
• Complex to debug
• The mapping can make finding errors very hard
13
![Page 14: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/14.jpg)
MyBatis (iBatis)
• MyBatis was earlier known as iBatis
• SQL is fully exposed: MyBatis is not a full ORM!
• Persistence access is explicit through SQL
• Reduced Java boilerplate code in comparison with JDBC
Input
Hashtable
POJO
Primitive
MappingXML or Annotations
Output
Hashtable
POJO
Primitive
Mapped Statement
14
![Page 15: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/15.jpg)
SQL Mapping and Call in MyBatis
Mapping:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.scispike.CustomerMapper">
<select id="selectCustomer" parameterType="int"
resultType="Customer">
select * from Customer where id = #{id}
</select>
</mapper>
Call:
Customer cust = (Customer) session.selectOne(
"com.scispike.CustomerMapper.selectCustomer", 1001);
15
![Page 16: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/16.jpg)
Issues with MyBatis
• Benefits
• Full control over SQL and improved productivity in comparison
with JDBC
• Suitable for dealing with legacy databases
• Troubleshooting easier in comparison with JPA
• Drawbacks
• Tooling support is lacking
• Productivity initially reduced in comparison with JPA, but catches
up later through easier troubleshooting
16
![Page 17: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/17.jpg)
pureQuery
• A high-performance, data access platform to simplify
developing, managing, securing, and optimizing data
access
pureQuery Components:• Simple and intuitive API
• Enables SQL access to databases or in-memory Java objects
• Facilitates best practices
• Optim Development Studio (integrates with RAD/RSA)
• Integrated development environment with Java and SQL support
• Improve problem isolation and impact analysis
• Optimize existing code: JDBC/JPA/Hibernate/MyBatis• Optim pureQuery Runtime
• Flexible static SQL deployment for DB217
![Page 18: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/18.jpg)
Code Example: pureQuery
• "Inline" query:
Employee myEmp = db.queryFirst("SELECT NAME, ADDRESS, PHONE_NUM FROM EMPWHERE NAME=?", Employee.class, name);
• Even simpler, if we have a method getEmployee with a
Java annotation or XML file with SQL for the query:
Employee myEmp = db.getEmployee(name);
18
![Page 19: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/19.jpg)
Optim Development Studio: pureQuery IDE
Visualize
execution metrics
Execute, tune,
share, trace,
explore SQL
Replace SQL
without changing
the application
Position in
Database Explorer
Visualize
application SQL
19
![Page 20: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/20.jpg)
SQL Integration with Java• SQL content assist
• SQL validation
20
![Page 21: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/21.jpg)
Data Access Objects – pureQuery support
Quickly create JEE Data Access Objects
• An interface with only your methods
• Methods for each database access
• Each method has only your parameters
• SQL can be in XML file or annotations
• Implementation automatically generated with best practice
database access and optimizations.
• Template-based generation with template customization
• Mix hand-written and generated code.
• Can modify generated code and safely regenerate.
21
![Page 22: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/22.jpg)
pureQuery: Optimal Productivity and Control
Managed Objects Object-Relational MappingFull SQL Control
Code all your SQL
Complex O/R mapping and persistence management, but loss of control
Adds container management option
JDBC / SQLJ
MyBatis
JPA/Hibernate
EJB 3
Add basic OR mapping and annotated-method stylepureQuery
22
![Page 23: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/23.jpg)
Conclusion
• Each approach has its strengths and weaknesses
• JDBC alone
• To low level for most applications
• JPA and Hibernate
• Good choice when you own the database, performance not critical
• MyBatis
• Full control over SQL, reduced boilerplate
• pureQuery
• Full control over SQL , mixing productivity, static SQL, and
integrated tooling
23
![Page 24: Crash Introduction to Modern Java Data Access](https://reader031.vdocuments.us/reader031/viewer/2022020702/61fa91dee4e6134ee907e8cc/html5/thumbnails/24.jpg)
Getting in Touch
• Email: [email protected]
• Blog: http://www.OnBuildingSoftware.com/
• Twitter: http://twitter.com/OnSoftware
• LinkedIn: http://www.linkedin.com/in/VladimirBacvanski
24