package com.querydsl.example.dao; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.QBean; import com.querydsl.example.dto.Supplier; import com.querydsl.sql.SQLQueryFactory; import org.springframework.transaction.annotation.Transactional; import javax.inject.Inject; import java.util.List; import static com.querydsl.core.types.Projections.bean; import static com.querydsl.example.sql.QSupplier.supplier; @Transactional public class SupplierDaoImpl implements SupplierDao { @Inject SQLQueryFactory queryFactory; final QBean<Supplier> supplierBean = bean(Supplier.class, supplier.all()); @Override public Supplier findById(long id) { List<Supplier> suppliers = findAll(supplier.id.eq(id)); return suppliers.isEmpty() ? null : suppliers.get(0); } @Override public List<Supplier> findAll(Predicate... where) { return queryFactory.select(supplierBean) .from(supplier) .where(where) .fetch(); } @Override public Supplier save(Supplier s) { if (s.getId() == null) { Long id = queryFactory.insert(supplier) .set(supplier.code, s.getCode()) .set(supplier.name, s.getName()) .executeWithKey(supplier.id); s.setId(id); } else { queryFactory.update(supplier) .set(supplier.code, s.getCode()) .set(supplier.name, s.getName()) .where(supplier.id.eq(s.getId())) .execute(); } return s; } @Override public long count() { return queryFactory.from(supplier).fetchCount(); } @Override public void delete(Supplier s) { queryFactory.delete(supplier) .where(supplier.id.eq(s.getId())) .execute(); } }