springMVC+hibernate+springdata+querydsl框架构建详解

上一次的文章讲述了springdata的主要好处,其中一个好处就是他是spring家族的一大成员之一,所以可以和springMvc无缝结合,而且配置很简单,但是querydsl 却不是spring的产品,且拥有两个版本(com.querydsl和com.mysema.querydsl),springdata只支持com.querydsl版本所以导致配置会出现问题。现在让我们一步步把data配置进入我们以前的spring-hibernate框架中。

1.相关包的导入

1.1 springdata相关包

        <!-- springdata -->
        <!--https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.10.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Hopper-SR2</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-commons -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>1.12.2.RELEASE</version>
        </dependency>


        <!--/ springdata -->

1.2 querydsl相关包

    <!-- querydsl -->
        <!-- https://mvnrepository.com/artifact/com.querydsl/querydsl-core -->
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-core</artifactId>
            <version>4.1.3</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.querydsl/querydsl-jpa -->
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>4.1.3</version>
        </dependency>
        <!--        https://mvnrepository.com/artifact/com.querydsl/querydsl-apt -->
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>4.1.3</version>
        </dependency>
<!-- 
注意和下面这些进行对比,作者以前就是用了面这些包,导致配了很久配不好,不要直接去maven仓库里面搜索querydsl
<dependency>
  <groupId>com.mysema.querydsl</groupId>
  <artifactId>querydsl-apt</artifactId>
  <version>3.7.4</version>
  <scope>provided</scope>
</dependency>  
<dependency>
  <groupId>com.mysema.querydsl</groupId>
  <artifactId>querydsl-jpa</artifactId>
  <version>3.7.4</version>
</dependency> -->

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.6.1</version>
</dependency>   

        <!-- /querydsl -->

2 配置实体管理器

<!-- 对“实体管理器”解释:我们知道原生的jpa的配置信息是必须放在META-INF目录下面的,并且名字必须叫做persistence.xml,这个叫做persistence-unit,就叫做持久化单元,放在这下面我们感觉不方便,不好,于是Spring提供了
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean这样一个类,可以让你的随心所欲的起这个配置文件的名字,也可以随心所欲的修改这个文件的位置,只需要在这里指向这个位置就行。然而更加方便的做法是,直接把配置信息就写在这里更好,于是就有了这实体管理器这个bean。使用
<property name="packagesToScan" value="your entity package" />
这个属性来加载我们的entity。 -->
       <!-- 实体管理器 -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" /><!--数据源 -->
        <property name="packagesToScan" value="com.haizhi.bean" /><!-- 实体所在包 -->
          <property name="persistenceProvider">
            <bean class="org.hibernate.ejb.HibernatePersistence" />
        </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="generateDdl" value="false" />
                <property name="database" value="MYSQL" />
                <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
                <property name="showSql" value="true" />
            </bean>
        </property>
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>

        <property name="jpaPropertyMap">
            <map>
                <entry key="hibernate.query.substitutions" value="true 1, false 0" />
                <entry key="hibernate.default_batch_fetch_size" value="16" />
                <entry key="hibernate.max_fetch_depth" value="2" />
                <entry key="hibernate.generate_statistics" value="true" />
                <entry key="hibernate.bytecode.use_reflection_optimizer" value="true" />
                <entry key="hibernate.cache.use_second_level_cache" value="false" />
                <!-- 2016年8月15日更 这个一定要设置,提供懒加载功能,没有设置这个导致懒加载不了 -->
                <entry key="hibernate.enable_lazy_load_no_trans" value="true" />
                <entry key="hibernate.cache.use_query_cache" value="false" />
            </map>
        </property>
    </bean>

3 配置事务

 <!-- 配置事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager"><!-- 这里一定要用jpa事务去管理,不然存储方法无效,不能用hibernate事务了 -->
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

省略了声明式事务配置

4 配置repositories接口扫描标签

<jpa:repositories base-package="com.haizhi.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager" />

5 配置querydsl 的 sql 代理类

5.1 引入代理类生成插件(注:该插件与上次说的热部署插件会有冲突,所以当你使用maven编译的时候不要同时引用)

<!-- 插件之间会起冲突 -->
<plugin>
      <groupId>com.mysema.maven</groupId><--这里如果使用com.query里面也有相应的生成插件-->
      <artifactId>apt-maven-plugin</artifactId>
      <version>1.0.9</version>
      <executions>
        <execution>
          <goals>
            <goal>process</goal>
          </goals>
          <configuration>
            <outputDirectory>target/generated-sources/java</outputDirectory>
            <processor>com.querydsl.apt.hibernate.HibernateAnnotationProcessor</processor>
          </configuration>
        </execution>
      </executions>
    </plugin> 

5.2 使用maven clean
5.3 使用maven install
5.4 使用maven update
你就可以在你的maven项目里面的target文件夹里面发现一个叫generated-sources的文件夹,下面有一个java文件,里面对应的就是你的javabean对应生成的sql代理类
这里写图片描述
现在你就可以在你的项目里面使用querydsl了

对比实例

        //使用querydsl
//      QTbUser qtbUser = QTbUser.tbUser;
//      Predicate p = qtbUser.userAccount.eq(userAccount).and(qtbUser.userPassword.eq(userPassword));
//      TbUser tbUser = userService.findByUserAccountAndUserPasswordUseQuerydsl(p);

        TbUser tbUser = userService.findByUserAccountAndUserPassword(userAccount,userPassword);

然后现在只需要新建dao包,然后使用该dao去继承他们就可以使用了

package com.haizhi.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.querydsl.QueryDslPredicateExecutor;

import com.haizhi.bean.TbAdmin;

/**
 * @author jiangjintai
 *
 */
public interface AdminDao extends JpaRepository<TbAdmin, Integer>,
        QueryDslPredicateExecutor<TbAdmin> {

}

极大的提高了开发效率!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值