com.bookshop.dao.BookDAOImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.bookshop.dao.BookDAOImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bookshop.dao;

import com.bookshop.domain.Book;
import com.bookshop.utility.HibernateUtil;
import java.util.ArrayList;
import java.util.List;
import javassist.compiler.TokenId;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author giuliano
 */
public class BookDAOImpl implements BookDAO {
    Session session = HibernateUtil.getSession();
    Transaction transaction;

    @Override
    public void saveBook(Book book) {
        try {
            transaction = session.beginTransaction();
            session.merge(book);
            transaction.commit();
        } catch (Exception e) {
            if (book != null) {
                transaction.rollback();
            }
            // throw e;
        }
    }

    @Override
    public void deleteBook(Book book) {
        transaction = session.beginTransaction();
        session.delete(book);
        transaction.commit();
    }

    @Override
    public List<Book> listBooks() {
        return session.createQuery("from Books").list();
    }

    @Override
    public List<Book> listBooks(String bookNameCriteria, String isbnCriteria) {
        if (bookNameCriteria == null && isbnCriteria == null) {
            return new ArrayList<Book>();
        }

        /*
        Query query;
            
        if (isbnCriteria == null) 
        {
        query = session.createQuery("FROM Books WHERE BookName LIKE '%" + bookNameCriteria + "%'");
        } 
        else if(bookNameCriteria == null) 
        {
        query = session.createQuery("FROM Books WHERE ISBN LIKE '%" + isbnCriteria + "%'");
        }
        else // if(bookNameCriteria != null && isbnCriteria != null) 
        {
        query = session.createQuery("FROM Books WHERE ISBN LIKE '%" + isbnCriteria + "%' AND BookName LIKE '%" + bookNameCriteria + "%'");
        }
            
        return query.list();
        */

        Criteria criteria = session.createCriteria(Book.class);

        if (isbnCriteria == null) {
            Criterion bookNameCriterion = Restrictions.like("bookName", bookNameCriteria, MatchMode.ANYWHERE);
            criteria.add(bookNameCriterion);
        } else if (bookNameCriteria == null) {
            Criterion isbnCriterion = Restrictions.like("ISBN", isbnCriteria, MatchMode.ANYWHERE);
            criteria.add(isbnCriterion);
        } else // if(bookNameCriteria != null && isbnCriteria != null) 
        {
            Criterion bookNameCriterion = Restrictions.like("bookName", bookNameCriteria, MatchMode.ANYWHERE);
            Criterion isbnCriterion = Restrictions.like("ISBN", isbnCriteria, MatchMode.ANYWHERE);
            LogicalExpression orExp = Restrictions.and(bookNameCriterion, isbnCriterion);
            criteria.add(orExp);
        }

        return criteria.list();
    }

    @Override
    public List<Book> listBooks(String searchCriteria) {
        if (searchCriteria == null) {
            return new ArrayList<Book>();
        }

        Criteria criteria = session.createCriteria(Book.class);

        Criterion bookNameCriterion = Restrictions.like("bookName", searchCriteria, MatchMode.ANYWHERE);
        Criterion isbnCriterion = Restrictions.like("ISBN", searchCriteria, MatchMode.ANYWHERE);
        Criterion editionCriterion = Restrictions.like("edition", searchCriteria, MatchMode.ANYWHERE);
        // Criterion yearCriterion = Restrictions.eq("year", searchCriteria);
        Criterion synopsisCriterion = Restrictions.like("synopsis", searchCriteria, MatchMode.ANYWHERE);
        Criterion aboutAuthorsCriterion = Restrictions.like("aboutAuthors", searchCriteria, MatchMode.ANYWHERE);
        Criterion topicsCoveredCriterion = Restrictions.like("topicsCovered", searchCriteria, MatchMode.ANYWHERE);
        Criterion contentsCDROMCriterion = Restrictions.like("contentsCDROM", searchCriteria, MatchMode.ANYWHERE);
        // Criterion costCriterion = Restrictions.like("cost", searchCriteria, MatchMode.ANYWHERE);
        Criterion firstAuthorCriterion = Restrictions.like("firstAuthor", searchCriteria, MatchMode.ANYWHERE);
        Criterion secondAuthorCriterion = Restrictions.like("secondAuthor", searchCriteria, MatchMode.ANYWHERE);
        Criterion thirdAuthorCriterion = Restrictions.like("thirdAuthor", searchCriteria, MatchMode.ANYWHERE);
        Criterion fourthAuthorCriterion = Restrictions.like("fourthAuthor", searchCriteria, MatchMode.ANYWHERE);

        criteria.add(Restrictions.disjunction().add(bookNameCriterion).add(isbnCriterion).add(editionCriterion)
                .add(synopsisCriterion).add(aboutAuthorsCriterion).add(topicsCoveredCriterion)
                .add(contentsCDROMCriterion).add(firstAuthorCriterion).add(secondAuthorCriterion)
                .add(thirdAuthorCriterion).add(fourthAuthorCriterion));

        return criteria.list();
    }

    @Override
    public Book listBookByBookNo(Integer bookNo) {
        return (Book) session.load(Book.class, bookNo);
    }
}