Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery
-
Upload
dr-vladimir-bacvanski -
Category
Technology
-
view
2.019 -
download
5
description
Transcript of Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery
![Page 1: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/1.jpg)
Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery
Dr. Vladimir Bacvanski
Session Code: E13Session Code: E13May 6, 2011 * 8:00 May 6, 2011 * 8:00 –– 9:00am | Platform: Cross Platform9:00am | Platform: Cross Platform
![Page 2: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/2.jpg)
Outline
• Database/Programming Languages ChasmP i t O ti• Persistence Options
• JDBCObj t R l ti l M i• Object Relational Mapping
• JPA & Hibernate• MyBatis• pureQuery• Conclusions
2
![Page 3: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/3.jpg)
Database/Programming Languages Chasmg g g g
• Relational Database • JavaCustomer
pid name phone email1 Joe 123‐…
c1: Customername="Joe"phone=123 456 7890joe@...
Add
email="[email protected]"phone=123‐ 456‐7890email="[email protected]"
AddressycustId street city
1 1 Nice … San
a1: Addressstreet="1 Nice Way"
• The world consists of • The world consists of
San…city="San Francisco"
tables objects, which are instances of classes 3
![Page 4: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/4.jpg)
Accessing Databases: Many Choices!g yJDBCpureQuery
SQLJSQLJMyBatisMyBatis(iBatis)
Hibernate
Hibernate
)(iBatis)
JPA EJB
There are more choices, but we'll discuss just the more popular ones4
![Page 5: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/5.jpg)
JDBC
• JDBC (Java Database Connectivity) provides an API allowing for explicit creation of SQL queries from Javaallowing for explicit creation of SQL queries from Java
• The API allows for issuing of SQL commands• Prepared queries• 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: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/6.jpg)
Code Example: JDBCpTable Column TypeEMP NAME CHAR(64)
java.sql.PreparedStatement ps = con.prepareStatement(
EMP ADDRESS CHAR(128)
EMP PHONE_NUM CHAR(10)
"SELECT NAME, ADDRESS,PHONE_NUM FROM EMP WHERE NAME=?");
ps.setString(1, name);java.sql.ResultSet rs = ps.executeQuery();rs.next();
class Employee {public String name;
();Employee myEmp = new Employee();myEmp.setName(rs.getString(1));myEmp setHomeAddress(rs getString(2)); public String name;
public String homeAddress;public String homePhone;…
myEmp.setHomeAddress(rs.getString(2));myEmp.setHomePhone(rs.getString(3));rs.close();
}
6
![Page 7: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/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• 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 complexworld 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: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/8.jpg)
Object-Relational Mappingj pp g
• Issues with JDBC led to development of O/R mapping, most notably Hibernate as the leading implementationmost notably Hibernate as the leading implementation
• One popular approach to connect applications to the database is the use of an object-relational mapping tooldatabase is the use of an object-relational mapping tool (ORM)
• Many ORM technologies and implementations available: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: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/9.jpg)
Mapping Between the Worldspp g
RACINGMOUNTAIN
<<enumeration>>BikeType
name: String
Vehicle
name: String
Person
1*
vehiclePark owner
**
availableCars legalUsers
STREETUNICYCLE
name: Stringdescription: String
MotorizedVehicleType
fuelCapacity: Integer
MotorizedVehicle
bikeType: BikeType
Bikeinstances
type1
*street: Stringcity: Stringstate: Stringcountry: String
Address
*
VEHICLE_2_PERSON_MAP
PK,FK2 legal_driver_id char (10)PK,FK1 available _car_id char (10)
PERSON_TBL
PK id char (10)
name varchar (50)
MOTORIZED_VEHICLE_TYPE
PK id char(10)
name varchar (50)description varchar(255)
VEHICLE_TBL
PK id char(10)
FK1 owner_id char(10)name varchar (50)type smallint
ADDRESS_TBL
PK id varchar (16)MOTORIZED_VEHICLE_TBL
PK,FK1,FK2 id char(10)
fuel_consumption realtype_id char(10)
BIKE_TBL
PK,FK1 id char(10)
bike_type smallint
PK id varchar (16)
FK1 occupant_id char(10)street varchar (250)city varchar (50)state varchar (50)country varchar (40)
9
![Page 10: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/10.jpg)
JPA Example: Annotationsp@Entitypublic class Employee {
@Idprivate Long id;
@ManyToOneprivate Department department;...
}
@ i@Entitypublic class Department {
@OneToMany(mappedBy="department") private Collection<Employee> employees = new HashSet();
10
![Page 11: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/11.jpg)
JPA Inheritance Examplep@Entity
@Inheritance@
@DiscriminatorColumn(name="DISC", discriminatorType=STRING,length=20)
@DiscriminatorValue(“PERSON")@DiscriminatorValue( PERSON )
public class Person { ... }
@Entity
@DiscriminatorValue("CUSTOMER") public class Customer extends Person { ... }p { }
11
![Page 12: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/12.jpg)
Hibernate: More than JPA
• JPA was heavily inspired by HibernateT d Hib t i l t th JPA t d d• Today, Hibernate implements the JPA standard
• Provides more features in areas:P i k t• Primary key generators
• Control over cascade behaviors• Criteria for query buildingCriteria for query building• Query language HQL• Caching• …
12
![Page 13: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/13.jpg)
Issues with ORM Tools• Benefits
• Ease of use for the application programmer• 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• Drawbacks• Performance
• It is hard for the general purpose mapping tool to take advantage of g p p pp g gthe underlying database capabilities
• Complex to debug• The mapping can make finding errors very hard• The mapping can make finding errors very hard
13
![Page 14: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/14.jpg)
MyBatis (iBatis)y ( )• MyBatis was earlier known as iBatis• SQL is fully exposed: MyBatis is not a full ORM! y p y• Persistence access is explicit through SQL• Reduced Java boilerplate code in comparison with JDBC
MappingXML or Annotations
Input
Hashtable
Output
HashtableMapped
POJO POJO
Mapped Statement
Primitive Primitive
14
![Page 15: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/15.jpg)
SQL Mapping and Call in MyBatisQ pp g yMapping:<?xml version="1.0" encoding="UTF‐8" ?><?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"><mapper namespace com.scispike.CustomerMapper >
<select id="selectCustomer" parameterType="int"resultType="Customer">
select * from Customer where id = #{id}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: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/16.jpg)
Issues with MyBatisy• Benefits
• Full control over SQL and improved productivity in comparison• Full control over SQL and improved productivity in comparison with JDBC
• Suitable for dealing with legacy databases• Troubleshooting easier in comparison with JPA
D b k• Drawbacks• Tooling support is lacking• Productivity initially reduced in comparison with JPA but catches• Productivity initially reduced in comparison with JPA, but catches
up later through easier troubleshooting
16
![Page 17: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/17.jpg)
pureQueryp Q y
• A high-performance, data access platform to simplify developing managing securing and optimizing datadeveloping, managing, securing, and optimizing data access
pureQuery Components:• Simple and intuitive API
• Enables SQL access to databases or in-memory Java objectsy j• Facilitates best practices
• Optim Development Studio (integrates with RAD/RSA)• Integrated development environment with Java and SQL supportIntegrated development environment with Java and SQL support • Improve problem isolation and impact analysis• Optimize existing code: JDBC/JPA/Hibernate/MyBatis
• Optim pureQuery Runtime• Optim pureQuery Runtime• Flexible static SQL deployment for DB2
17
![Page 18: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/18.jpg)
Code Example: pureQueryp p Q y
• "Inline" query:
Employee myEmp = db.queryFirst("SELECT NAME, ADDRESS, PHONE_NUM FROM EMP
?" l l )WHERE NAME=?", Employee.class, name);
• Even simpler if we have a method getEmployee with aEven 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: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/19.jpg)
Optim Development Studio: pureQuery IDEp p p Q y
R l SQL
Visualize application SQL
Visualize execution metrics
Replace SQL without changing
the application
P iti i
Execute, tune, share, trace, explore
SQL
Position in Database Explorer
19
![Page 20: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/20.jpg)
SQL Integration with JavaQ g• SQL content assist
SQL lid ti• SQL validation
20
![Page 21: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/21.jpg)
Data Access Objects – pureQuery supportj p Q y pp
Quickly create JEE Data Access ObjectsA i t f ith l th d• An interface with only your methods
• Methods for each database accessE h th d h l t• Each method has only your parameters
• SQL can be in XML file or annotations• Implementation automatically generated with best practice
database access and optimizations.T l t b d ti ith t l t t i ti• Template-based generation with template customization
• Mix hand-written and generated code. C dif t d d d f l t• Can modify generated code and safely regenerate.
21
![Page 22: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/22.jpg)
pureQuery: Optimal Productivity and Controlp Q y p y
Managed Objects Object-Relational MappingFull SQL Control
Code all your SQL
JDBC / SQLJJDBC / SQLJ
MyBatis
Complex O/R mapping and persistence management, but loss of control
Add basic OR mapping and annotated-method stylepureQuery
p pp g p g
Adds container management option
JPA/Hibernate
EJB 3
22
![Page 23: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/23.jpg)
Conclusion
• Each approach has its strengths and weaknessesJDBC l• JDBC alone• To low level for most applications
• JPA and Hibernate• JPA and Hibernate• Good choice when you own the database, performance not critical
• MyBatis• MyBatis• Full control over SQL, reduced boilerplate
• pureQuerypureQuery• Full control over SQL , mixing productivity, static SQL, and
integrated tooling
23
![Page 24: Crash Introduction to Modern Java Data Access: Understanding JPA, Hibernate, MyBatis, and pureQuery](https://reader031.fdocuments.in/reader031/viewer/2022020207/54958e1ab479592d5a8b45ce/html5/thumbnails/24.jpg)
Getting in Touchg
• Email: [email protected] htt // O B ildi S ft /• Blog: http://www.OnBuildingSoftware.com/
• Twitter: http://twitter.com/OnSoftwareLi k dI htt // li k di /i /Vl di i B ki• LinkedIn: http://www.linkedin.com/in/VladimirBacvanski
• Parts of the presentation are from SciSpike courses:• Developing Database Applications with Optim Development Studio and pureQuery• Developing Database Applications with Optim Development Studio and pureQuery• Hibernate
24