In this tutorials we are going to see how to implement a basic hibernate application with xml based configuration.
Hibernate Example:
Technologies :
- Hibernate-core 5.0
- Mysql 5.5.43
- NetBeans 8.o
Setup Database:
mysql> create database onlinetutorialspoint;
mysql> use onlinetutorialspoint;
Create a student table in onlinetutorialspoint databse.
CREATE TABLE `student` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL DEFAULT NULL,
`rollnumber` INT(10) NULL DEFAULT NULL,
`gender` TINYINT(4) NULL DEFAULT NULL,
`class` VARCHAR(50) NULL DEFAULT NULL,
`lastupdated` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
Project Structure:
Project Dependencies:
pom.xml
pom.xml
<project>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.0.CR1</version>
</dependency> <!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.8.Final</version>
</dependency>
<dependency>
<groupId>unknown.binary</groupId>
<artifactId>mysql-connector-java-5.1.23-bin</artifactId>
<version>SNAPSHOT</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
Create Hibernate Configuration:
Create HibernateConnector.java, it is responsible to generate singleton session factory objects.
HibernateConnector.java
package com.onlinetutorialspoint.config;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateConnector {
private static HibernateConnector me;
private Configuration cfg;
private SessionFactory sessionFactory;
private HibernateConnector() throws HibernateException {
// build the config
cfg = new Configuration();
/**
* Connection Information..
*/
cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/onlinetutorialspoint");
cfg.setProperty("hibernate.connection.username", "root");
cfg.setProperty("hibernate.connection.password", "123456");
cfg.setProperty("hibernate.show_sql", "true");
/**
* Mapping Resources..
*/
cfg.addResource("com/onlinetutorialspoint/pojo/Student.hbm.xml");
sessionFactory = cfg.buildSessionFactory();
}
public static synchronized HibernateConnector getInstance() throws HibernateException {
if (me == null) {
me = new HibernateConnector();
}
return me;
}
public Session getSession() throws HibernateException {
Session session = sessionFactory.openSession();
if (!session.isConnected()) {
this.reconnect();
}
return session;
}
private void reconnect() throws HibernateException {
this.sessionFactory = cfg.buildSessionFactory();
}
}
Create Pojo class with respect the student table.
Student.java
Student.java
package com.onlinetutorialspoint.pojo;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "student", catalog = "onlinetutorialspoint"
)
public class Student implements java.io.Serializable {
private Integer id;
private String name;
private Integer rollnumber;
private Byte gender;
private String class_;
private Date lastupdated;
public Student() {
}
public Student(String name, Integer rollnumber, Byte gender, String class_, Date lastupdated) {
this.name = name;
this.rollnumber = rollnumber;
this.gender = gender;
this.class_ = class_;
this.lastupdated = lastupdated;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name", length = 50)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "rollnumber")
public Integer getRollnumber() {
return this.rollnumber;
}
public void setRollnumber(Integer rollnumber) {
this.rollnumber = rollnumber;
}
@Column(name = "gender")
public Byte getGender() {
return this.gender;
}
public void setGender(Byte gender) {
this.gender = gender;
}
@Column(name = "class", length = 50)
public String getClass_() {
return this.class_;
}
public void setClass_(String class_) {
this.class_ = class_;
}
}
Create Hibernate Mapping File:
Create hbm file with respect to student.java and student table.
Student.hbm.xml
Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="com.onlinetutorialspoint.pojo.Student" table="student" catalog="onlinetutorialspoint">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="50" />
</property>
<property name="rollnumber" type="java.lang.Integer">
<column name="rollnumber" />
</property>
<property name="gender" type="java.lang.Byte">
<column name="gender" />
</property>
<property name="class_" type="string">
<column name="class" length="50" />
</property>
</class>
</hibernate-mapping>
Create Data Access Object
Create StudentDAO.java to access the Student details.
StudentDAO.java
package com.onlinetutorialspoint.dao;
import com.onlinetutorialspoint.config.HibernateConnector;
import com.onlinetutorialspoint.pojo.Student;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class StudentDAO {
public List<Student> listStudent() {
Session session = null;
try {
session = HibernateConnector.getInstance().getSession();
Query query = session.createQuery("from Student s");
List queryList = query.list();
if (queryList != null && queryList.isEmpty()) {
return null;
} else {
System.out.println("list " + queryList);
return (List<Student>) queryList;
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
session.close();
}
}
public Student findStudentById(int id) {
Session session = null;
try {
session = HibernateConnector.getInstance().getSession();
Query query = session.createQuery("from Student s where s.id = :id");
query.setParameter("id", id);
List queryList = query.list();
if (queryList != null && queryList.isEmpty()) {
return null;
} else {
return (Student) queryList.get(0);
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
session.close();
}
}
public void updateStudent(Student student) {
Session session = null;
try {
session = HibernateConnector.getInstance().getSession();
session.saveOrUpdate(student);
session.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
public Student addStudent(Student student) {
Session session = null;
Transaction transaction = null;
try {
session = HibernateConnector.getInstance().getSession();
transaction = session.beginTransaction();
session.save(student);
transaction.commit();
return student;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
session.close();
}
}
public void deleteStudent(int id) {
Session session = null;
try {
session = HibernateConnector.getInstance().getSession();
Transaction beginTransaction = session.beginTransaction();
Query createQuery = session.createQuery("delete from Student s where s.id =:id");
createQuery.setParameter("id", id);
createQuery.executeUpdate();
beginTransaction.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
}
Hibernate Client
HibernateClient.java
package com.onlinetutorialspoint.service;
import com.onlinetutorialspoint.dao.StudentDAO;
import com.onlinetutorialspoint.pojo.Student;
import java.util.List;
public class DbOperations {
StudentDAO studentDAO = new StudentDAO();
public static void main(String[] args) {
DbOperations dbOperations = new DbOperations();
Student createStudent = dbOperations.createStudent();
List<Student> studentList = dbOperations.getStudentList();
if (studentList != null) {
for (Student student : studentList) {
System.out.println("Student Name : " + student.getName());
}
}
dbOperations.updateStudent(createStudent.getId());
Student student = dbOperations.getStudent(createStudent.getId());
if (student != null) {
System.out.println("Student Details After Updation : " + student.getName());
}
dbOperations.deleteStudent(createStudent.getId());
}
public Student createStudent() {
Student s = new Student();
s.setGender(new Byte("1"));
s.setName("John");
s.setClass_("12");
s.setRollnumber(007);
studentDAO.addStudent(s);
return s;
}
public void updateStudent(Integer id) {
Student student = studentDAO.findStudentById(id);
student.setName("online tutorials point");
studentDAO.updateStudent(student);
System.out.println("Student Updated Success");
}
public void deleteStudent(Integer id) {
studentDAO.deleteStudent(id);
System.out.println("Student Deleted Success");
}
public List<Student> getStudentList() {
return studentDAO.listStudent();
}
public Student getStudent(Integer id) {
return studentDAO.findStudentById(id);
}
}
Output :
Terminal
Student Name : John
Student Updated Success
Student Details After Updation : online tutorials point
Student Deleted Success
Happy Learning 🙂