javascript
SpringBoot整合QueryDSL
1、創建父模塊
File-->New-->Project-->Spring Initializr-->Next
2、創建子模塊
右鍵父模塊-->New-->Module-->Next
依次創建web、service、entity模塊
完成后刪除所有mvnw、mvnw.cmd、HELP.md文件及.mvn目錄,除web外其他模塊的啟動類、resource目錄、父模塊src目錄
3、父模塊pom添加
<packaging>pom</packaging> <!--父模塊打包類型必須為pom--> <modules><module>web</module><module>service</module><module>entity</module> </modules>?4、子模塊pom添加依賴
<packaging>jar</packaging> <!-- web模塊引入web依賴 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- web模塊引入sql server驅動依賴 --> <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><scope>runtime</scope> </dependency> <!-- web和service依賴entity --> <dependency><groupId>com.magnets</groupId><artifactId>entity</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope> </dependency><!-- web依賴service --> <dependency><groupId>com.magnets</groupId><artifactId>service</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope> </dependency> <!--entity中jpa依賴--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- entity中Lombok依賴 --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId> </dependency>?5、entity子模塊引入QueryDSL的相關maven依賴
<dependency><groupId>com.querydsl</groupId><artifactId>querydsl-jpa</artifactId><version>${querydsl.version}</version> </dependency> <dependency><groupId>com.querydsl</groupId><artifactId>querydsl-apt</artifactId><version>${querydsl.version}</version><scope>provided</scope> </dependency>6、entity子模塊添加QueryDSL生成Q文件的插件
<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>該插件會自動掃描項目內配置了@Entity的實體類,并根據實體的內定義的字段以及關聯類通過JPAAnnotationProcessor自動創建Q[實體類名稱]的查詢實體,創建完成后會將實體存放到我們配置outputDirectory屬性目錄下。
?7、application.properties配置
server.port=8088spring.datasource.url=jdbc:sqlserver://192.168.0.202:1433;DatabaseName=Magnets spring.datasource.username=sa spring.datasource.password=123456 spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect logging.level.com.wonder = DEBUG#Hibernate配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl8、啟動類添加注解
//用于掃描@Controller @Service @ComponentScan(basePackages = "com.ouyin") //掃描實體 @EntityScan(basePackages ="com.magnets.machine.entity")9、創建實體類
/*** @ClassName: BaseObject* @Description: 基類* @Author: WZH* @Date: 2019/9/14 13:38*/ @Data @MappedSuperclass public class BaseObject {@Id@Column(length = 36)private String id;@Column(length = 36)private String creator;@Column(length = 36)private String modifier;@Column(name = "createdtime")private Date createdTime;@Column(name = "modifiedtime")private Date modifiedTime; } /*** @ClassName: Plate* @Description: 推板管理* @Author: WZH* @Date: 2019/8/16 17:28*/ @EqualsAndHashCode(callSuper = true) @Data @Entity @Table(name = "Plate") public class Plate extends BaseObject {/** 推板條碼編號 */@Column(name = "plate_code",nullable = false,length = 100)private String plateCode;/** 裝載數量 */@Column(name = "stowage_count",nullable = false)private Integer stowageCount;/** 關聯工單ID */@Column(name = "work_order_id",nullable = false,length = 36)private String workOrderId;/** 生產狀態 */@Column(name = "status",nullable = false)private Integer status;/** 綁定ID */@Column(name = "binding_id",nullable = false,length = 36)private String bindingId; }?10、使用Maven插件生成Q文件
maven工具-->entity-->Lifecycle-->compile生成Q文件在target目錄下,移至entity模塊代碼中,然后clean
11、在Service中使用
@Service public class CommonServiceImpl implements ICommonService {private final JPAQueryFactory factory;private final QPlate qPlate;private final EntityManager entityManager;@Autowiredpublic CommonServiceImpl(EntityManager entityManager) {this.entityManager = entityManager;this.factory = new JPAQueryFactory(entityManager);this.qPlate = QPlate.plate;}@Overridepublic Plate getPlate(String id) {return factory.selectFrom(qPlate).where(qPlate.id.eq(id)).fetchFirst();} }具體使用請參看我的另一篇博文QueryDSL基本操作demo
12、其中save方法參看如下代碼
private void save(BaseObject object){object.setId(CommonUtil.getUUID());object.setCreatedTime(new Date());object.setModifiedTime(new Date());object.setCreator("machine");object.setModifier("machine");entityManager.persist(object); }13、Controller和Service接口補全測試(不贅述)
總結
以上是生活随笔為你收集整理的SpringBoot整合QueryDSL的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 路由器的软件测试,路由器测试方法 - 软
 - 下一篇: 线性表的顺序表示和实现