gradle配置mapstruct和jpa

       以前在网上搜的问题多了,第一次写博客,说明的可能不足,望指出改善。   

学技术有一段时间了,最近想搭建一套框架,做些小项目,搭建项目的时候才发现比开发难的多了,不过难得好,学的多嘛,这里就先讲一下遇到的一个问题。

编译器是idea,框架是spring boot + jpa,构建工具为gradle(不得不说,是比maven好不少,尤其是引入依赖的时候),在原先的配置中一开始先引入的mapstruct,建立了userMapper的接口,与正常的接口不同的是多了一个@Mapper(componentModel = "spring")的注解,当然,毕竟是才搭建框架,没写复杂。

springboot配置jpa的,可以在(https://mapstruct.org/documentation/dev/reference/html/#_gradle)里面看怎么在gradle文件中配置mapstruct,

plugins {
    ...
    id 'net.ltgt.apt' version '0.20'
}

// You can integrate with your IDEs.
// See more details: https://github.com/tbroyer/gradle-apt-plugin#usage-with-ides
apply plugin: 'net.ltgt.apt-idea'
apply plugin: 'net.ltgt.apt-eclipse'

dependencies {
    ...
    implementation "org.mapstruct:mapstruct:${mapstructVersion}"
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"

    // If you are using mapstruct in test code
    testAnnotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
}

这是里面简单配置的,单配置一个还是可以的,配置完以后,在mapper接口类上加上@Mapper注解,就在编译出的build文件里会生成generated文件夹,一直往下层找,在generated/sources/annotationProcessor/main的文件夹下就能找到自己配置过mapper的包了,包内是配置上@Mapper注解的接口生成的实现类,里面就是对接口里面写的方法的实现,与手写的一样,都是给一个个属性set值,当然,类型不同可能还会加些判断,比如判断是不是null,还有枚举的转换。


然后再配置jpa,jpa的配置就得用到数据库了,可以自己在本地建立一个,也可以在阿里云,腾讯云上购买一个,要是自己学习用,1核1G就差不多了,也不贵,当然,主要是为了自己能够随时用,省的到哪都还得安装数据库,然后导入数据库脚本。

说到jpa,就不得不说querydsl了,早期的时候用jdbc,后面学ssh以后觉得hql很晦涩难懂(主要是当时技术不高,当然,现在也不高),之后就用mybatis,用mybatis的时候还挺不错,主要是mybatis支持普通的sql查询,存储过程和高级映射,配置上generator后,直接根据数据库字段以及关系生成实体类以及dao接口。用mybatis的时候确实很爽,然后现在用的是jpa,好歹有写过hql,上手jpa难度不算很大,至于玩花那就得多写多学多研究了。废话不多说了,接着说集成jpa

jpa的配置分两方面,一是gradle文件中的依赖,二是application.yml(是的,我就不用properties)中jpa相关的配置

这是在yml文件配置的jpa相关的

datasource:
  url: 数据库url地址
  username: 用户名
  password: 密码
  tomcat:
    init-s-q-l: "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;"
    test-on-borrow: false
    validation-query: select 1
    test-on-connect: false
    test-on-return: false
    test-while-idle: false
  driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
  hibernate:

    ddl-auto: update
    naming:
      physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
  show-sql: false
  properties.hibernate:
    enable_lazy_load_no_trans: false
    dialect: org.hibernate.dialect.MySQL5Dialect
    generate_statistics: false
    cache:
      use_second_level_cache: false
      use_query_cache: false
      region.factory_class: org.hibernate.cache.ehcache.EhCacheRegionFactory
  database: MYSQL


下面是jpa相关的依赖
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java'
compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.4.2.Final'
compile group: 'com.querydsl', name: 'querydsl-jpa', version: '4.2.1'

配置完jpa以及querydsl的依赖以后,实体类就用到了@Entity注解,在注解里配置上要生成的表名,这样在生成表的同时,也会在项目中生成querydsl文件,querydsl文件中会生成Q类,以供后面的查询使用

这时候真正的问题来了,mapstruct和jpa同时配置以后,只生成了mapper的文件,Q类并没有生成,于是我用task来指定生成的文件,由于本人Groovy语法几乎是一点不懂,所以在生成文件的时候还是只生成一个,于是就换了别的方式,下面是最新的配置文件

plugins {
   id 'org.springframework.boot' version '2.1.4.RELEASE'
   id 'java'
   id 'war'
   id "net.ltgt.apt-idea" version "0.21"
   id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

apply plugin: 'io.spring.dependency-management'
apply plugin: "net.ltgt.apt"


group = 'com.game'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
}

repositories {
   mavenCentral()
}

dependencies {
   compile 'org.springframework.boot:spring-boot-starter-web'
   compile 'org.springframework.boot:spring-boot-starter-data-jpa'
   runtimeOnly 'org.springframework.boot:spring-boot-devtools'
   runtimeOnly 'mysql:mysql-connector-java'
   annotationProcessor 'org.projectlombok:lombok'
   compile group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.1.5.RELEASE'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
   compile group: 'org.hibernate', name: 'hibernate-ehcache', version: '5.4.2.Final'
   compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.4.2.Final'
   compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
   compile group: 'com.querydsl', name: 'querydsl-jpa', version: '4.2.1'
   compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.3'
   compile group: 'commons-beanutils', name: 'commons-beanutils', version: '1.9.3'
   /**
    * mapStruct依赖
    */
   compile('org.mapstruct:mapstruct-jdk8:1.3.0.Final')
   annotationProcessor("org.mapstruct:mapstruct-processor:1.3.0.Final")
   compile("org.projectlombok:lombok:1.16.18")
   annotationProcessor("org.projectlombok:lombok:1.16.18")
   /**
    * redis依赖
    */
   compile("org.springframework.boot:spring-boot-starter-data-redis")

   /**
    * token相关依赖
    */
   compile group: 'com.auth0', name: 'java-jwt', version: '3.8.1'
}

clean{
   delete '/src/querydsl'
}

querydsl {
   jpa = true
}

token和redis的忽略,这里配置上了querydsl,在gradle命令中,也有了querydsl相关的命令

这样配置以后,就好用了,这个问题可能有些偏,但架不住人多用,总会有一两个碰上的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值