Skip to content

Commit

Permalink
Add querydsl mistake
Browse files Browse the repository at this point in the history
  • Loading branch information
KangWooJin committed Jul 5, 2020
1 parent f31ca4c commit facf34c
Show file tree
Hide file tree
Showing 8 changed files with 270 additions and 67 deletions.
133 changes: 77 additions & 56 deletions .idea/workspace.xml

Large diffs are not rendered by default.

Expand Up @@ -9,8 +9,6 @@
import javax.persistence.Id;
import javax.persistence.OneToMany;

import com.fasterxml.jackson.annotation.JsonBackReference;

import lombok.Getter;
import lombok.Setter;

Expand All @@ -27,6 +25,5 @@ public class Campaign {
private Long amount;

@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "campaign")
@JsonBackReference
private List<Event> events = new ArrayList<>();
}
@@ -0,0 +1,15 @@
package kangwoojin.github.io.querydsl.event.model;

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class CampaignDto {
private Long campaignId;
private String campaignName;
private Long amountSum;
private Long eventAmountSum;
}
Expand Up @@ -6,8 +6,6 @@
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import com.fasterxml.jackson.annotation.JsonManagedReference;

import lombok.Getter;
import lombok.Setter;

Expand All @@ -24,6 +22,5 @@ public class Event {

@ManyToOne
@JoinColumn(name = "campaign_id")
@JsonManagedReference
private Campaign campaign;
}
@@ -1,8 +1,19 @@
package kangwoojin.github.io.querydsl.event.repository;

import java.util.List;

import com.querydsl.core.Tuple;

import kangwoojin.github.io.querydsl.event.model.Campaign;
import kangwoojin.github.io.querydsl.event.model.CampaignDto;

public interface CampaignCustomRepository {

Campaign findByName(String name);

List<CampaignDto> getAmountSum(Long eventId);

Tuple selectUseQModelFields(Long id);

Tuple selectUseQModelOnly(Long id);
}
@@ -1,10 +1,22 @@
package kangwoojin.github.io.querydsl.event.repository;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;

import com.querydsl.core.Tuple;

import kangwoojin.github.io.querydsl.event.model.Campaign;
import kangwoojin.github.io.querydsl.event.model.CampaignDto;
import kangwoojin.github.io.querydsl.event.model.QCampaign;
import kangwoojin.github.io.querydsl.event.model.QEvent;
import lombok.extern.slf4j.Slf4j;

public class CampaignCustomRepositoryImpl extends QuerydslCustomRepositorySupport implements CampaignCustomRepository {
@Slf4j
public class CampaignCustomRepositoryImpl extends QuerydslRepositorySupport implements CampaignCustomRepository {
private static final QCampaign qCampaign = QCampaign.campaign;
private static final QEvent qEvent = QEvent.event;

public CampaignCustomRepositoryImpl() {
super(Campaign.class);
Expand All @@ -18,8 +30,38 @@ public Campaign findByName(String name) {
.fetchOne();
}

// @Override
// public Campaign findByName(String name) {
// return selectFrom(qCampaign).where(qCampaign.name.eq(name)).fetchOne();
// }
@Override
public List<CampaignDto> getAmountSum(Long eventId) {
return from(qCampaign)
.select(qCampaign.id, qCampaign.name, qCampaign.amount.sum(), qEvent.amount.sum())
.distinct()
.leftJoin(qCampaign.events, qEvent).on(qEvent.id.eq(eventId))
.groupBy(qCampaign.name)
.fetch()
.stream()
.peek(tuple -> log.info("tuple {}", tuple))
.map(tuple -> new CampaignDto().setCampaignId(tuple.get(qCampaign.id))
.setCampaignName(tuple.get(qCampaign.name))
.setAmountSum(tuple.get(qCampaign.amount.sum()))
.setEventAmountSum(tuple.get(qEvent.amount.sum())))
.collect(Collectors.toList());

}

@Override
public Tuple selectUseQModelFields(Long id) {
return from(qCampaign)
.select(qCampaign.id, qCampaign.name, qCampaign.amount)
.where(qCampaign.id.eq(id))
.fetchOne();
}

@Override
public Tuple selectUseQModelOnly(Long id) {
return from(qCampaign)
.select(qCampaign, qCampaign.amount.add(1L))
.where(qCampaign.id.eq(id))
.fetchOne();
}

}
@@ -0,0 +1,53 @@
package kangwoojin.github.io.querydsl;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.TestConstructor;
import org.springframework.test.context.TestConstructor.AutowireMode;

import kangwoojin.github.io.querydsl.event.model.Campaign;
import kangwoojin.github.io.querydsl.event.model.CampaignDto;
import kangwoojin.github.io.querydsl.event.model.Event;
import kangwoojin.github.io.querydsl.event.repository.CampaignRepository;
import lombok.RequiredArgsConstructor;

@DataJpaTest
@TestConstructor(autowireMode = AutowireMode.ALL)
@RequiredArgsConstructor
class CampaignGroupByTest {
private final CampaignRepository campaignRepository;
private final TestEntityManager testEntityManager;

@Test
void groupByLeftJoinIsEmptyThenAggregationValueIsNullTest() {
Campaign campaign = new Campaign();
long campaignAmount = 5L;
String campaignName = "test";
campaign.setAmount(campaignAmount);
campaign.setName(campaignName);
testEntityManager.persist(campaign);
testEntityManager.flush();
testEntityManager.clear();

List<CampaignDto> actual = campaignRepository.getAmountSum(0L);

assertThat(actual).isNotEmpty();
assertThat(actual).hasSize(1);
assertThat(actual.get(0).getCampaignName()).isEqualTo(campaignName);
assertThat(actual.get(0).getAmountSum()).isEqualTo(campaignAmount);
assertThat(actual.get(0).getEventAmountSum()).isNull();
}

private Event getEvent(String evnet, long amount, Campaign campaign) {
Event event = new Event();
event.setName(evnet);
event.setAmount(amount);
event.setCampaign(campaign);
return event;
}
}
@@ -0,0 +1,67 @@
package kangwoojin.github.io.querydsl;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.TestConstructor;
import org.springframework.test.context.TestConstructor.AutowireMode;

import com.querydsl.core.Tuple;

import kangwoojin.github.io.querydsl.event.model.Campaign;
import kangwoojin.github.io.querydsl.event.model.QCampaign;
import kangwoojin.github.io.querydsl.event.repository.CampaignRepository;
import lombok.RequiredArgsConstructor;

@DataJpaTest
@TestConstructor(autowireMode = AutowireMode.ALL)
@RequiredArgsConstructor
class QuerydslSelectTest {
private static final QCampaign qCampaign = QCampaign.campaign;
private final CampaignRepository campaignRepository;
private final TestEntityManager testEntityManager;

@Test
void selectUseQModelFields() {
long campaignAmount = 5L;
Campaign campaign = new Campaign();
campaign.setAmount(campaignAmount);
String campaignName = "test";
campaign.setName(campaignName);

Campaign saved = testEntityManager.persist(campaign);
testEntityManager.flush();
testEntityManager.clear();

Tuple tuple = campaignRepository.selectUseQModelFields(saved.getId());

assertThat(tuple.get(qCampaign.id)).isEqualTo(saved.getId());
assertThat(tuple.get(qCampaign.name)).isEqualTo(saved.getName());
assertThat(tuple.get(qCampaign.amount)).isEqualTo(saved.getAmount());
}

@Test
void selectUseQModelOnly() {
long campaignAmount = 5L;
Campaign campaign = new Campaign();
campaign.setAmount(campaignAmount);
String campaignName = "test";
campaign.setName(campaignName);

Campaign saved = testEntityManager.persist(campaign);
testEntityManager.flush();
testEntityManager.clear();

Tuple tuple = campaignRepository.selectUseQModelOnly(saved.getId());

assertThat(tuple.get(qCampaign.id)).isNull();
assertThat(tuple.get(qCampaign.name)).isNull();
assertThat(tuple.get(qCampaign.amount)).isNull();
assertThat(tuple.get(qCampaign).getId()).isEqualTo(saved.getId());
assertThat(tuple.get(qCampaign).getName()).isEqualTo(saved.getName());
assertThat(tuple.get(qCampaign).getAmount()).isEqualTo(saved.getAmount());
assertThat(tuple.get(qCampaign.amount.add(1L))).isEqualTo(saved.getAmount() + 1);
}
}

0 comments on commit facf34c

Please sign in to comment.