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