CRUD Operations using JPA
March 10, 2014 Leave a comment
I will show how to perform four basic functions, create, read, update and delete (CRUD) on relational database application by using JPA in this post.
I only include two programs in the following. Full source codes can be cloned from https://github.com/henry416/jpatest.
1) Student.java: to define a new entity class;
2) StudentTest.java: to perform CRUD operations;
1. Entity Class: Student.java
package henry416.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Student {
@Id
private int id;
private String name;
private double gpa;
public Student() {}
public Student(int id) {
this.id = id;
}
public Student(int id, String name, double gpa) {
this.id = id;
this.name = name;
this.gpa = gpa;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getGpa() {
return gpa;
}
public void setGpa(double gpa) {
this.gpa = gpa;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", gpa="
+ gpa + "]";
}
}
2. CRUD Operations: StudentTest.java
package henry416.jpa;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import henry416.domain.Student;
public class StudentTest {
private EntityManager manager;
public StudentTest(EntityManager manager) {
this.manager = manager;
}
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager manager = factory.createEntityManager();
StudentTest test = new StudentTest(manager);
EntityTransaction tx = manager.getTransaction();
System.out.println("1. create student records");
tx.begin();
try {
test.createStudents();
} catch (Exception e) {
e.printStackTrace();
}
tx.commit();
System.out.println("2. read student records");
test.readStudents();
System.out.println("3. update a student record");
tx.begin();
try {
test.updateStudent();
} catch (Exception e) {
e.printStackTrace();
}
tx.commit();
System.out.println("4. delete a student record");
tx.begin();
try {
test.deleteStudent();
} catch (Exception e) {
e.printStackTrace();
}
tx.commit();
System.out.println("5. delete all student records");
tx.begin();
try {
test.deleteStudents();
} catch (Exception e) {
e.printStackTrace();
}
tx.commit();
System.out.println("=> done");
}
private void createStudents() {
// insert a few records
manager.persist(new Student(1,"Jack Jackson",3.28));
manager.persist(new Student(2,"Tom Thomson",3.56));
manager.persist(new Student(3,"Dave Davison",3.65));
manager.persist(new Student(4,"Neil Nelson",3.56));
manager.persist(new Student(5,"Mark Markson",3.78));
}
private void readStudents() {
List<Student> resultList = manager.createQuery("Select s From Student s order by s.id", Student.class).getResultList();
System.out.println("num of students:" + resultList.size());
for (Student next : resultList) {
System.out.println("=> " + next);
}
}
private void updateStudent() {
// update a student record
Student stu = manager.find(Student.class, 2);
if (stu != null) {
System.out.println("from => "+stu);
stu.setName("Thomas Thomson");
stu.setGpa(3.99);
System.out.println("to => "+stu);
}
}
private void deleteStudent() {
// delete ONE record
Student stu = manager.find(Student.class, 2);
System.out.println("remove=> "+stu);
if (stu != null) {
manager.remove(stu);
}
}
private void deleteStudents() {
// delete all records
int deletedCount = manager.createQuery("DELETE FROM Student").executeUpdate();
System.out.println("total num of records removed => "+deletedCount);
}
}
3. Result
The following is the execution results:
1. create student records 2. read student records num of students:5 => Student [id=1, name=Jack Jackson, gpa=3.28] => Student [id=2, name=Tom Thomson, gpa=3.56] => Student [id=3, name=Dave Davison, gpa=3.65] => Student [id=4, name=Neil Nelson, gpa=3.56] => Student [id=5, name=Mark Markson, gpa=3.78] 3. update a student record from => Student [id=2, name=Tom Thomson, gpa=3.56] to => Student [id=2, name=Thomas Thomson, gpa=3.99] 4. delete a student record remove=> Student [id=2, name=Thomas Thomson, gpa=3.99] 5. delete all student records total num of records removed => 4 => done