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