智能供銷系統之基礎準備

  1. SSJ框架集成準備
    1. applicationContext.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
">

    <!-- 取名:com.zhangsan com.xmcx -->
    <!--service的掃描-->
    <context:component-scan base-package="com.anyang.pss.service" />

    <!--讀取jdbc.properties
        這裏必需寫classpath:,否則web環境下就讀取不到這個文件
    -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <!--配置datasource-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!--maxActive: 最大鏈接數量 -->
        <property name="maxActive" value="20" />
        <!--minIdle: 最小空閒鏈接 -->
        <property name="minIdle" value="2" />
        <!--maxIdle: 最大空閒鏈接 -->
        <property name="maxIdle" value="5" />
        <!--initialSize: 初始化鏈接 -->
        <property name="initialSize" value="5" />
        <!-- 用來配置數據庫斷開後自動鏈接的 -->
        <!-- 鏈接被泄露時是否打印 -->
        <!--<property name="logAbandoned" value="true" />-->
        <!--removeAbandoned: 是否自動回收超時鏈接 -->
       <!-- <property name="removeAbandoned" value="true" />-->
        <!--removeAbandonedTimeout: 超時時間(以秒數爲單位) -->
        <!--<property name="removeAbandonedTimeout" value="10" />-->
        <!--maxWait: 超時等待時間以毫秒爲單位 1000等於60秒 -->
        <property name="maxWait" value="1000" />
        <!-- 在空閒鏈接回收器線程運行期間休眠的時間值,以毫秒爲單位. -->
        <property name="timeBetweenEvictionRunsMillis" value="10000" />
        <!-- 在每次空閒鏈接回收器線程(若是有)運行時檢查的鏈接數量 -->
        <property name="numTestsPerEvictionRun" value="5" />
        <!-- 1000 * 60 * 30 鏈接在池中保持空閒而不被空閒鏈接回收器線程 -->
        <property name="minEvictableIdleTimeMillis" value="10000" />
        <property name="validationQuery" value="SELECT NOW() FROM DUAL" />
    </bean>
    
    <!--alt+ins配置: EntityManagerFactory-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <!--鏈接數據庫的基本配置-->
        <property name="dataSource" ref="dataSource"/>
        <!-- packagesToScan:掃描相應的包(jpa的掃描)  -->
        <property name="packagesToScan" value="com.anyang.pss.domain" />
        <!--
            jpaVendorAdapter:JPA的適配器[肯定這個jpa是哪一種框架來實現的]
                JPA:ORM規範 -> 有多種實現(hibernate,openjpa,...)
        -->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <!--方言-->
                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
                <!--是否顯示sql-->
                <property name="showSql" value="true" />
                <!--
                    建表策略 DDL:建庫建表建約束
                        true:至關於update
                        false:至關於什麼都不作
                 -->
                <property name="generateDdl" value="false" />
            </bean>
        </property>
    </bean>

    <!--配置相應的事務對象-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>


    <!--
        配置事務的支持(支持使用註解加事務)
            它默認會去找一個transactionManager的bean
    -->
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!--
        配置SpringDataJpa -> 讓我們的某一層的代碼支持SpringDataJpa
            只要發現我們的接口繼承了JpaRepository,它就會自動去完成相應的CRUD
    -->
    <jpa:repositories base-package="com.anyang.pss.repository"
                      entity-manager-factory-ref="entityManagerFactory"
                      transaction-manager-ref="transactionManager" />

</beans>

      

     

        2.    配置項目導包前端

                

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <org.springframework.version>4.2.5.RELEASE</org.springframework.version>
  <org.hibernate.version>4.3.8.Final</org.hibernate.version>
  <spring-data-jpa.version>1.9.0.RELEASE</spring-data-jpa.version>
  <com.fasterxml.jackson.version>2.5.0</com.fasterxml.jackson.version>
  <org.slf4j.version>1.6.1</org.slf4j.version>
</properties>
<dependencies>
  <!-- Spring的支持包 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <!--spring 對於模板技術,郵件,定時任務的支持-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${org.springframework.version}</version>
    <scope>test</scope>
  </dependency>
  <!-- 引入web前端的支持 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${org.springframework.version}</version>
  </dependency>
  <!-- SpringMCV上傳須要用到io包-->
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
  </dependency>
  <!-- 文件上傳用到的包 -->
  <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.2</version>
  </dependency>
  <!-- SpringMVC的json支持包 -->
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${com.fasterxml.jackson.version}</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${com.fasterxml.jackson.version}</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${com.fasterxml.jackson.version}</version>
  </dependency>
  <!-- hibernate的支持包 -->
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${org.hibernate.version}</version>
  </dependency>
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>${org.hibernate.version}</version>
  </dependency>
  <!-- SpringData的支持包 -->
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>${spring-data-jpa.version}</version>
  </dependency>
  <!-- SpringData的擴展包 -->
  <dependency>
    <groupId>com.github.wenhao</groupId>
    <artifactId>jpa-spec</artifactId>
    <version>3.1.1</version>
    <!-- 把全部的依賴都去掉 -->
    <exclusions>
      <exclusion>
        <groupId>*</groupId>
        <artifactId>*</artifactId>
      </exclusion>
    </exclusions>
  </dependency>

  <dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.2.2</version>
  </dependency>

  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
  </dependency>

  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.5</version>
  </dependency>
  <!-- 測試包 -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <!-- 這個scope 只能做用在編譯和測試時,同時沒有傳遞性。表示在運行的時候不添加此jar文件 -->
    <scope>provided</scope>
  </dependency>
  <!-- 日誌文件 -->
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${org.slf4j.version}</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${org.slf4j.version}</version>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
  </dependency>
  <!-- 代碼生成器模版技術 -->
  <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.6</version>
  </dependency>
  <!-- shiro的支持包 -->
  <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-all</artifactId>
    <version>1.4.0</version>
    <type>pom</type>
  </dependency>
  <!-- shiro與Spring的集成包 -->
  <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.0</version>
  </dependency>
  <!-- poi支持的jar包 -->
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.11</version>
  </dependency>
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
  </dependency>
  <!-- 圖片壓縮功能 -->
  <!-- 縮略圖 -->
  <dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.6</version>
  </dependency>
  <!-- 定時調度 -->
  <dependency>
    <groupId>quartz</groupId>
    <artifactId>quartz</artifactId>
    <version>1.5.2</version>
  </dependency>
  <!-- 郵件支持 -->
  <dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.1</version>
  </dependency>
</dependencies>


<build>
  <finalName>asfactory</finalName>

  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>8.1.15.v20140411</version>
      <configuration>
        <stopPort>9966</stopPort>
        <stopKey>foo</stopKey>
        <webAppConfig>
          <contextPath>/</contextPath>
        </webAppConfig>
      </configuration>
    </plugin>
  </plugins>
</build>

 

  1. SpringDataJpa配置測試


    SpringData -> SpringDataJpa:操做數據庫變得更好簡單
<h2>1.pom.xml配置</h2>
-     1.基本的SSJ的導入
-     2.SpringDataJpa
    
     <dependency>
          <groupId>org.springframework.data</groupId>
          <artifactId>spring-data-jpa</artifactId>
          <version>${spring-data-jpa.version}</version>
     </dependency>
java

2.SpringDataJpa基本配置  
   1.配置對應的Spring-data-jpa
       
        <jpa:repositories base-package="cn.itsource.aisell.repository"
                entity-manager-factory-ref="entityManagerFactory"
                transaction-manager-ref="transactionManager"
        ></jpa:repositories>
mysql

2.繼承JpaRepository
`interface EmployeeRepository extends JpaRepository<配置類,主鍵類型>, JpaSpecificationExecutor<Employee>
`          只要繼承JpaRepository,框架就會經過poxy完成基礎的CRUD實現git

            繼承JpaSpecificationExecutor使得框架實現的類具有com.github.wenhao.jpa的包裝工能,可以更加簡單的書寫高級條件查詢github


    3.完成相應的CRUD
       
       employeeRepository.findAll();
       employeeRepository.findOne(Long id);
       employeeRepository.save(對象); //添加或者修改
       employeeRepository.delete(id/對象);
       employeeRepository.findAll(Pageable) -> 分頁
           Pageable pageable = new PageRequest(0, 5); //0就是第一頁
       employeeRepository.findAll(Sort) -> 排序
           Sort sort = new Sort(Sort.Direction.DESC,"username");
       
       若是要把分頁和排序結合起來:     new PageRequest(0, 5,sort);web


3.高級查詢
    
    1.名稱規則
        findByUsername(String username) -> 根據名稱查詢 username = ?
        findByUsernameLike(String username) ->  username like ?
        findByUsernameLikeAndEmailLike(String username) ->  username like ? and email like ?
        詳細規則請看文件(idea也有提示)
        
    2.Query註解
        @Query("jpql的語句")
        @Query("select o from Employee o where o.name like ?1")
        //@Query("select o from Employee o where o.name like :name")
        @Query(nativeQuery = true,value="select * from employee")spring

二.高級查詢與分頁
1.JpaSpecificationExecutor
    能夠不寫SQL也可以完成功能
    
    1.咱們的Repository繼承JpaSpecificationExecutor
    EmployeeRepository extends JpaRepository<Employee,Long>, JpaSpecificationExecutor<Employee>{....}
    2.findAll的查詢方法
        employeeRepository.findAll(Specification<T> spec)
        employeeRepository.findAll(Specification<T> spec,Pageable pageable)
        new Specification<Employee>{
            //root:(根,表)獲取字段  
            //query:where,group by ,order by...
            //cb: 條件判斷(一個或者多個)
             @Override
            public Predicate toPredicate(Root<Employee> root,
                                        CriteriaQuery<?> query,
                                        CriteriaBuilder cb) {
                Path path = root.get("username");//拿到要作查詢的字段
                Predicate p = cb.like(path, "%1%");//like表明作模糊查詢,後面就是它的條件值
                return p;
            }
        }sql

2.jpa-spec[這個包的使用須要藉口繼承JpaSpecificationExecutor<?>]
    
    <dependency>
        <groupId>com.github.wenhao</groupId>
        <artifactId>jpa-spec</artifactId>
        <version>3.1.0</version>
    </dependency>

    
    //第一個參數: true -> 條件過濾啓用
    //第二個參數: 須要過濾的屬性
    //第三個參數: 過濾條件的 ?對應的值
    Specification<Person> specification = Specifications.<Person>and()
                .eq(StringUtils.isNotBlank(request.getName()), "name", name)
                .gt(Objects.nonNull(request.getAge()), "age", 18)
                .build();
3.Query的抽取
    
    Query做用:接收前臺傳過來的查詢條件(分頁,數據)
    BaseQuery:公共的查詢【規範,公共的代碼】
        int currentPage=1;
            getJpaPage{return currentPage-1}
        int pageSize=10;
        String orderName;
        Boolean orderType=true;
        提供getter,setter方法
        //規定子類必需提供一個拿到條件的方法
        protected abstract Specification createSpec();
        //提供獲取排序的方法
        Sort createSort(){
            //1.若是orderName沒有值,就返回null【不排序】
            //2.若是orderType是DESC,就升級(反之就降序)
        }
    EmployeeQuery:Employee單獨的查詢
        username,email,age,...
        Specification createSpec(){...}
        
---以上實現的功能有,基礎數據庫的增刪該查,高級查詢(通常的高級查詢,jpa-spec的高級查詢),表格父類抽取(表格的父類須要打上註解數據庫

@MappedSuperclass  //抑制表格生成apache

)

未完成:藉口父類的抽取

相關文章
相關標籤/搜索