栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于 QueryDSL 配置和使用(详细),java在线视频观看

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于 QueryDSL 配置和使用(详细),java在线视频观看

  • @Description 姓名

  • @Author LinLuoChen

  • @Date 10:44

**/

@Column(name = “name”)

private String name;

@Column(name = “password”)

private String password;

}

然后生成我们的 Q实体类,第一步点击右侧 Maven 然后选择第一个文件夹,双击 compile 它会自动运行,运行成功后会生成一个 QUser 的实体类 ,因为我们的实体类叫做 User 他是根据我们实体类来生成的

开始编写 Dao 层,引入JPA 的接口 – !!重要 !!!

package com.cs.querydsl.dao;

import com.cs.querydsl.model.User;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import org.springframework.data.repository.PagingAndSortingRepository;

public interface UserDao extends JpaRepository, JpaSpecificationExecutor, PagingAndSortingRepository {

// -----

}

这里我们省略 Service 层 直接看 Impl 接口实现类,这里就先写一个单表查询进行测试

package com.cs.querydsl.service.impl;

import com.cs.querydsl.dao.UserDao;

import com.cs.querydsl.model.QUser;

import com.cs.querydsl.model.User;

import com.cs.querydsl.service.UserService;

import com.querydsl.core.BooleanBuilder;

import com.querydsl.core.types.Projections;

import com.querydsl.jpa.impl.JPAQueryFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.thymeleaf.util.StringUtils;

import javax.annotation.PostConstruct;

import javax.persistence.EntityManager;

import java.util.List;

@Service

public class UserServiceImpl implements UserService {

@Autowired

UserDao userDao;

@Autowired

private EntityManager entityManager;

//查询工厂实体

private JPAQueryFactory queryFactory;

//实例化控制器完成后执行该方法实例化JPAQueryFactory

@PostConstruct

public void initFactory()

{

queryFactory = new JPAQueryFactory(entityManager);

}

@Override

public List findAll(User user) {

// 使用 QueryDSL 进行查询

QUser qUser = QUser.user;

// 定于获取条件

BooleanBuilder booleanBuilder = new BooleanBuilder();

// 要查询的条件

if(!StringUtils.isEmpty(user.getName())){

// 放入要查询的条件信息

booleanBuilder.and(qUser.name.contains(user.getName()));

}

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

// queryFactory 是上方定义的工厂实体

// select(生成的实体类的字段).from(生成实体类的名称).where(上方要查询的条件).orderBy(排序).fetch()进行查询

return queryFactory.select(qUser)

.from(qUser)

.where(booleanBuilder)

.orderBy(qUser.name.desc())

.fetch();

}

}

我们直接写一个测试类进行测试

package com.cs.querydsl;

import com.cs.querydsl.model.User;

import com.cs.querydsl.service.UserService;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)

@SpringBootTest

public class QuerydslApplicationTests {

@Autowired

UserService userService;

@Test

public void contextLoads() {

}

@Test

public void QueryDSLTest(){

User user = new User();

List list = userService.findAll(user);

System.out.println(list);

}

}

测试结果,可以运行 ~~

虽然说 QueryDSL 也可以做增删改查,但是个人不建议使用(仅限单表),因为单表操作,其实使用 Jpa 就可以了,包括 Jpa 的动态查询,都是很适合单表的,不管是代码量还是效率个人感觉都比 QueryDSL 要快,尤其是代码量,少了不止一点半点,但是连表操作的话,就比较偏向于 QueryDSL 了,特别好用!!下边是连表操作的 QueryDSL ,另外说一下上边只是演示一下 QueryDSL 的使用方法,单表还是建议用 Jpa 比较快!

---------------------------------------------------- 手动分界线 ----------------------------------------------------

package com.cs.querydsl.service.impl;

import com.cs.querydsl.dao.LocDao;

import com.cs.querydsl.model.Loc;

import com.cs.querydsl.model.QLoc;

import com.cs.querydsl.model.QUser;

import com.cs.querydsl.service.LocService;

import com.querydsl.core.BooleanBuilder;

import com.querydsl.core.QueryResults;

import com.querydsl.core.Tuple;

import com.querydsl.jpa.impl.JPAQueryFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.thymeleaf.util.StringUtils;

import javax.annotation.PostConstruct;

import javax.persistence.EntityManager;

import java.util.List;

import java.util.stream.Collectors;

@Service

public class LocServiceImpl implements LocService {

@Autowired

LocDao locDao;

@Autowired

private EntityManager entityManager;

//查询工厂实体

private JPAQueryFactory queryFactory;

//实例化控制器完成后执行该方法实例化JPAQueryFactory

@PostConstruct

public void initFactory()

{

queryFactory = new JPAQueryFactory(entityManager);

}

@Override

public List findAll(Loc loc) {

// 使用 QueryDSL 进行查询

QLoc qLoc = QLoc.loc1;

QUser qUser = QUser.user;

// 定于获取条件

BooleanBuilder booleanBuilder = new BooleanBuilder();

// 要查询的条件

if(!StringUtils.isEmpty(loc.getLoc())){

// 放入要查询的条件信息

booleanBuilder.and(qLoc.loc.contains(loc.getLoc()));

}

//连接查询条件(Loc.id = User.id )

booleanBuilder.and(qLoc.id.eq(qUser.id));

// 使用 QueryDSL 进行多表联合查询

QueryResults listResult = queryFactory

.select(QLoc.loc1,QUser.user)

.from(qLoc, qUser)//查询两表

.where(booleanBuilder)

.fetchResults();

//遍历 java8 自带流转换成集合

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号