diff --git a/hibernate-project/src/main/java/com/humanbooster/App.java b/hibernate-project/src/main/java/com/humanbooster/App.java index 69f9e42..8aaffed 100644 --- a/hibernate-project/src/main/java/com/humanbooster/App.java +++ b/hibernate-project/src/main/java/com/humanbooster/App.java @@ -41,14 +41,8 @@ public class App { userService.createUser(user); - List
articles = articleService.findArticlesByCriteria("test", 3L); - - articles.forEach(article -> { - System.out.println("\nArticle trouvé :"); - System.out.println("ID: " + article.getId()); - System.out.println("Titre: " + article.getTitle()); - System.out.println("Contenu: " + article.getContent()); - System.out.println("Auteur: " + article.getAuthor().getName()); + articleService.findArticlesByCriteria("test", 3L, 1, 1).forEach(article -> { + System.out.println("\nArticle trouvé :" + article.toString()); } ); } diff --git a/hibernate-project/src/main/java/com/humanbooster/dao/ArticleDao.java b/hibernate-project/src/main/java/com/humanbooster/dao/ArticleDao.java index 72aafb3..c12fe0b 100644 --- a/hibernate-project/src/main/java/com/humanbooster/dao/ArticleDao.java +++ b/hibernate-project/src/main/java/com/humanbooster/dao/ArticleDao.java @@ -3,9 +3,12 @@ package com.humanbooster.dao; import com.humanbooster.model.Article; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import org.hibernate.Session; import org.hibernate.SessionFactory; +import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -37,37 +40,36 @@ public class ArticleDao extends GenericDaoImpl { } } - public List
findByCriteria(String keyword, Long authorId) { - - Optional optKeyword = Optional.ofNullable(keyword); - Optional optAuthorId = Optional.ofNullable(authorId); - - List
articles; - + public List
findByCriteria(String keyword, Long authorId, int page, int size) { try (Session session = sessionFactory.openSession()) { - session.beginTransaction(); CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery
query = cb.createQuery(Article.class); - var root = query.from(Article.class); - + Root
root = query.from(Article.class); query.select(root); - optKeyword.ifPresent(s -> query.where( - cb.like( - cb.lower( - root.get("title")), "%" + s.toLowerCase() + "%") - )); + List predicates = new ArrayList<>(); - optAuthorId.ifPresent(l -> query.where( - cb.equal( - root.get("author"), l) + if (keyword != null && !keyword.isEmpty()) { + predicates.add( + cb.like(root.get("title"), "%" + keyword + "%") + ); + } - )); + if (authorId != null) { + predicates.add( + cb.equal(root.get("author").get("id"), authorId) + ); + } - articles = session.createQuery(query).getResultList(); + query.where(predicates.toArray(Predicate[]::new)); + query.orderBy(cb.asc(root.get("title"))); + + return session.createQuery(query) + .setFirstResult(page * size) + .setMaxResults(size) + .getResultList(); } - return articles; } } diff --git a/hibernate-project/src/main/java/com/humanbooster/model/Article.java b/hibernate-project/src/main/java/com/humanbooster/model/Article.java index 3342db7..0cd0da3 100644 --- a/hibernate-project/src/main/java/com/humanbooster/model/Article.java +++ b/hibernate-project/src/main/java/com/humanbooster/model/Article.java @@ -58,4 +58,16 @@ public class Article { public void setAuthor(User author) { this.author = author; } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + + sb.append("Article ID: ").append(id).append("\n"); + sb.append("Title: ").append(title).append("\n"); + sb.append("Content: ").append(content).append("\n"); + sb.append("Author: ").append(author != null ? author.getName() : "Unknown").append("\n"); + + return sb.toString(); + } } diff --git a/hibernate-project/src/main/java/com/humanbooster/service/ArticleService.java b/hibernate-project/src/main/java/com/humanbooster/service/ArticleService.java index 3fbbedb..8cf7df7 100644 --- a/hibernate-project/src/main/java/com/humanbooster/service/ArticleService.java +++ b/hibernate-project/src/main/java/com/humanbooster/service/ArticleService.java @@ -4,7 +4,6 @@ import com.humanbooster.dao.ArticleDao; import com.humanbooster.model.Article; import java.util.List; -import java.util.Optional; public class ArticleService { @@ -42,7 +41,7 @@ public class ArticleService { return articleDao.findByTitle(title); } - public List
findArticlesByCriteria(String keyword, Long authorId) { - return articleDao.findByCriteria(keyword, authorId); + public List
findArticlesByCriteria(String keyword, Long authorId, int page, int size) { + return articleDao.findByCriteria(keyword, authorId, page, size); } }