1 QueryDSL
QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。
Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。
借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。目前QueryDSL支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。
2 Maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.1</version></dependency><!-- QueryDsl --><dependency><groupId>com.querydsl</groupId><artifactId>querydsl-jpa</artifactId></dependency><dependency><groupId>com.querydsl</groupId><artifactId>querydsl-apt</artifactId><scope>provided</scope></dependency>
3 Maven插件
<plugin><groupId>com.mysema.maven</groupId><artifactId>apt-maven-plugin</artifactId><version>1.1.3</version><executions><execution><goals><goal>process</goal></goals><configuration><outputDirectory>target/generated-sources/java</outputDirectory><processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor></configuration></execution></executions></plugin>
4 Spring Boot配置
#连接mysql数据库
spring.datasource.url = jdbc:mysql://localhost:3306/xudongbase?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true&useTimezone=true&serverTimezone=GMT%2B8&useLegacyDatetimeCode=false
spring.datasource.username = root
spring.datasource.password = xudong123456
spring.jpa.database = mysql
5 UserEntity
用户信息实体类。
package com.entity;import lombok.Data;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;/*** 用户信息实体类*/
@Data
@Table(name = "users")
@Entity
public class UserEntity {/*** 用户名*/@Column(name = "username")@Idprivate String username;/*** 昵称*/@Column(name = "pickname")private String pickname;/*** 密码*/@Column(name = "password")private String password;/*** 性别*/@Column(name = "sex")private String sex;
}
6 生成Query查询实体类
6.1 配置项目的maven命令
第一步,点击Run->Edit Configurations,进入Run/Debug Configurations窗口。
第二步, 点击+号,再点击Maven,生成一条Maven配置。
第三步,在Comand line 输入 compile,点击Apply。
6.2 生成Query查询实体类
第一步,点击运行按钮,生成Query查询实体类。
7 UserRepository
package com.dao;import com.entity.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;public interface UserRepository extends JpaRepository<UserEntity,Long>, QuerydslPredicateExecutor<UserEntity> {
}
8 调试代码
package com.controller;import com.dao.UserRepository;
import com.entity.QUserEntity;
import com.entity.UserEntity;
import com.querydsl.core.types.dsl.BooleanExpression;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;@RestController
public class UserController {@Autowiredprivate UserRepository userRepository;/*** 获取用户信息** @param username 用户名* @return*/@GetMapping("/getUserList")public List<UserEntity> getUserList(@RequestParam String username) {//查询实体QUserEntity qUserEntity = QUserEntity.userEntity;BooleanExpression expression = qUserEntity.username.contains(username);List<UserEntity> userEntityList = StreamSupport.stream(userRepository.findAll(expression).spliterator(),false).collect(Collectors.toList());return userEntityList;}
}