CodeGym/Java Course/All lectures for MR purposes/рдЖрд│рд╢реА рд▓реЛрдбрд┐рдВрдЧ

рдЖрд│рд╢реА рд▓реЛрдбрд┐рдВрдЧ

рдЙрдкрд▓рдмреНрдз

1.1 рд╕рдорд╕реНрдпреЗрдЪреА рдкрд╛рд░реНрд╢реНрд╡рднреВрдореА

рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдЦрд░реНтАНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рдо рд╕реБрд░реВ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ "рдЕрдХрд╛рд▓реА рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рд╣реЗ рд╕рд░реНрд╡ рд╡рд╛рдИрдЯрд╛рдЪреЗ рдореВрд│ рдЖрд╣реЗ" рд╣реЗ рд╡рд╛рдХреНрдп рд▓рдЧреЗрдЪ рд▓рдХреНрд╖рд╛рдд рдпреЗрдИрд▓. рдлрдХреНрдд рдЖрддрд╛ рддреВ рддрд┐рд▓рд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрджреНрдзрддреАрдиреЗ рдЖрдард╡рддреЗрд╕. рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдирд╛, рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдЖрд╣реЗ. рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдбрд┐рдЭрд╛рдИрди рд╕реНрдЯреЗрдЬрд╡рд░ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╣рд╛рдпрдмрд░рдиреЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдпреАрд╕реНрдХрд░ рдмрдирд╡рддреЗ. рдлрдХреНрдд рдпреЛрдЧреНрдп рд░реАрддреАрдиреЗ рднрд╛рд╖реНрдп рдХрд░реВрди рддреБрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА рд▓рд╣рд╛рди рд╡рд╕реНрддреВ рд╕рд╣рдЬ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ @OneToManyрдЖрдгрд┐ @ManyToMany. рдЙрджрд╛рд╣рд░рдг:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @OneToMany(cascade = CascadeType.ALL)
   @JoinColumn(name = "user_id")
   public List<Comment> comments;
}

рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдорд┐рд│рд╡рдгреЗ рдХрд┐рддреА рд╕реЛрдкреЗ рдЖрд╣реЗ:

User user = session.get(User.class, 1);
List<Comment> comments = user.getComments();

рдЖрдгрд┐ рддреБрдореНрд╣реА рдореЛрдареНрдпрд╛ рд╕рд░рдкреНрд░рд╛рдИрдЬрд╕рд╛рдареА рд╕рд╣рднрд╛рдЧреА рд╡реНрд╣рд╛рд▓. рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреЗрдХ рд╣рдЬрд╛рд░ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЖрд╣реЗрдд. рддреБрдореНрд╣реА рдЕрд╕рд╛ рдХреЛрдб рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рд╕, рд╣рд╛рдпрдмрд░рдиреЗрдЯ рдЕрд░реНрдерд╛рддрдЪ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд▓реЛрдб рдХрд░реЗрд▓. рдкрдг рддреЗ рдЦреВрдк рд╣рд│реВ рдЕрд╕реЗрд▓, рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЦреВрдк рдореЗрдорд░реА рдШреЗрддреАрд▓ рдЗрддреНрдпрд╛рджреА.

рдореНрд╣рдгреВрдирдЪ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд╕рдВ рд▓рд┐рд╣рд┐рддрд╛ рдпреЗрдд рдирд╛рд╣реА! рд╕рд┐рджреНрдзрд╛рдВрддрддрдГ, рд╣реЛрдп, рдкрд░рдВрддреБ рд╕рд░рд╛рд╡ рдордзреНрдпреЗ, рдирд╛рд╣реА.

1.2 рд╕рдВрдХрд▓рдирд╛рд╕рд╣ рдЧреЛрд╖реНрдЯреА рдЦрд░рд╛рдм рдХрд░рдгреЗ

рд╕рдорд╕реНрдпрд╛ рдЖрдгрдЦреА рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ. рд╕рд░реНрд╡ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╕рд╣рд╕рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рддреЗ. рдЬрд░реА рдЖрдкрдг рддреЗ рдХреНрд▓рд╛рдпрдВрдЯрд╡рд░ рдХреБрдареЗрддрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗ рддрд░реАрд╣реА, рдЖрдкрдг рддреЗ рднрд╛рдЧ - рдкреГрд╖реНрдард╛рдВрдордзреНрдпреЗ рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреЗрддрд╛.

рдореНрд╣рдгреВрди рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:

public class CommentsManager {
    private static final PAGE_SIZE = 50;

    public List<Comment> getCommentsPage(int userId, int pageIndex){
     	User user = session.get(User.class, userId);
     	List<Comment> comments = user.getComments();
     	return comments.subList(pageIndex * PAGE_SIZE, PAGE_SIZE);
    }

   public int getCommentsPageCount(int userId)   {
     	User user = session.get(User.class, userId);
     	List<Comment> comments = user.getComments();
     	return Math.ceil(  comments.size()/PAGE_SIZE);
   }

}

рдкрд╣рд┐рд▓реА рдкрджреНрдзрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреЗ рдлрдХреНрдд рдПрдХ рдкреГрд╖реНрда рджреЗрддреЗ - 50 рддреБрдХрдбреЗ. рджреБрд╕рд░реА рдкрджреНрдзрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреНрдпрд╛ рдкреГрд╖реНрдард╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдкрд░рдд рдХрд░рддреЗ. рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдЖрд╣реЗ. рдлрдХреНрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреВрди рд╕рд░реНрд╡ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрд▓реНрдпрд╛!

1.3 рдмреЛрдЧрджреНрдпрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдкреНрд░рдХрд╛рд╢

рдореНрд╣рдгреВрди, рдХреЛрдгреАрд╣реА рдЖрдордЪреЗ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ рдмрд╛рд▓ рд╕рдВрдЧреНрд░рд╣ рд╡рд╛рдкрд░рдд рдирд╛рд╣реА. рдирд╛рд╣реА, рдЕрд░реНрдерд╛рддрдЪ рддреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд, рдкрд░рдВрддреБ рдХреЗрд╡рд│ HQL рдХреНрд╡реЗрд░реАрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдпрд╛рд╕рд╛рд░рдЦреЗ:

public class CommentsManager {
      private static final PAGE_SIZE = 50;

       public List<Comment> getCommentsPage(int userId, int pageIndex){
           	String hql = "select comments from User where id = :id";
           	Query<Comment> query = session.createQuery( hql, Comment.class);
           	query.setParametr("id", userId);
           	query.setOffset(pageIndex * PAGE_SIZE);
           	query.setLimit(PAGE_SIZE);
           	return query.list();
      }

      public int getCommentsPageCount(int userId)   {
           	String hql = "select count(comments) from User where id = :id";
           	Query<Integer> query = session.createQuery( hql, Integer.class);
           	query.setParametr("id", userId);
           	return Math.ceil(query.singleResult()/PAGE_SIZE);
     }

}

рдЪрд╛рдВрдЧрд▓реА рдмрд╛рддрдореА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдкрджреНрдзрддреА рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддреЛ рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рд╡рд╛рдИрдЯ рдмрд╛рддрдореА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЖрдордЪреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╕реЛрдкреЗ рдирд╛рд╣реА.

рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд