當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot环境下QueryDSL-JPA的使用
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot环境下QueryDSL-JPA的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、Pom.xml文件依賴
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-×××tance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xiaohang.springio</groupId><artifactId>spring-data-jpa</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-parent</artifactId><version>2.1.0.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><!--<scope>runtime</scope>--><version>5.1.46</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</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></dependencies><build><plug×××><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><dependencies><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId><version>1.2.5.RELEASE</version></dependency></dependencies></plugin><!-- 自動生成query type查詢實體 --><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></plug×××></build> </project>2、application.yml配置文件
# 數據庫基本配置 spring.datasource.type: com.alibaba.druid.pool.DruidDataSource spring.datasource.username: root spring.datasource.password: root spring.datasource.url: jdbc:mysql://192.168.56.1:3306/test01?useUnicode=true&characterEncoding=UTF-8&useSSL=false spring.datasource.driver-class-name: com.mysql.jdbc.Driver # 數據庫方言 spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL57Dialect spring.jpa.show-sql: true spring.jpa.hibernate.ddl-auto: update # 數據庫平臺 spring.jpa.database-platform: mysql # JPA配置 spring.jpa.database: mysql # 禁用視圖 spring.jpa.open-in-view: false3、實體類
Customer.java
package com.xiaohang.springio.jpastudy.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import javax.persistence.*;@Data @NoArgsConstructor @AllArgsConstructor @Entity(name = "t_customer") public class Customer {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "customer_name")private String name;@Column(name = "customer_part")private String part; }Employees.java
package com.xiaohang.springio.jpastudy.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import javax.persistence.*;@Data @NoArgsConstructor @AllArgsConstructor @Entity(name = "t_employee") public class Employees {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "employee_name")private String name;@Column(name = "employee_part")private String part; }4、Repository
package com.xiaohang.springio.jpastudy.repository;import com.xiaohang.springio.jpastudy.entity.Employees; import org.springframework.data.jpa.repository.JpaRepository;public interface EmployeesRepository extends JpaRepository<Employees, Long> { } package com.xiaohang.springio.jpastudy.repository;import com.xiaohang.springio.jpastudy.entity.Customer; import org.springframework.data.jpa.repository.JpaRepository;public interface CustomerRepository extends JpaRepository<Customer, Long> { }5、JPAQueryFactory類的使用重點
package com.xiaohang.springio.jpastudy.service;import com.querydsl.core.BooleanBuilder; import com.querydsl.core.QueryResults; import com.querydsl.core.types.Projections; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import com.xiaohang.springio.jpastudy.entity.Customer; import com.xiaohang.springio.jpastudy.entity.Employees; import com.xiaohang.springio.jpastudy.entity.QCustomer; import com.xiaohang.springio.jpastudy.entity.QEmployees; import com.xiaohang.springio.jpastudy.repository.CustomerRepository; import com.xiaohang.springio.jpastudy.repository.EmployeesRepository; 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.context.annotation.Bean; import org.springframework.test.context.junit4.SpringRunner;import javax.persistence.EntityManager; import java.util.List;@RunWith(SpringRunner.class) @SpringBootTest public class BookServiceTest {// 注入JPAQueryFactory@Bean@Autowiredpublic JPAQueryFactory jpaQuery(EntityManager entityManager) {return new JPAQueryFactory(entityManager);}@Autowiredprivate JPAQueryFactory jpaQueryFactory;@Autowiredprivate EmployeesRepository employeesRepository;@Autowiredprivate CustomerRepository customerRepository;@org.junit.Testpublic void jpaQuery() {Employees employees = new Employees();employees.setName("老李");employees.setPart("運營部");employeesRepository.saveAndFlush(employees);}@org.junit.Testpublic void updateBook() {Customer customer = new Customer();customer.setName("老黃");customer.setPart("生產部");customerRepository.saveAndFlush(customer);}/*** 數據庫聯接查詢*/@org.junit.Testpublic void findAllAuthors() {QCustomer qc = QCustomer.customer;QEmployees qe = QEmployees.employees;// 內聯接List<Employees> employeesList = jpaQueryFactory.select(Projections.constructor(Employees.class, qe.id, qe.name, qe.part)).from(qe).innerJoin(qc).on(qc.id.eq(qe.id)).fetch();employeesList.forEach(e -> {System.out.println(e.getName());});// 左聯接List<Employees> employeesList1 = jpaQueryFactory.select(Projections.constructor(Employees.class, qe.id, qe.name, qe.part)).from(qe).leftJoin(qc).on(qc.id.eq(qe.id)).fetch();employeesList1.forEach(employees -> {System.out.println(employees.getName());});// 右聯接List<Employees> employeesList2 = jpaQueryFactory.select(Projections.constructor(Employees.class, qe.id, qe.name, qe.part)).from(qe).rightJoin(qc).on(qc.id.eq(qe.id)).fetch();employeesList2.forEach(employees -> {System.out.println(employees.getName());});// 左外List<Employees> employeesList3 = jpaQueryFactory.select(Projections.constructor(Employees.class, qe.id, qe.name, qe.part)).from(qe).leftJoin(qc).on(qc.id.eq(qe.id)).where(qc.id.isNull()).fetch();employeesList3.forEach(employees -> {System.out.println(employees.getName());});}/*** 多條件查詢*/@org.junit.Testpublic void findAll() {// select customer0_.id as id1_1_, customer0_.customer_name as customer2_1_, customer0_.customer_part as customer3_1_ from t_customer customer0_ where (customer0_.customer_name like ? escape '!' or customer0_.customer_name=?) and (customer0_.id between ? and ?)QCustomer qc = QCustomer.customer;BooleanBuilder builder = new BooleanBuilder();builder.and(qc.name.like('%' + "劉" + '%'));builder.or(qc.name.eq("老王"));builder.and(qc.id.between(3, 5));List<Customer> customerList = jpaQueryFactory.selectFrom(qc).where(builder).fetch();customerList.forEach(customer -> {System.out.println(customer.getName());});}/*** 子查詢*/@org.junit.Testpublic void findAllDto() {QCustomer qc = QCustomer.customer;QEmployees qe = QEmployees.employees;List<Customer> customerList = jpaQueryFactory.selectFrom(qc).where(qc.id.eq(JPAExpressions.select(qe.id).from(qe).where(qe.name.eq("老張")))).fetch();customerList.forEach(customer -> {System.out.println(customer.getName());});}/*** 排序*/@Testpublic void testDesc() {QCustomer qc = QCustomer.customer;List<Customer> customerList = jpaQueryFactory.selectFrom(qc).orderBy(qc.id.desc()).fetch();customerList.forEach(customer -> {System.out.println(customer.getName());});}/*** 分頁*/@Testpublic void testPage() {QCustomer qc = QCustomer.customer;QEmployees qe = QEmployees.employees;// 寫法一JPAQuery<Employees> employeesJPAQuery = jpaQueryFactory.selectFrom(qe);// offset 起始頁List<Employees> employeesList = employeesJPAQuery.offset(3).limit(2).fetch();employeesList.forEach(employees -> {System.out.println(employees);});// 寫法二Long total = employeesJPAQuery.fetchCount();QueryResults<Customer> customerQueryResults = jpaQueryFactory.selectFrom(qc).offset(0).limit(3).fetchResults();List<Customer> results = customerQueryResults.getResults();results.forEach(customer -> {System.out.println(results);});} }6、推存閱讀及參考
https://www.jianshu.com/p/69dcb1b85bbb
轉載于:https://blog.51cto.com/12012821/2409553
總結
以上是生活随笔為你收集整理的SpringBoot环境下QueryDSL-JPA的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么查询oracle有哪些用户
- 下一篇: 约战荆门麻将最新版本下载 荆门麻将双开红