Java tutorial
package com.seavus.library.db; import com.seavus.library.db.entity.Loan; import com.seavus.library.db.entity.Book; import com.seavus.library.db.entity.Magazine; import com.seavus.library.db.entity.Membership; import com.seavus.library.db.entity.Publication; import com.seavus.library.db.entity.Member; import java.sql.Timestamp; import java.util.Calendar; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; /* * 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. */ /** * * @author George */ public class HLibDB implements LibDAO { private HLibDB() { } private static class Singleton { private static final HLibDB INSTANCE = new HLibDB(); } public static HLibDB getInstance() { return Singleton.INSTANCE; } private Configuration configuration; private ServiceRegistry serviceRegistry; private SessionFactory sessionFactory; private HibernateTemplate hibernateTemplate; @Override public void connect() { configuration = new Configuration(); serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); configuration.addAnnotatedClass(Book.class); configuration.addAnnotatedClass(Magazine.class); configuration.addAnnotatedClass(Publication.class); configuration.addAnnotatedClass(Member.class); configuration.addAnnotatedClass(Membership.class); configuration.addAnnotatedClass(Loan.class); sessionFactory = configuration.buildSessionFactory(serviceRegistry); hibernateTemplate = new HibernateTemplate(sessionFactory); } @Override @SuppressWarnings("unchecked") public List<Publication> listPublications(final String publicationType) { return (List<Publication>) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query = session.createQuery("FROM " + publicationType); return query.list(); } }); } @Override public List<Member> listMembers() { return (List<Member>) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { return session.createQuery("FROM LibraryMember").list(); } }); } @Override @SuppressWarnings("unchecked") public Publication getPublication(final long id) { return (Publication) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query = session.createQuery("FROM Publication P WHERE P.id = :P_ID"); query.setParameter("P_ID", id); Object pbl = null; if (!query.list().isEmpty()) pbl = query.list().get(0); return pbl; } }); } @Override @SuppressWarnings("unchecked") public Member getMember(final long id) { return (Member) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query = session.createQuery("FROM LibraryMember M WHERE M.id = :M_ID"); query.setParameter("M_ID", id); Object pbl = null; if (!query.list().isEmpty()) pbl = query.list().get(0); return pbl; } }); } @Override @SuppressWarnings("unchecked") public List<Publication> getPublicationByTitle(final String title) { return (List<Publication>) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query = session.createQuery("FROM Publication P WHERE LOWER(P.title) LIKE :P_TITLE"); query.setParameter("P_TITLE", "%" + title.toLowerCase() + "%"); return query.list(); } }); } @Override @SuppressWarnings("unchecked") public List<Member> getMemberByName(final String firstName, final String lastName) { return (List<Member>) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query = session.createQuery( "FROM LibraryMember M WHERE LOWER(M.firstName) LIKE :F_NAME AND LOWER(M.lastName) LIKE :L_NAME"); query.setParameter("F_NAME", "%" + firstName.toLowerCase() + "%"); query.setParameter("L_NAME", "%" + lastName.toLowerCase() + "%"); return query.list(); } }); } @Override public Loan getOpenLoan(final Publication pbl, final Member mbr) { return (Loan) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query = session .createQuery("FROM Loan WHERE p_id = :P_ID AND m_id = :M_ID AND enddate IS NULL"); query.setParameter("P_ID", pbl.getId()); query.setParameter("M_ID", mbr.getId()); Object openLoan = null; if (!query.list().isEmpty()) openLoan = query.list().get(0); return openLoan; } }); } @Override public void insertBook(final String isbn, final String title) { hibernateTemplate.execute(new ExecuteCallback() { @Override public void execute(Session session) { Book book = new Book(); book.setIsbn(isbn); book.setTitle(title); session.save(book); } }); } @Override public void insertMagazine(final String issn, final String title) { hibernateTemplate.execute(new ExecuteCallback() { @Override public void execute(Session session) { Magazine magazine = new Magazine(); magazine.setIssn(issn); magazine.setTitle(title); session.save(magazine); } }); } @Override public void insertMember(final String firstName, final String lastName, final String eMail) { hibernateTemplate.execute(new ExecuteCallback() { @Override public void execute(Session session) { Member member = new Member(); member.setFirstName(firstName); member.setLastName(lastName); member.setEmail(eMail); Timestamp now = new Timestamp(Calendar.getInstance().getTime().getTime()); member.setMembership(new Membership("Standard", now)); session.save(member); } }); } @Override public void insertLoan(final Publication publication, final Member member) { hibernateTemplate.execute(new ExecuteCallback() { @Override public void execute(Session session) { Loan loan = new Loan(publication, member); loan.setStartDate(new Timestamp(Calendar.getInstance().getTime().getTime())); session.save(loan); } }); } @Override public int updatePublication(final Publication publication) { return (int) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query; if (publication instanceof Book) { query = session.createQuery("UPDATE Book set isbn = :isbn, title = :title WHERE id = :p_id"); query.setParameter("isbn", ((Book) publication).getIsbn()); } else { query = session .createQuery("UPDATE Magazine set issn = :issn, title = :title WHERE id = :p_id"); query.setParameter("issn", ((Magazine) publication).getIssn()); } query.setParameter("p_id", publication.getId()); query.setParameter("title", publication.getTitle()); return query.executeUpdate(); } }); } @Override public int updateMember(final Member member) { return (int) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query; query = session.createQuery( "UPDATE LibraryMember set firstName = :f_name, lastName = :l_name, eMail = :email WHERE id = :m_id"); query.setParameter("f_name", member.getFirstName()); query.setParameter("l_name", member.getLastName()); query.setParameter("email", member.getEmail()); query.setParameter("m_id", member.getId()); return query.executeUpdate(); } }); } @Override public void updateMembership(final Member member) { hibernateTemplate.execute(new ExecuteCallback() { @Override public void execute(Session session) { Query query; query = session.createQuery( "UPDATE Membership set membershipType = :membership, endDate = :endDate WHERE id = :m_id"); query.setParameter("m_id", member.getId()); query.setParameter("membership", member.getMembership().getMembershipType()); query.setParameter("endDate", member.getMembership().getEndDate()); query.executeUpdate(); } }); } @Override public void updateLoan(final Loan loan) { hibernateTemplate.execute(new ExecuteCallback() { @Override public void execute(Session session) { Query query; query = session.createQuery("UPDATE Loan SET endDate = :endDate WHERE id = :l_id"); query.setParameter("l_id", loan.getId()); query.setParameter("endDate", loan.getEndDate()); query.executeUpdate(); } }); } @Override public int deletePublication(final long id) { return (int) hibernateTemplate.read(new ReadCallback() { @Override public Object read(Session session) { Query query = session.createQuery("DELETE FROM Publication WHERE id = :p_id"); query.setParameter("p_id", id); return query.executeUpdate(); } }); } @Override public void deleteMember(final long id) { hibernateTemplate.execute(new ExecuteCallback() { @Override public void execute(Session session) { Query q = session.createQuery("FROM LibraryMember where id = :id "); q.setParameter("id", id); Member stock = (Member) q.list().get(0); session.delete(stock); } }); } }