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=8088

spring.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.PhysicalNamingStrategyStandardImpl

8、启动类添加注解

//用于扫描@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;

    @Autowired
    public CommonServiceImpl(EntityManager entityManager) {
        this.entityManager = entityManager;
        this.factory = new JPAQueryFactory(entityManager);
        this.qPlate = QPlate.plate;
    }

    @Override
    public 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接口补全测试(不赘述)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,目前还没有Spring Boot 3的版本发布,最新的版本是Spring Boot 2.5.4。QueryDSL是一个用于构建类型安全的SQL查询的框架,它可以与Spring Boot集成使用。在Spring Boot中使用QueryDSL可以方便地进行数据库查询操作,而不需要编写原生的SQL语句。 要在Spring Boot中使用QueryDSL,首先需要添加相关的依赖。在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-core</artifactId> <version>5.0.0</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>5.0.0</version> </dependency> ``` 接下来,需要配置QueryDSL的插件,以生成Q类文件。在pom.xml文件中添加以下插件配置: ```xml <build> <plugins> <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> </plugins> </build> ``` 然后,在你的实体类中使用QueryDSL的注解来定义查询条件。例如: ```java @Entity public class User { @Id private Long id; private String name; private Integer age; // getters and setters } ``` 接下来,运行`mvn clean compile`命令,生成Q类文件。 最后,在你的Repository接口中使用QueryDSL进行查询操作。例如: ```java @Repository public interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> { } ``` 现在你可以在Service或Controller中使用UserRepository进行查询操作了。例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getUsersByName(String name) { QUser qUser = QUser.user; return (List<User>) userRepository.findAll(qUser.name.eq(name)); } } ``` 这样就可以根据name字段进行查询了。 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值