QueryDSL基本操作demo

1、装配实例化JPAQueryFactory

private final BaseDao dao;
private final JPAQueryFactory factory;
private final QUser qUser;
private final QFile qFile;

@Autowired
public UserServiceImpl(BaseDao dao) {
	this.factory = new JPAQueryFactory(dao.getEntityManager());
	this.dao = dao;
	this.qFile = QFile.file;
	this.qUser = QUser.user;
}

2、单表简单查询

User user = factory
		.from(qUser)
		.select(
				Projections.bean(
						User.class,
						qUser.username
				)
		)
		.where(qUser.id.eq("8f98b857fa954cfb986b88a2692e9d81"))
		.where(qUser.tel.eq("4646464"))
		.fetchOne();

3、单表分页查询

JPAQuery listQuery = factory
		//tel字段去重(6条数据)
		.selectDistinct(qUser.tel)
		.from(qUser)
		.select(
				//封装映射到UserViewModel中
				Projections.bean(
						UserViewModel.class,
						qUser.id,
						qUser.username
				)
		)
		//where可多个参数
		.where(predicate,qUser.createdTime.before(new Date()))
		.orderBy(qUser.id.desc())
		.offset(pageIndex)
		.limit(pageSize);
List<UserViewModel> list = listQuery.fetch();
//fetchCount不会执行orderBy、offset、limit参数也不会去重(7条数据)
int count = (int) listQuery.fetchCount();

4、多表简单查询

UserViewModel userViewModel = factory
		.select(
				Projections.bean(
						UserViewModel.class,
						qUser.id,
						qUser.creator,
						qUser.tel,
						qUser.username,
						qUser.address,
						qFile.name.as("name"),
						qUser.createdTime.stringValue()
				)
		)
		.from(qUser,qFile)
		.where(
				qFile.name.eq("test")
				.and(qUser.username.eq(qFile.creator))
		)
		.fetchOne();

5、子查询

List<FileViewModel> selectDome = factory
		.from(qFile)
		.select(
				Projections.bean(
						FileViewModel.class,
						qFile.id,
						qFile.name,
						qFile.size
				)
		)
		.where(
				qFile.size.lt(
						JPAExpressions
						.select(qFile.size.avg())
						.from(qFile)
				)
		)
		.fetch();

6、聚合函数

Long getCount = factory
		.from(qUser)
		.select(qUser.id.count())
		.fetchOne();
Double getAvg = factory
		.from(qFile)
		.select(qFile.size.avg())
		.fetchOne();
Long getMin = factory
		.select(qFile.size.min())
		.from(qFile)
		.fetchOne();
Long getSum = factory
		.select(qFile.size.sum())
		.from(qFile)
		.fetchOne();

7、更新操作

factory.update(qMoldsUsage)
		.set(qMoldsUsage.returneeId,model.getReturneeId())
		.set(qMoldsUsage.returnTime,model.getReturnTime())
		.where(qMoldsUsage.id.eq(model.getId()))
		.execute();

8、删除操作

factory.delete(qExitStorage)
		.where(qExitStorage.materialId.eq(model.getMaterialId()))
		.execute();

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值