智能供销系统之基础准备

  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>

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>

2.继承JpaRepository
`interface EmployeeRepository extends JpaRepository<配置类,主键类型>, JpaSpecificationExecutor<Employee>
`          只要继承JpaRepository,框架就会通过poxy完成基础的CRUD实现

            继承JpaSpecificationExecutor使得框架实现的类具备com.github.wenhao.jpa的包装工能,能够更加简单的书写高级条件查询


    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);


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")

二.高级查询与分页
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;
            }
        }

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  //抑制表格生成

)

未完成:借口父类的抽取

 

 

 

 

 

转载于:https://my.oschina.net/u/4108086/blog/3069786

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值