项目简介
CRM项目搭建
用户模块功能实现
数据字典与市场活动模块处理

CRM项目创建

创建Project

创建一个空的Project

为Project命名

创建Module

创建一个MavenModule

配置GAV

配置maven

add maven property

name:archetypeCatalog

value:internal

使用主题默认生成的项目名

使pom.xml配置自动生效

生成项目后,保证webapp是带有”蓝点”标记的

在main文件夹下建立java文件夹和resources文件夹

与main文件夹平级创建一个test文件夹

test文件夹下创建java文件夹和resources文件夹

注意:为文件夹赋予功能(颜色)后,文件夹才会生效

将我们自己的web.xml模板导入

通过pom.xml导入我们需要的jar包

在resources下创建资源分类包结构

创建mybatis配置文件,spring配置文件,springmvc配置文件

创建jdbc.properties属性文件

为每一个配置文件引入基础文件头信息

为applicationContext.xml配置文件约束头信息

为dispatcherServlet.xml引入约束头信息

为mybatis-config.xml引入约束头信息

引入jdbc.properties信息

创建后台包结构

为utils包导入所需工具类

在interceptor包下创建一个用来过滤请求的拦截器类LoginInterceptor.java

实现HandlerInterceptor接口,重写方法

注意:将拦截器preHandle返回值默认设置为true

在此先将该文件创建出来,是为了接下来对配置文件的编写

导入前端原型

在WEB-INF下创建jsp包结构

在jsp下创建settings和workbench包结构

将settings和workbench中的原型导入

在webapp包下导入其他样式与脚本资源

所有资源导入后,需要对maven项目的构建进行刷新

编写配置信息

编写mybatis-config.xml

<settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--配置别名-->
    <typeAliases>
        <package name="com.sxbdqn.crm.settings.domain"/>
        <package name="com.sxbdqn.crm.workbench.domain"/>
    </typeAliases>

    <!--配置sql映射文件-->
    <mappers>
        <package name="com.sxbdqn.crm.settings.dao"/>
        <package name="com.sxbdqn.crm.workbench.dao"/>
    </mappers>

编写applicationContext.xml

<!--Spring配置文件-->
    <!--指定数据库属性配置文件-->
    <context:property-placeholder location="classpath:properties/jdbc.properties" />

    <!--声明组件扫描器-->
    <context:component-scan base-package="com.sxbdqn.crm.settings.service" />
    <context:component-scan base-package="com.sxbdqn.crm.workbench.service" />

    <!--声明DataSource-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
     </bean>

    <!--声明SqlSessionFactoryBean-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
    </bean>

    <!--声明MyBatis的扫描器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="basePackage" value="com.sxbdqn.crm.settings.dao,com.sxbdqn.crm.workbench.dao" />
    </bean>

    <!--事务配置  声明式事务:在源代码之外,控制事务  声明事务管理器,指定完成事务的具体实体类 commit, rollback-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--指定数据源DataSource-->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!--配置通知(切面):指定方法使用的事务属性  id:自定义的通知名称  transaction-manager:事务管理器 -->
    <tx:advice id="myAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--指定方法的事务属性    name:方法名称  isolation:隔离级别  propagation:传播行为
                rollback-for:回滚的异常类, 对于自定义的异常要使用全限定名称,系统的异常类可以名称
            -->
            <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED"
                       rollback-for="com.sxbdqn.crm.exception.AjaxRequestException,
                       com.sxbdqn.crm.exception.TraditionRequestException" />
            <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED"
                       rollback-for="com.sxbdqn.crm.exception.AjaxRequestException,
                       com.sxbdqn.crm.exception.TraditionRequestException" />
            <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED"
                       rollback-for="com.sxbdqn.crm.exception.AjaxRequestException,
                       com.sxbdqn.crm.exception.TraditionRequestException" />
            <!--除了上面的方法以外的,其他方法-->
            <tx:method name="*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <!--配置aop-->
    <aop:config>
        <!--指定切入点-->
        <aop:pointcut id="servicePt" expression="execution(* *..service..*.*(..))" />
        <!--配置增强器对象(通知+切入点)-->
        <aop:advisor advice-ref="myAdvice" pointcut-ref="servicePt" />
    </aop:config>

编写dispatcherServlet.xml

<!--SpringMVC配置文件-->
    <!--声明组件扫描器-->
    <context:component-scan base-package="com.sxbdqn.crm.settings.web.controller"/>
    <context:component-scan base-package="com.sxbdqn.crm.workbench.web.controller"/>
    <context:component-scan base-package="com.sxbdqn.crm.exception"/>

    <!--<context:component-scan base-package="com.sxbdqn.crm"/>-->
    <!--声明视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp" />
        <property name="suffix" value=".jsp" />
     </bean>

    <!--声明注解驱动-->
    <mvc:annotation-driven/>

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/settings/user/login.do"/>
            <bean class="com.sxbdqn.crm.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

    <!-- 配置文件上传解析器 id:必须是multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="#{1024*1024*80}"/>
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

注意:

在配置spring的时候idea会出现如下提示

表示配置文件还没有配置到项目中

点击右上角的配置项目结构图标

最后点击应用

以上提示就消失了

编写web.xml

<!--注册springmvc的中央调度器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/dispatcherServlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <!--注册spring的监听器-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext.xml</param-value>
  </context-param>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <listener>
    <listener-class>com.sxbdqn.crm.web.listener.SysInitListener</listener-class>
  </listener>

  <!--注册字符集过滤器-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>