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

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

1.相关包的导入

1.1 springdata相关包

        
        
        <dependency>
            <groupId>org.springframework.datagroupId>
            <artifactId>spring-data-jpaartifactId>
            <version>1.10.2.RELEASEversion>
        dependency>
        <dependency>
            <groupId>org.springframework.datagroupId>
            <artifactId>spring-data-releasetrainartifactId>
            <version>Hopper-SR2version>
            <scope>importscope>
            <type>pomtype>
        dependency>
        
        <dependency>
            <groupId>org.springframework.datagroupId>
            <artifactId>spring-data-commonsartifactId>
            <version>1.12.2.RELEASEversion>
        dependency>


        

1.2 querydsl相关包

    
        
        <dependency>
            <groupId>com.querydslgroupId>
            <artifactId>querydsl-coreartifactId>
            <version>4.1.3version>
        dependency>


        
        <dependency>
            <groupId>com.querydslgroupId>
            <artifactId>querydsl-jpaartifactId>
            <version>4.1.3version>
        dependency>
        
        <dependency>
            <groupId>com.querydslgroupId>
            <artifactId>querydsl-aptartifactId>
            <version>4.1.3version>
        dependency>


<dependency>
  <groupId>org.slf4jgroupId>
  <artifactId>slf4j-log4j12artifactId>
  <version>1.6.1version>
dependency>   

        

2 配置实体管理器


       
    <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" />
                
                <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">
        <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.mavengroupId><--这里如果使用com.query里面也有相应的生成插件-->
      <artifactId>apt-maven-pluginartifactId>
      <version>1.0.9version>
      <executions>
        <execution>
          <goals>
            <goal>processgoal>
          goals>
          <configuration>
            <outputDirectory>target/generated-sources/javaoutputDirectory>
            <processor>com.querydsl.apt.hibernate.HibernateAnnotationProcessorprocessor>
          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,
        QueryDslPredicateExecutor {

}

极大的提高了开发效率!

你可能感兴趣的:(日记,学习日记)