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

来源:互联网 发布:淘宝卖家交流群 编辑:程序博客网 时间:2024/06/06 15:32

上一次的文章讲述了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 0
原创粉丝点击