Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
2
20240528-BJava
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
20240528-BJava
Commits
18bbf10a
Commit
18bbf10a
authored
Jun 26, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Projekt HibernateNaSerwerze
parent
3759b2bd
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1098 additions
and
9 deletions
+1098
-9
WspolnaNadklasa.java
PC30-Hibernate/src/main/java/hr/model/WspolnaNadklasa.java
+27
-0
Odczyt09_DTO.java
PC30-Hibernate/src/main/java/hr/programy/Odczyt09_DTO.java
+1
-1
P04_OdczytajStream.java
...bernate/src/main/java/hr/programy/P04_OdczytajStream.java
+2
-8
.gitignore
PC31-HibernateNaSerwerze/.gitignore
+7
-0
pom.xml
PC31-HibernateNaSerwerze/pom.xml
+41
-0
Customer.java
...bernateNaSerwerze/src/main/java/sklep/model/Customer.java
+112
-0
Order.java
...-HibernateNaSerwerze/src/main/java/sklep/model/Order.java
+121
-0
OrderProduct.java
...ateNaSerwerze/src/main/java/sklep/model/OrderProduct.java
+91
-0
OrderProductPK.java
...eNaSerwerze/src/main/java/sklep/model/OrderProductPK.java
+58
-0
Product.java
...ibernateNaSerwerze/src/main/java/sklep/model/Product.java
+76
-0
Lista0.java
...ernateNaSerwerze/src/main/java/sklep/serwlety/Lista0.java
+54
-0
Lista1.java
...ernateNaSerwerze/src/main/java/sklep/serwlety/Lista1.java
+53
-0
Lista2.java
...ernateNaSerwerze/src/main/java/sklep/serwlety/Lista2.java
+53
-0
Lista3.java
...ernateNaSerwerze/src/main/java/sklep/serwlety/Lista3.java
+47
-0
Sql1.java
...ibernateNaSerwerze/src/main/java/sklep/serwlety/Sql1.java
+51
-0
Sql2.java
...ibernateNaSerwerze/src/main/java/sklep/serwlety/Sql2.java
+58
-0
Sql3.java
...ibernateNaSerwerze/src/main/java/sklep/serwlety/Sql3.java
+55
-0
Zmiana2.java
...rnateNaSerwerze/src/main/java/sklep/serwlety/Zmiana2.java
+75
-0
Zmiana3.java
...rnateNaSerwerze/src/main/java/sklep/serwlety/Zmiana3.java
+72
-0
persistence.xml
...ateNaSerwerze/src/main/resources/META-INF/persistence.xml
+14
-0
index.html
PC31-HibernateNaSerwerze/src/main/webapp/index.html
+30
-0
No files found.
PC30-Hibernate/src/main/java/hr/model/WspolnaNadklasa.java
View file @
18bbf10a
package
hr
.
model
;
package
hr
.
model
;
import
java.lang.reflect.Field
;
abstract
class
WspolnaNadklasa
{
abstract
class
WspolnaNadklasa
{
@Override
public
String
toString
()
{
StringBuilder
result
=
new
StringBuilder
();
Class
<?
extends
WspolnaNadklasa
>
klasa
=
this
.
getClass
();
result
.
append
(
klasa
.
getSimpleName
()).
append
(
" ["
);
int
fieldNo
=
0
;
for
(
Field
field
:
klasa
.
getDeclaredFields
())
try
{
if
(
fieldNo
++
>
0
)
{
result
.
append
(
", "
);
}
Object
value
;
if
(
field
.
trySetAccessible
())
{
value
=
field
.
get
(
this
);
}
else
{
value
=
"!"
;
}
result
.
append
(
field
.
getName
()).
append
(
'='
).
append
(
value
);
}
catch
(
IllegalArgumentException
|
IllegalAccessException
e
)
{
System
.
err
.
println
(
e
);
}
result
.
append
(
"]"
);
return
result
.
toString
();
}
}
}
PC30-Hibernate/src/main/java/hr/programy/Odczyt09_DTO.java
View file @
18bbf10a
...
@@ -20,7 +20,7 @@ public class Odczyt09_DTO {
...
@@ -20,7 +20,7 @@ public class Odczyt09_DTO {
try
{
try
{
emf
=
Persistence
.
createEntityManagerFactory
(
"hr_postgresql"
);
emf
=
Persistence
.
createEntityManagerFactory
(
"hr_postgresql"
);
em
=
emf
.
createEntityManager
();
em
=
emf
.
createEntityManager
();
TypedQuery
<
MiniEmp
>
query
=
em
.
createQuery
(
"SELECT new dto.MiniEmp(e.firstName, e.lastName, e.job.jobTitle, e.salary) FROM Employee e"
,
MiniEmp
.
class
);
TypedQuery
<
MiniEmp
>
query
=
em
.
createQuery
(
"SELECT new
hr.
dto.MiniEmp(e.firstName, e.lastName, e.job.jobTitle, e.salary) FROM Employee e"
,
MiniEmp
.
class
);
List
<
MiniEmp
>
emps
=
query
.
getResultList
();
List
<
MiniEmp
>
emps
=
query
.
getResultList
();
for
(
MiniEmp
emp
:
emps
)
{
for
(
MiniEmp
emp
:
emps
)
{
System
.
out
.
println
(
emp
);
System
.
out
.
println
(
emp
);
...
...
PC30-Hibernate/src/main/java/hr/programy/P04_OdczytajStream.java
View file @
18bbf10a
...
@@ -8,20 +8,14 @@ import hr.model.Location;
...
@@ -8,20 +8,14 @@ import hr.model.Location;
public
class
P04_OdczytajStream
{
public
class
P04_OdczytajStream
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
EntityManagerFactory
emf
=
null
;
EntityManager
em
=
null
;
// Zapis z użyciem strumienia może dać lepszą wydajność. Zwróć uwagę na kolejność wykonywania dodatkowych selectów
// Zapis z użyciem strumienia może dać lepszą wydajność. Zwróć uwagę na kolejność wykonywania dodatkowych selectów
try
{
try
(
EntityManagerFactory
emf
=
Persistence
.
createEntityManagerFactory
(
"hr_postgresql"
);
emf
=
Persistence
.
createEntityManagerFactory
(
"hr_postgresql"
);
EntityManager
em
=
emf
.
createEntityManager
())
{
em
=
emf
.
createEntityManager
();
em
.
createNamedQuery
(
"Location.findAll"
,
Location
.
class
)
em
.
createNamedQuery
(
"Location.findAll"
,
Location
.
class
)
.
getResultStream
()
.
getResultStream
()
.
map
(
loc
->
String
.
format
(
" - %s, %s %s, %s"
,
loc
.
getStreetAddress
(),
loc
.
getPostalCode
(),
loc
.
getCity
(),
.
map
(
loc
->
String
.
format
(
" - %s, %s %s, %s"
,
loc
.
getStreetAddress
(),
loc
.
getPostalCode
(),
loc
.
getCity
(),
loc
.
getCountry
().
getCountryName
()))
loc
.
getCountry
().
getCountryName
()))
.
forEach
(
System
.
out
::
println
);
.
forEach
(
System
.
out
::
println
);
}
finally
{
em
.
close
();
emf
.
close
();
}
}
}
}
...
...
PC31-HibernateNaSerwerze/.gitignore
0 → 100644
View file @
18bbf10a
/target/
/.classpath
/.project
/.settings/
/*.iml
/.idea/
PC31-HibernateNaSerwerze/pom.xml
0 → 100644
View file @
18bbf10a
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
pl.alx.kjava
</groupId>
<artifactId>
PC31-HibernateNaSerwerze
</artifactId>
<version>
1.0
</version>
<packaging>
war
</packaging>
<properties>
<maven.compiler.source>
17
</maven.compiler.source>
<maven.compiler.target>
17
</maven.compiler.target>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
</properties>
<build>
<finalName>
${project.artifactId}
</finalName>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-war-plugin
</artifactId>
<version>
3.4.0
</version>
<configuration>
<failOnMissingWebXml>
false
</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>
javax
</groupId>
<artifactId>
javaee-web-api
</artifactId>
<version>
8.0.1
</version>
</dependency>
<dependency>
<groupId>
javax.servlet
</groupId>
<artifactId>
jstl
</artifactId>
<version>
1.2
</version>
<scope>
provided
</scope>
</dependency>
</dependencies>
</project>
PC31-HibernateNaSerwerze/src/main/java/sklep/model/Customer.java
0 → 100644
View file @
18bbf10a
package
sklep
.
model
;
import
java.io.Serializable
;
import
javax.persistence.*
;
import
java.util.List
;
/**
* The persistent class for the customers database table.
*
*/
@Entity
@Table
(
name
=
"customers"
)
@NamedQuery
(
name
=
"Customer.findAll"
,
query
=
"SELECT c FROM Customer c"
)
public
class
Customer
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@Id
@Column
(
name
=
"customer_email"
)
private
String
customerEmail
;
private
String
address
;
private
String
city
;
private
String
name
;
@Column
(
name
=
"phone_number"
)
private
String
phoneNumber
;
@Column
(
name
=
"postal_code"
)
private
String
postalCode
;
//bi-directional many-to-one association to Order
@OneToMany
(
mappedBy
=
"customer"
)
private
List
<
Order
>
orders
;
public
Customer
()
{
}
public
String
getCustomerEmail
()
{
return
this
.
customerEmail
;
}
public
void
setCustomerEmail
(
String
customerEmail
)
{
this
.
customerEmail
=
customerEmail
;
}
public
String
getAddress
()
{
return
this
.
address
;
}
public
void
setAddress
(
String
address
)
{
this
.
address
=
address
;
}
public
String
getCity
()
{
return
this
.
city
;
}
public
void
setCity
(
String
city
)
{
this
.
city
=
city
;
}
public
String
getName
()
{
return
this
.
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getPhoneNumber
()
{
return
this
.
phoneNumber
;
}
public
void
setPhoneNumber
(
String
phoneNumber
)
{
this
.
phoneNumber
=
phoneNumber
;
}
public
String
getPostalCode
()
{
return
this
.
postalCode
;
}
public
void
setPostalCode
(
String
postalCode
)
{
this
.
postalCode
=
postalCode
;
}
public
List
<
Order
>
getOrders
()
{
return
this
.
orders
;
}
public
void
setOrders
(
List
<
Order
>
orders
)
{
this
.
orders
=
orders
;
}
public
Order
addOrder
(
Order
order
)
{
getOrders
().
add
(
order
);
order
.
setCustomer
(
this
);
return
order
;
}
public
Order
removeOrder
(
Order
order
)
{
getOrders
().
remove
(
order
);
order
.
setCustomer
(
null
);
return
order
;
}
}
\ No newline at end of file
PC31-HibernateNaSerwerze/src/main/java/sklep/model/Order.java
0 → 100644
View file @
18bbf10a
package
sklep
.
model
;
import
java.io.Serializable
;
import
javax.persistence.*
;
import
java.util.Date
;
import
java.sql.Timestamp
;
import
java.util.List
;
/**
* The persistent class for the orders database table.
*
*/
@Entity
@Table
(
name
=
"orders"
)
@NamedQuery
(
name
=
"Order.findAll"
,
query
=
"SELECT o FROM Order o"
)
public
class
Order
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"order_id"
,
insertable
=
false
,
updatable
=
false
)
private
Integer
orderId
;
@Temporal
(
TemporalType
.
DATE
)
@Column
(
name
=
"delivery_date"
)
private
Date
deliveryDate
;
@Column
(
name
=
"order_date"
)
private
Timestamp
orderDate
;
@Temporal
(
TemporalType
.
DATE
)
@Column
(
name
=
"planned_delivery_date"
)
private
Date
plannedDeliveryDate
;
private
String
status
;
//bi-directional many-to-one association to OrderProduct
@OneToMany
(
mappedBy
=
"order"
)
private
List
<
OrderProduct
>
orderProducts
;
//bi-directional many-to-one association to Customer
@ManyToOne
@JoinColumn
(
name
=
"customer_email"
)
private
Customer
customer
;
public
Order
()
{
}
public
Integer
getOrderId
()
{
return
this
.
orderId
;
}
public
void
setOrderId
(
Integer
orderId
)
{
this
.
orderId
=
orderId
;
}
public
Date
getDeliveryDate
()
{
return
this
.
deliveryDate
;
}
public
void
setDeliveryDate
(
Date
deliveryDate
)
{
this
.
deliveryDate
=
deliveryDate
;
}
public
Timestamp
getOrderDate
()
{
return
this
.
orderDate
;
}
public
void
setOrderDate
(
Timestamp
orderDate
)
{
this
.
orderDate
=
orderDate
;
}
public
Date
getPlannedDeliveryDate
()
{
return
this
.
plannedDeliveryDate
;
}
public
void
setPlannedDeliveryDate
(
Date
plannedDeliveryDate
)
{
this
.
plannedDeliveryDate
=
plannedDeliveryDate
;
}
public
String
getStatus
()
{
return
this
.
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
public
List
<
OrderProduct
>
getOrderProducts
()
{
return
this
.
orderProducts
;
}
public
void
setOrderProducts
(
List
<
OrderProduct
>
orderProducts
)
{
this
.
orderProducts
=
orderProducts
;
}
public
OrderProduct
addOrderProduct
(
OrderProduct
orderProduct
)
{
getOrderProducts
().
add
(
orderProduct
);
orderProduct
.
setOrder
(
this
);
return
orderProduct
;
}
public
OrderProduct
removeOrderProduct
(
OrderProduct
orderProduct
)
{
getOrderProducts
().
remove
(
orderProduct
);
orderProduct
.
setOrder
(
null
);
return
orderProduct
;
}
public
Customer
getCustomer
()
{
return
this
.
customer
;
}
public
void
setCustomer
(
Customer
customer
)
{
this
.
customer
=
customer
;
}
}
\ No newline at end of file
PC31-HibernateNaSerwerze/src/main/java/sklep/model/OrderProduct.java
0 → 100644
View file @
18bbf10a
package
sklep
.
model
;
import
java.io.Serializable
;
import
javax.persistence.*
;
import
java.math.BigDecimal
;
/**
* The persistent class for the order_products database table.
*
*/
@Entity
@Table
(
name
=
"order_products"
)
@NamedQuery
(
name
=
"OrderProduct.findAll"
,
query
=
"SELECT o FROM OrderProduct o"
)
public
class
OrderProduct
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@EmbeddedId
private
OrderProductPK
id
;
@Column
(
name
=
"actual_price"
)
private
BigDecimal
actualPrice
;
@Column
(
name
=
"actual_vat"
)
private
BigDecimal
actualVat
;
private
Integer
quantity
;
//bi-directional many-to-one association to Order
@ManyToOne
@JoinColumn
(
name
=
"order_id"
,
insertable
=
false
,
updatable
=
false
)
private
Order
order
;
//uni-directional many-to-one association to Product
@ManyToOne
@JoinColumn
(
name
=
"product_id"
,
insertable
=
false
,
updatable
=
false
)
private
Product
product
;
public
OrderProduct
()
{
}
public
OrderProductPK
getId
()
{
return
this
.
id
;
}
public
void
setId
(
OrderProductPK
id
)
{
this
.
id
=
id
;
}
public
BigDecimal
getActualPrice
()
{
return
this
.
actualPrice
;
}
public
void
setActualPrice
(
BigDecimal
actualPrice
)
{
this
.
actualPrice
=
actualPrice
;
}
public
BigDecimal
getActualVat
()
{
return
this
.
actualVat
;
}
public
void
setActualVat
(
BigDecimal
actualVat
)
{
this
.
actualVat
=
actualVat
;
}
public
Integer
getQuantity
()
{
return
this
.
quantity
;
}
public
void
setQuantity
(
Integer
quantity
)
{
this
.
quantity
=
quantity
;
}
public
Order
getOrder
()
{
return
this
.
order
;
}
public
void
setOrder
(
Order
order
)
{
this
.
order
=
order
;
}
public
Product
getProduct
()
{
return
this
.
product
;
}
public
void
setProduct
(
Product
product
)
{
this
.
product
=
product
;
}
}
\ No newline at end of file
PC31-HibernateNaSerwerze/src/main/java/sklep/model/OrderProductPK.java
0 → 100644
View file @
18bbf10a
package
sklep
.
model
;
import
java.io.Serializable
;
import
javax.persistence.*
;
/**
* The primary key class for the order_products database table.
*
*/
@Embeddable
public
class
OrderProductPK
implements
Serializable
{
//default serial version id, required for serializable classes.
private
static
final
long
serialVersionUID
=
1L
;
@Column
(
name
=
"order_id"
,
insertable
=
false
,
updatable
=
false
)
private
Integer
orderId
;
@Column
(
name
=
"product_id"
,
insertable
=
false
,
updatable
=
false
)
private
Integer
productId
;
public
OrderProductPK
()
{
}
public
Integer
getOrderId
()
{
return
this
.
orderId
;
}
public
void
setOrderId
(
Integer
orderId
)
{
this
.
orderId
=
orderId
;
}
public
Integer
getProductId
()
{
return
this
.
productId
;
}
public
void
setProductId
(
Integer
productId
)
{
this
.
productId
=
productId
;
}
public
boolean
equals
(
Object
other
)
{
if
(
this
==
other
)
{
return
true
;
}
if
(!(
other
instanceof
OrderProductPK
))
{
return
false
;
}
OrderProductPK
castOther
=
(
OrderProductPK
)
other
;
return
this
.
orderId
.
equals
(
castOther
.
orderId
)
&&
this
.
productId
.
equals
(
castOther
.
productId
);
}
public
int
hashCode
()
{
final
int
prime
=
31
;
int
hash
=
17
;
hash
=
hash
*
prime
+
this
.
orderId
.
hashCode
();
hash
=
hash
*
prime
+
this
.
productId
.
hashCode
();
return
hash
;
}
}
\ No newline at end of file
PC31-HibernateNaSerwerze/src/main/java/sklep/model/Product.java
0 → 100644
View file @
18bbf10a
package
sklep
.
model
;
import
java.io.Serializable
;
import
javax.persistence.*
;
import
java.math.BigDecimal
;
/**
* The persistent class for the products database table.
*
*/
@Entity
@Table
(
name
=
"products"
)
@NamedQuery
(
name
=
"Product.findAll"
,
query
=
"SELECT p FROM Product p"
)
public
class
Product
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"product_id"
,
insertable
=
false
,
updatable
=
false
)
private
Integer
productId
;
private
String
description
;
private
BigDecimal
price
;
@Column
(
name
=
"product_name"
)
private
String
productName
;
private
BigDecimal
vat
;
public
Product
()
{
}
public
Integer
getProductId
()
{
return
this
.
productId
;
}
public
void
setProductId
(
Integer
productId
)
{
this
.
productId
=
productId
;
}
public
String
getDescription
()
{
return
this
.
description
;
}
public
void
setDescription
(
String
description
)
{
this
.
description
=
description
;
}
public
BigDecimal
getPrice
()
{
return
this
.
price
;
}
public
void
setPrice
(
BigDecimal
price
)
{
this
.
price
=
price
;
}
public
String
getProductName
()
{
return
this
.
productName
;
}
public
void
setProductName
(
String
productName
)
{
this
.
productName
=
productName
;
}
public
BigDecimal
getVat
()
{
return
this
.
vat
;
}
public
void
setVat
(
BigDecimal
vat
)
{
this
.
vat
=
vat
;
}
}
\ No newline at end of file
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Lista0.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManagerFactory
;
import
javax.persistence.Persistence
;
import
javax.persistence.TypedQuery
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
sklep.model.Product
;
// http://localhost:8080/PC29-HibernateNaSerwerze-1.0/Lista0
@WebServlet
(
"/lista0"
)
public
class
Lista0
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
// W tej wersji obiekty JPA (emf i em) otwieram w sposób ogólny, tak jakby to była zwykła aplikacja.
// Nie zakładam, że jestem na serwerze.
EntityManagerFactory
emf
=
null
;
EntityManager
em
=
null
;
try
{
emf
=
Persistence
.
createEntityManagerFactory
(
"sklep"
);
em
=
emf
.
createEntityManager
();
out
.
println
(
"Mam połączenie. em = "
+
em
);
TypedQuery
<
Product
>
query
=
em
.
createNamedQuery
(
"Product.findAll"
,
Product
.
class
);
List
<
Product
>
products
=
query
.
getResultList
();
out
.
println
(
"Odczytano "
+
products
.
size
()
+
" produktów:"
);
for
(
Product
product
:
products
)
{
out
.
println
(
" * "
+
product
.
getProductName
()
+
" za "
+
product
.
getPrice
());
}
}
catch
(
Exception
e
)
{
out
.
println
(
"Katastrofa "
+
e
);
e
.
printStackTrace
(
out
);
}
finally
{
if
(
em
!=
null
)
em
.
close
();
if
(
emf
!=
null
)
emf
.
close
();
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Lista1.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManagerFactory
;
import
javax.persistence.Persistence
;
import
javax.persistence.TypedQuery
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
sklep.model.Product
;
// Wersja z ręcznym uzyskaniem dostępu do `persistence` - poprzez fabrykę, a nie wstrzykiwanie zależności.
// To jest napisane niemal tak, jak "zwykły program z mainem".
// To serwer zapewnia implementację JPA - my nie dodajemy jej do pom.xml (dodajemy tylko javaee-web-api)
// WildFly użyje Hibernate, a Glassfish użyje Eclipse Link.
// Wersja zadziała także przy konfiguracji połączenia "RESOURCE_LOCAL" z parametrami połączenia podanymi w persistence.xml
@WebServlet
(
"/lista1"
)
public
class
Lista1
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
EntityManagerFactory
emf
=
null
;
EntityManager
em
=
null
;
try
{
emf
=
Persistence
.
createEntityManagerFactory
(
"sklep"
);
em
=
emf
.
createEntityManager
();
TypedQuery
<
Product
>
query
=
em
.
createNamedQuery
(
"Product.findAll"
,
Product
.
class
);
List
<
Product
>
products
=
query
.
getResultList
();
out
.
println
(
"Odczytano "
+
products
.
size
()
+
" rekordów:"
);
for
(
Product
product
:
products
)
{
out
.
println
(
product
.
getProductName
()
+
" "
+
product
.
getPrice
());
}
}
catch
(
Exception
e
)
{
out
.
println
(
"Wyjątek: "
+
e
);
}
finally
{
if
(
em
!=
null
)
em
.
close
();
if
(
emf
!=
null
)
emf
.
close
();
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Lista2.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManagerFactory
;
import
javax.persistence.PersistenceUnit
;
import
javax.persistence.TypedQuery
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
sklep.model.Product
;
// Wersja ze wstrzykiwaniem EntityManagerFactory za pomocą adnotacji @PersistenceUnit.
// Jeśli w aplikacji jest tylko jeden persistence unit, to nazwy można nie podawać, ale ja wolę zawsze podać.
// Ta wersja jest odpowiednia także dla konfiguracji opartej o RESOURCE_LOCAL
@WebServlet
(
"/lista2"
)
public
class
Lista2
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@PersistenceUnit
(
unitName
=
"sklep"
)
private
EntityManagerFactory
emf
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
EntityManager
em
=
null
;
try
{
em
=
emf
.
createEntityManager
();
TypedQuery
<
Product
>
query
=
em
.
createNamedQuery
(
"Product.findAll"
,
Product
.
class
);
List
<
Product
>
products
=
query
.
getResultList
();
out
.
println
(
"Odczytano "
+
products
.
size
()
+
" rekordów:"
);
for
(
Product
product
:
products
)
{
out
.
println
(
product
.
getProductName
()
+
" "
+
product
.
getPrice
());
}
}
catch
(
Exception
e
)
{
out
.
println
(
"Wyjątek: "
+
e
+
"\n"
);
e
.
printStackTrace
(
out
);
}
finally
{
if
(
em
!=
null
)
em
.
close
();
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Lista3.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.TypedQuery
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
sklep.model.Product
;
// Wersja ze wstrzykiwaniem EntityManager (a nie fabryki) za pomocą adnotacji @PersistenceContext.
// Jeśli w aplikacji jest tylko jeden persistence unit, to nazwy można nie podawać, ale ja wolę zawsze podać.
// Ta wersja jest odpowiednia dla konfiguracji opartej o JTA
@WebServlet
(
"/lista3"
)
public
class
Lista3
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@PersistenceContext
(
unitName
=
"sklep"
)
private
EntityManager
em
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
try
{
TypedQuery
<
Product
>
query
=
em
.
createNamedQuery
(
"Product.findAll"
,
Product
.
class
);
List
<
Product
>
products
=
query
.
getResultList
();
out
.
println
(
"Odczytano "
+
products
.
size
()
+
" rekordów:"
);
for
(
Product
product
:
products
)
{
out
.
println
(
product
.
getProductName
()
+
" "
+
product
.
getPrice
());
}
}
catch
(
Exception
e
)
{
out
.
println
(
"Wyjątek: "
+
e
+
"\n"
);
e
.
printStackTrace
(
out
);
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Sql1.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.math.BigDecimal
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
@WebServlet
(
"/sql1"
)
public
class
Sql1
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
try
{
final
String
sql
=
"SELECT * FROM products"
;
try
(
Connection
c
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost/sklep"
,
"kurs"
,
"abc123"
))
{
out
.
println
(
"Connection połączone: "
+
c
);
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
sql
))
{
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
"product_id"
);
String
productName
=
rs
.
getString
(
"product_name"
);
BigDecimal
price
=
rs
.
getBigDecimal
(
"price"
);
String
description
=
rs
.
getString
(
"description"
);
out
.
printf
(
"\n * Produkt nr %d: %s w cenie %s (%s)\n"
,
id
,
productName
,
price
,
description
);
}
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
(
out
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
(
out
);
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Sql2.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.math.BigDecimal
;
import
java.sql.Connection
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
javax.naming.InitialContext
;
import
javax.naming.NamingException
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.sql.DataSource
;
@WebServlet
(
"/sql2"
)
public
class
Sql2
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
try
{
// Połączenie z bazą (jako DataSource) pobieramy z rejestru serwera (technologia JNDI - zasoby zarządzane przez serwer Java EE)
InitialContext
ctx
=
new
InitialContext
();
DataSource
ds
=
(
DataSource
)
ctx
.
lookup
(
"java:/SklepDS"
);
out
.
println
(
"DataSource znaleziony: "
+
ds
);
final
String
sql
=
"SELECT * FROM products"
;
try
(
Connection
c
=
ds
.
getConnection
())
{
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
sql
))
{
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
"product_id"
);
String
productName
=
rs
.
getString
(
"product_name"
);
BigDecimal
price
=
rs
.
getBigDecimal
(
"price"
);
String
description
=
rs
.
getString
(
"description"
);
out
.
printf
(
"\n * Produkt nr %d: %s w cenie %s (%s)\n"
,
id
,
productName
,
price
,
description
);
}
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
(
out
);
}
catch
(
NamingException
e
)
{
e
.
printStackTrace
(
out
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
(
out
);
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Sql3.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.math.BigDecimal
;
import
java.sql.Connection
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
javax.annotation.Resource
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.sql.DataSource
;
@WebServlet
(
"/sql3"
)
public
class
Sql3
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@Resource
(
lookup
=
"java:/SklepDS"
)
private
DataSource
ds
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
try
{
out
.
println
(
"DataSource wstrzyknięty: "
+
ds
);
final
String
sql
=
"SELECT * FROM products"
;
try
(
Connection
c
=
ds
.
getConnection
())
{
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
sql
))
{
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
"product_id"
);
String
productName
=
rs
.
getString
(
"product_name"
);
BigDecimal
price
=
rs
.
getBigDecimal
(
"price"
);
String
description
=
rs
.
getString
(
"description"
);
out
.
printf
(
"\n * Produkt nr %d: %s w cenie %s (%s)\n"
,
id
,
productName
,
price
,
description
);
}
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
(
out
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
(
out
);
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Zmiana2.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.math.BigDecimal
;
import
javax.persistence.EntityManager
;
import
javax.persistence.EntityManagerFactory
;
import
javax.persistence.EntityTransaction
;
import
javax.persistence.PersistenceUnit
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
sklep.model.Product
;
@WebServlet
(
"/zmiana2"
)
public
class
Zmiana2
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@PersistenceUnit
(
unitName
=
"sklep"
)
private
EntityManagerFactory
emf
;
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"utf-8"
);
PrintWriter
out
=
response
.
getWriter
();
if
(
request
.
getParameter
(
"id"
)
==
null
)
{
out
.
println
(
"Trzeba podać id produktu"
);
return
;
}
Integer
id
=
Integer
.
valueOf
(
request
.
getParameter
(
"id"
));
BigDecimal
podwyzka
=
null
;
if
(
request
.
getParameter
(
"podwyzka"
)
!=
null
)
{
podwyzka
=
new
BigDecimal
(
request
.
getParameter
(
"podwyzka"
));
}
EntityManager
em
=
null
;
try
{
em
=
emf
.
createEntityManager
();
EntityTransaction
transaction
=
em
.
getTransaction
();
transaction
.
begin
();
Product
product
=
em
.
find
(
Product
.
class
,
id
);
if
(
product
==
null
)
{
out
.
println
(
"Nie znaleziono produktu o numerze "
+
id
);
return
;
}
out
.
println
(
product
.
getProductName
()
+
" "
+
product
.
getPrice
());
if
(
podwyzka
!=
null
)
{
product
.
setPrice
(
product
.
getPrice
().
add
(
podwyzka
));
}
out
.
println
(
"Po zmianie:"
);
out
.
println
(
product
.
getProductName
()
+
" "
+
product
.
getPrice
());
transaction
.
commit
();
}
catch
(
SecurityException
|
IllegalStateException
e
)
{
throw
new
ServletException
(
"wielka bieda"
,
e
);
}
finally
{
if
(
em
!=
null
)
{
em
.
close
();
}
}
}
}
PC31-HibernateNaSerwerze/src/main/java/sklep/serwlety/Zmiana3.java
0 → 100644
View file @
18bbf10a
package
sklep
.
serwlety
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.math.BigDecimal
;
import
javax.annotation.Resource
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.transaction.UserTransaction
;
import
sklep.model.Product
;
@WebServlet
(
"/zmiana3"
)
public
class
Zmiana3
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@PersistenceContext
(
unitName
=
"sklep"
)
private
EntityManager
em
;
@Resource
private
UserTransaction
transaction
;
// konwencja nazw: utx
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/plain"
);
response
.
setCharacterEncoding
(
"utf-8"
);
PrintWriter
out
=
response
.
getWriter
();
if
(
request
.
getParameter
(
"id"
)
==
null
)
{
out
.
println
(
"Trzeba podać id produktu"
);
return
;
}
Integer
id
=
Integer
.
valueOf
(
request
.
getParameter
(
"id"
));
BigDecimal
podwyzka
=
null
;
if
(
request
.
getParameter
(
"podwyzka"
)
!=
null
)
{
podwyzka
=
new
BigDecimal
(
request
.
getParameter
(
"podwyzka"
));
}
try
{
transaction
.
begin
();
Product
product
=
em
.
find
(
Product
.
class
,
id
);
if
(
product
==
null
)
{
out
.
println
(
"Nie znaleziono produktu o numerze "
+
id
);
return
;
}
out
.
println
(
product
.
getProductName
()
+
" "
+
product
.
getPrice
());
if
(
podwyzka
!=
null
)
{
product
.
setPrice
(
product
.
getPrice
().
add
(
podwyzka
));
}
out
.
println
(
"Po zmianie:"
);
out
.
println
(
product
.
getProductName
()
+
" "
+
product
.
getPrice
());
transaction
.
commit
();
// } catch (SecurityException | IllegalStateException | RollbackException | HeuristicMixedException | HeuristicRollbackException | SystemException | NotSupportedException e) {
}
catch
(
Exception
e
)
{
throw
new
ServletException
(
"wielka bieda"
,
e
);
}
}
}
PC31-HibernateNaSerwerze/src/main/resources/META-INF/persistence.xml
0 → 100644
View file @
18bbf10a
<?xml version="1.0" encoding="UTF-8"?>
<persistence
version=
"2.2"
xmlns=
"http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
>
<persistence-unit
name=
"sklep"
transaction-type=
"JTA"
>
<jta-data-source>
java:/SklepDS
</jta-data-source>
<class>
sklep.model.Customer
</class>
<class>
sklep.model.OrderProduct
</class>
<class>
sklep.model.OrderProductPK
</class>
<class>
sklep.model.Order
</class>
<class>
sklep.model.Product
</class>
<properties>
<property
name=
"hibernate.show_sql"
value=
"true"
/>
<!-- pokazywanie zapytań SQL -->
</properties>
</persistence-unit>
</persistence>
PC31-HibernateNaSerwerze/src/main/webapp/index.html
0 → 100644
View file @
18bbf10a
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"UTF-8"
>
<title>
Hibernate na serwerze
</title>
</head>
<body>
<h1>
Hibernate na serwerze
</h1>
<h2>
Zapytania SQL
</h2>
<ul>
<li><a
href=
"sql1"
>
sql1
</a>
- normalne
<code>
getConnection
</code>
- nie zadziała bez sterownika
</li>
<li><a
href=
"sql2"
>
sql2
</a>
- DataSource za pomocą
<code>
ctx.lookup
</code></li>
<li><a
href=
"sql3"
>
sql3
</a>
- wstrzykiwanie DataSource
</li>
</ul>
<h2>
Zapytania JPA/Hibernate
</h2>
<ul>
<li><a
href=
"lista0"
>
lista0
</a>
- wersja bez konfiguracji serwera, później zmieniona na użycie data source typu resource/local
</li>
<li><a
href=
"lista1"
>
lista1
</a>
- stara wersja odstawowa
</li>
<li><a
href=
"lista2"
>
lista2
</a>
- wersja ze wstrzykiwaniem EntityManagerFactory, działająca dla datasource typu resource/local
</li>
<li><a
href=
"lista3"
>
lista3
</a>
- wersja ze wstrzykiwaniem EntityManager, działająca dla datasource typu JTA (wymaga zmiany konfiguracji)
</li>
</ul>
<h2>
Modyfikacja danych JPA/Hibernate
</h2>
<p>
(podwyżka ceny pralki o 500)
</p>
<ul>
<li><a
href=
"zmiana2?id=1&podwyzka=500"
>
zmiana2
</a>
- wersja dla datasource typu resource/local
</li>
<li><a
href=
"zmiana3?id=1&podwyzka=500"
>
zmiana3
</a>
- wersja dla datasource typu JTA (wymaga zmiany konfiguracji)
</li>
</ul>
</body>
</html>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment