'); } '); } CRM项目SSM框架构建(一) | Journey to paradise

CRM项目SSM框架构建(一)


CRM项目简介

​ Customer Relationship Management 客户关系管理系统,企业级应用,传统应用;给销售或者贸易型公司使用,在市场,销售,服务等各个环节中维护客户关系。 CRM项目的宗旨:增加新客户,留住老客户,把已有客户转化为忠诚客户。

​ CRM是一类项目,本次CRM项目是给一个大型的进出口贸易公司来使用的,做大宗商品的进出口贸易,商品是受管家管制的。

本次CRM项目的核心业务
  • 系统管理功能:不是直接处理业务数据,为了保证业务管理的功能正常安全运行而设计的功能。
    • 用户登录,安全退出,登录验证等
      • 给超级管理员,开发和运维人员使用。
  • 业务管理功能:处理业务数据
    • 市场活动:市场部,设计市场活动营销活动
      • 线索:销售部(初级销售),增加线索
      • 客户和联系人:销售部(高级销售),有效地区分和跟踪客户和联系人
    • 交易:销售部(高级销售),更好地区分和统计交易的各个阶段。
      • 售后回访:客服部,妥善安排售后回访。主动提醒。
    • 统计图表:管理层,统计交易表中各个阶段数据量。
CRM的技术架构:
  • 视图层(view):展示数据,跟用户交互
    • html,css,js,jquery,bootstrap(ext|easyUI),jsp
  • 控制层(Controller):控制业务处理流程(接收请求,接收参数,封装参数;根据不同的请求调用业务层处理业务;根据处理结果,返回响应信息)
    • (servlet,)springMVC(,webwork,struts1,struts2)
  • 业务层(Service):处理业务逻辑(处理业务的步骤以及操作的原子性)
    • JAVASE(工作流:activiti|JBPM)
  • 持久层(Dao/Mapper):操作数据库
    • (jdbc,)mybatis(,hibernate,ibatis)
    • tbl_table(表)———-pojo(实体类)
  • 整合层:维护类资源,维护数据库资源
    • spring(IOC,AOP)(,ejb,corba)

搭建开发环境

  1. 创建空项目,作为项目根目录

  2. 设置JDK:File–>Project Structure–>Project–>SDK–>配置JDK1.8

  3. 设置编码格式:Setting–>FileEncodings–>(配置Global Encoding:UTF-8, Project Encoding:UTF-8)

  4. 配置Maven:Setting–>Build,Execution,Deployment–>Maven–>(配置Maven home path:,User setting file:,Local reposity:)

  5. 创建Maven工程

  6. 补全目录结构:

  7. 添加依赖

    1. pom.xml

      1. <!-- MySQL数据库连接驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.43</version>
        </dependency>
        
        <!-- JDBC数据源连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.1</version>
        </dependency>
        
        <!-- MyBatis框架依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        
        <!-- Spring框架依赖的JAR配置 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        
        <!-- Spring AOP支持-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
        
        <!-- MyBatis与Spring整合依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        
        <!-- servlet及jstl标签库依赖的JAR配置 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.1</version>
        </dependency>
        
        <!-- 加载jackson插件依赖 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.3</version>
        </dependency>
        
        <!--poi依赖-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>
        
        <!-- 文件上传 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        <!-- Log4j2依赖的JAR配置 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <version>2.3</version>
        </dependency>
        
  8. 添加相关配置

    1. Mybatis配置文件mybatis-config.xml

      1. <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE configuration
                PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
            <settings>
                <setting name="logImpl" value="STDOUT_LOGGING"/>
            </settings>
            <typeAliases>
                <package name="com.group10.qpj.model"/>
            </typeAliases>
            <mappers>
                <package name="com.group10.qpj.mapper"/>
            </mappers>
        </configuration>
        
    2. 配置数据库连接和事务文件applicationContext-datasource.xml

      1. <?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:aop="http://www.springframework.org/schema/aop"
               xmlns:context="http://www.springframework.org/schema/context"
               xmlns:tx="http://www.springframework.org/schema/tx"
               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-4.3.xsd
              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
              http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
        
            <!-- 配置数据源 -->
            <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
                <property name="username" value="root"/>
                <property name="password" value="todo"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/crm2008?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
            </bean>
            <!-- 配置SqlSessionFactory -->
            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <!-- 必须注入属性dataSource -->
                <property name="dataSource" ref="dataSource"/>
                <!-- 如果mybatis没有特殊的配置(比如别名等),configLocation可以省去 ;否则,不能省略-->
                <property name="configLocation" value="classpath:mybatis-config.xml"/>
            </bean>
            <!-- mapper注解扫描器配置,扫描@MapperScan注解,自动生成代码对象 -->
            <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <property name="basePackage" value="com.tu.crm.settings.mapper,com.tu.crm.workbench.mapper"/>
                <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            </bean>
        
            <!-- 配置事务管理器 -->
            <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                <property name="dataSource" ref="dataSource"/>
            </bean>
            <!-- 配置事务 -->
            <aop:config>
                <aop:pointcut expression="execution(* com.tu.crm..service.*.*(..))" id="allMethodPointcut"/>
                <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethodPointcut"/>
            </aop:config>
            <tx:advice id="txAdvice" transaction-manager="transactionManager">
                <tx:attributes>
                    <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
                    <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
                    <tx:method name="edit*" propagation="REQUIRED" rollback-for="Exception"/>
                    <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
                    <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
                    <tx:method name="do*" propagation="REQUIRED" rollback-for="Exception"/>
                    <tx:method name="*" propagation="REQUIRED" read-only="true"/>
                </tx:attributes>
            </tx:advice>
        </beans>
        
    3. springMVC配置文件applicationContext-mvc.xml

      1. <?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:p="http://www.springframework.org/schema/p"
               xmlns:util="http://www.springframework.org/schema/util"
               xmlns:aop="http://www.springframework.org/schema/aop"
               xmlns:tx="http://www.springframework.org/schema/tx"
               xmlns:mvc="http://www.springframework.org/schema/mvc"
               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/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">
            <!-- dispatcherServlet截获所有URL请求 -->
            <mvc:default-servlet-handler />
            <!-- spring mvc 扫描包下的controller -->
            <context:component-scan base-package="com.tu.crm.web.controller"/>
            <context:component-scan base-package="com.tu.crm.settings.web.controller"/>
            <context:component-scan base-package="com.tu.crm.workbench.web.controller"/>
        
            <!-- 配置注解驱动 -->
            <mvc:annotation-driven/>
            <!-- 配置视图解析器 -->
            <bean id="viewResolver"
                  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/pages/"/>
                <property name="suffix" value=".jsp"/>
            </bean>
        
            <!--配置拦截器-->
            <mvc:interceptors>
                <mvc:interceptor>
                    <!--拦截所有以settings和workbench开头的请求-->
                    <mvc:mapping path="/settings/**"/>
                    <mvc:mapping path="/workbench/**"/>
                    <!--排除登录拦截-->
                    <mvc:exclude-mapping path="/settings/qx/user/toLogin.do"/>
                    <mvc:exclude-mapping path="/settings/qx/user/login.do"/>
                    <bean class="com.tu.crm.settings.web.interceptor.LoginIntercepter"/>
                </mvc:interceptor>
            </mvc:interceptors>
        
            <!--配置文件上传解析器 id:必须是multupartResolver-->
            <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                <property name="maxUploadSize" value="#&#123;1024*1024*80&#125;"/>
                <property name="defaultEncoding" value="utf-8"/>
            </bean>
        </beans>
        
    4. spring总配置文件applicationContext.xml

      1. <?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:p="http://www.springframework.org/schema/p"
               xmlns:aop="http://www.springframework.org/schema/aop"
               xmlns:tx="http://www.springframework.org/schema/tx"
               xmlns:task="http://www.springframework.org/schema/task"
               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/aop
                                    http://www.springframework.org/schema/aop/spring-aop.xsd">
            <!-- 加载系统配置文件
            <context:property-placeholder location="classpath:*.properties" />-->
            <!-- 扫描注解 -->
            <context:component-scan base-package="com.tu.crm.settings.service" />
            <context:component-scan base-package="com.tu.crm.workbench.service" />
        
            <!-- 导入数据相关配置 -->
            <import resource="applicationContext-datasource.xml" />
        </beans>
        
    5. web.xml配置

      1. <?xml version="1.0" encoding="UTF-8"?>
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns="http://java.sun.com/xml/ns/javaee"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
                 id="dataservice" version="3.0">
          <display-name>dataservice application</display-name>
          <!-- spring监听器加载applicationContext.xml配置文件 -->
          <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
          </context-param>
          <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
        
          <!-- spring字符过滤器 -->
          <filter>
            <filter-name>encodingFilter</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>
          </filter>
          <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>
        
          <!-- Spring mvc分发servlet -->
          <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:applicationContext-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
          </servlet-mapping>
          <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.do</url-pattern>
          </servlet-mapping>
        
          <!-- 欢迎页,默认进入index controller -->
          <welcome-file-list>
            <welcome-file>/</welcome-file>
          </welcome-file-list>
        </web-app>
        
    6. 添加jar包依赖pom.xml

      1. <?xml version="1.0" encoding="UTF-8"?>
        
        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
        
          <groupId>com.tu.crm</groupId>
          <artifactId>crm</artifactId>
          <version>1.0-SNAPSHOT</version>
          <packaging>war</packaging>
        
          <name>crm Maven Webapp</name>
          <!-- FIXME change it to the project's website -->
          <url>http://www.example.com</url>
        
          <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
          </properties>
        
          <dependencies>
            <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.11</version>
              <scope>test</scope>
            </dependency>
        
            <!-- MySQL数据库连接驱动 -->
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.43</version>
            </dependency>
        
            <!-- JDBC数据源连接池 -->
            <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>druid</artifactId>
              <version>1.1.1</version>
            </dependency>
        
            <!-- MyBatis框架依赖 -->
            <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.4.1</version>
            </dependency>
        
            <!-- Spring框架依赖的JAR配置 -->
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-aop</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-beans</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-jdbc</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-tx</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-web</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-webmvc</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-oxm</artifactId>
              <version>4.3.9.RELEASE</version>
            </dependency>
        
            <!-- Spring AOP支持-->
            <dependency>
              <groupId>org.aspectj</groupId>
              <artifactId>aspectjweaver</artifactId>
              <version>1.8.9</version>
            </dependency>
        
            <!-- MyBatis与Spring整合依赖 -->
            <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis-spring</artifactId>
              <version>1.3.0</version>
            </dependency>
        
            <!-- MyBatis与Spring整合依赖 -->
            <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis-spring</artifactId>
              <version>1.3.0</version>
            </dependency>
        
            <!-- servlet及jstl标签库依赖的JAR配置 -->
            <dependency>
              <groupId>javax.servlet</groupId>
              <artifactId>javax.servlet-api</artifactId>
              <version>3.1.0</version>
            </dependency>
            <dependency>
              <groupId>javax.servlet.jsp.jstl</groupId>
              <artifactId>jstl-api</artifactId>
              <version>1.2</version>
            </dependency>
            <dependency>
              <groupId>org.apache.taglibs</groupId>
              <artifactId>taglibs-standard-spec</artifactId>
              <version>1.2.1</version>
            </dependency>
            <dependency>
              <groupId>org.apache.taglibs</groupId>
              <artifactId>taglibs-standard-impl</artifactId>
              <version>1.2.1</version>
            </dependency>
        
            <!-- 加载jackson插件依赖 -->
            <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-core</artifactId>
              <version>2.7.3</version>
            </dependency>
            <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
              <version>2.7.3</version>
            </dependency>
            <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-annotations</artifactId>
              <version>2.7.3</version>
            </dependency>
        
            <!--poi依赖-->
            <dependency>
              <groupId>org.apache.poi</groupId>
              <artifactId>poi</artifactId>
              <version>3.15</version>
            </dependency>
        
            <!-- 文件上传 -->
            <dependency>
              <groupId>commons-fileupload</groupId>
              <artifactId>commons-fileupload</artifactId>
              <version>1.3.1</version>
            </dependency>
        
            <!-- Log4j2依赖的JAR配置 -->
            <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-api</artifactId>
              <version>2.3</version>
            </dependency>
            <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-core</artifactId>
              <version>2.3</version>
            </dependency>
        
        
          </dependencies>
        
          <build>
            <finalName>crm</finalName>
            <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
              <plugins>
                <plugin>
                  <artifactId>maven-clean-plugin</artifactId>
                  <version>3.1.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                  <artifactId>maven-resources-plugin</artifactId>
                  <version>3.0.2</version>
                </plugin>
                <plugin>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.8.0</version>
                </plugin>
                <plugin>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <version>2.22.1</version>
                </plugin>
                <plugin>
                  <artifactId>maven-war-plugin</artifactId>
                  <version>3.2.2</version>
                </plugin>
                <plugin>
                  <artifactId>maven-install-plugin</artifactId>
                  <version>2.5.2</version>
                </plugin>
                <plugin>
                  <artifactId>maven-deploy-plugin</artifactId>
                  <version>2.8.2</version>
                </plugin>
              </plugins>
            </pluginManagement>
        
            <resources>
              <resource>
                <directory>src/main/java</directory>
                <includes>
                  <include>**/*.xml</include>
                </includes>
              </resource>
              <resource>
                <directory>src/main/resources</directory>
                <includes>
                  <include>**/*.*</include>
                </includes>
              </resource>
            </resources>
        
          </build>
        </project>
        
  9. 添加静态资源

  10. 部署到tomcat上

    1. 配置tomcat

​ 2.

创建CRM数据库表

crm的表结构:

  • tbl_user 用户表

  • tbl_dic_type 数据字典类型表
    tbl_dic_value 数据字典值

  • tbl_activity 市场活动表
    tbl_activity_remark 市场活动备注表

  • tbl_clue 线索表
    tbl_clue_remark 线索备注表

  • tbl_clue_activity_relation 线索和市场活动的关联关系表

  • tbl_customer 客户表
    tbl_customer_remark 客户备注表

  • tbl_contacts 联系人表
    tbl_contacts_remark 联系人备注表

  • tbl_contacts_activity_relation 联系人和市场活动的关联关系表

  • tbl_tran 交易表
    tbl_tran_remark 交易备注表
    tbl_tran_history 交易历史表

  • tbl_task 任务表

MyBatis逆向工程

​ 使用mybatis逆向工程根据表生成mapper层三层部分代码:实体类,mapper接口,映射文件,实现针对表单的所有的常规的增删改查。

使用mybatis逆向工程

  1. 在pom.xml中引用插件依赖:crm-mybatis-generator

     <build>
        <finalName>crm</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.1.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.22.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
    
    1. 创建数据库连接信息文件generator.properties

      1. jdbc.driverLocation=D:/apache-maven-3.6.3/repository/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar
        jdbc.driverClass=com.mysql.jdbc.Driver
        jdbc.connectionURL=jdbc:mysql://127.0.0.1:3306/crm2008
        jdbc.userId=root
        jdbc.password= todo
        
    2. 修改generatorConfig.xml( 修改代码保存的目录以及表的信息)

      1. <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE generatorConfiguration
                PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
                "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
        
        <generatorConfiguration>
        
            <!--指定mysql数据库驱动-->
            <!--<classPathEntry location="E://repository-p2p//mysql//mysql-connector-java//5.1.43//mysql-connector-java-5.1.43.jar"/>-->
        
            <!--导入属性配置-->
            <properties resource="generator.properties"></properties>
        
            <!--指定特定数据库的jdbc驱动jar包的位置-->
            <classPathEntry location="$&#123;jdbc.driverLocation&#125;"/>
        
            <context id="default" targetRuntime="MyBatis3">
        
                <!-- optional,旨在创建class时,对注释进行控制,false生成注释,true无注释 -->
                <commentGenerator>
                    <property name="suppressDate" value="false"/>
                    <property name="suppressAllComments" value="false"/>
                </commentGenerator>
        
                <!--jdbc的数据库连接 -->
                <jdbcConnection
                        driverClass="$&#123;jdbc.driverClass&#125;"
                        connectionURL="$&#123;jdbc.connectionURL&#125;"
                        userId="$&#123;jdbc.userId&#125;"
                        password="$&#123;jdbc.password&#125;">
                </jdbcConnection>
        
        
                <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
                <javaTypeResolver>
                    <property name="forceBigDecimals" value="false"/>
                </javaTypeResolver>
        
        
                <!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
                    targetPackage     指定生成的model生成所在的包名
                    targetProject     指定在该项目下所在的路径|指定生成到的工程名称
                -->
                <javaModelGenerator targetPackage="com.tu.crm.workbench.domain"
                                    targetProject="E:\java\javaSE\crm-project\crm\src\main\java">
        
                    <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
                    <property name="enableSubPackages" value="false"/>
                    <!-- 是否对model添加 构造函数 true添加,false不添加-->
                    <property name="constructorBased" value="false"/>
                    <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
                    <property name="trimStrings" value="true"/>
                    <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
                    <property name="immutable" value="false"/>
                </javaModelGenerator>
        
                <!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
                <sqlMapGenerator targetPackage="com.tu.crm.workbench.mapper"
                                 targetProject="E:\java\javaSE\crm-project\crm\src\main\java">
                    <property name="enableSubPackages" value="false"/>
                </sqlMapGenerator>
        
                <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
                        type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
                        type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
                        type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
                -->
                <javaClientGenerator targetPackage="com.tu.crm.workbench.mapper"
                                     targetProject="E:\java\javaSE\crm-project\crm\src\main\java" type="XMLMAPPER">
                    <property name="enableSubPackages" value="true"/>
                </javaClientGenerator>
                
                <table tableName="tbl_user" domainObjectName="User"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryIalse">
                </table>
                <table tableName="tbl_activity_remark" domainObjectName="ActivityRemark"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
                <!--
                <table tableName="tbl_activity" domainObjectName="Activity"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
        
                <table tableName="tbl_clue" domainObjectName="Clue"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
        
                <table tableName="tbl_clue_activity_relation" domainObjectName="ClueActivityRelation"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
        
                <table tableName="tbl_clue_remark" domainObjectName="ClueRemark"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
                                -->
                <!--
                <table tableName="tbl_contacts" domainObjectName="Contacts"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
                <table tableName="tbl_contacts_activity_relation" domainObjectName="ContactsActivityRelation"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
                <table tableName="tbl_contacts_remark" domainObjectName="ContactsRemark"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
                -->
                <!--
                <table tableName="tbl_customer" domainObjectName="Customer"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
        
                <table tableName="tbl_customer_remark" domainObjectName="CustomerRemark"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>
                -->
                <!--
                        <table tableName="tbl_dictionary_type" domainObjectName="DictionaryType"
                               enableCountByExample="false" enableUpdateByExample="false"
                               enableDeleteByExample="false" enableSelectByExample="false"
                               selectByExampleQueryId="false">
                        </table>
        
        
                        <table tableName="tbl_dictionary_value" domainObjectName="DictionaryValue"
                               enableCountByExample="false" enableUpdateByExample="false"
                               enableDeleteByExample="false" enableSelectByExample="false"
                               selectByExampleQueryId="false">
                        </table>
        
                        <table tableName="tbl_transaction" domainObjectName="Transaction"
                               enableCountByExample="false" enableUpdateByExample="false"
                               enableDeleteByExample="false" enableSelectByExample="false"
                               selectByExampleQueryId="false">
                        </table>
                        <table tableName="tbl_transaction_history" domainObjectName="TransactionHistory"
                               enableCountByExample="false" enableUpdateByExample="false"
                               enableDeleteByExample="false" enableSelectByExample="false"
                               selectByExampleQueryId="false">
                        </table>
                        <table tableName="tbl_transaction_remark" domainObjectName="TransactionRemark"
                               enableCountByExample="false" enableUpdateByExample="false"
                               enableDeleteByExample="false" enableSelectByExample="false"
                               selectByExampleQueryId="false">
                        </table>
        
                        -->
            </context>
        </generatorConfiguration>
        

    3. 双击执行Maven,mybatis-generator:generate

  2. 创建成功后:

复习知识点

1)主键字段

在数据库表中,如果有一组字段能够唯一确定一条记录,则可以把它们设计成表的主键字段。

tips

  • 推荐使用一个字段做主键,而且推荐使用没有业务含义的字段做主键,比如:id等

主键字段的类型和长度由主键值的生成方式来决定:
主键值的生成方式:

  • 自增:借助数据库自身主键生成机制
    • 数值型 长度由数据量来决定
    • 运行效率低
    • 开发效率高
  • assighed:程序员手动生成主键值,唯一非空,算法
    • hi/low:数值型 长度由数据量决定
    • UUID:字符串 长度是32位
  • 共享主键:由另一张表的类型和长度决定,两张表共用同一个主键
  • 联合主键:由多个字段的类型和长度决定
2)外键字段

​ 用来确定表和表之间的关系

​ 表和表之间的关系:

  • 一对多:一张父表(A)中的一条记录可以对应另一张子表(B)中的多条记录,另一张表(B)中的一条记录只能对应一张表(A)中的一条记录
    • 添加数据时,先添加父表记录,再添加子表记录
    • 删除数据时,先删除子表记录,再删除父表记录
    • 查询数据时,可能会进行关联查询
      • 内连接:查询所有符合条件的数据,并且要求结果在两张表中都有相对应的记录
      • 左外连接:查询左侧表中所有符合条件的数据,即使在右侧表中没有相对应的记录也要查出来
      • tips:
        • 如果外键不能为空,优先使用内连接
        • 如果外键可以为空
          • 假如只需要查询那些在另一张表中有相对应的记录,使用内连接
          • 假如需要查询左侧表中所有符合条件的记录,使用左外连接
  • 一对一:一张表(A)中的一条记录只能对应另一张表(B)中的一条记录,另一张表(B)中的一条记录也只能对应一张表(A)中的一条记录
    • 共享主键:(不推荐)
      • 添加数据:先添加先产生的表,再后产生的表记录
      • 删除数据:先删除后产生的表记录,再删除先产生的表记录
      • 查询数据:无需进行连接查询
    • 唯一外键(一对一就是一种特殊的一对多,操作跟一对多完全一样)
  • 多对多:一张表(A)中的一条记录可以对应另一张表(B)中的多条记录, 另一张表(B)中的一条记录也可以对应一张表(A)中的多条记录
    • 添加数据时,先添加父表记录,再添加子表记录
    • 删除数据时,先删除子表记录,再删除父表记录
    • 查询数据时,可能会进行关联查询
3)关于日期和时间的字段

​ 都按照字符串处理:

  • char(10): yyyy-MM-dd
  • char(19): yyyy-MM-dd HH:mm:ss
4)关于WEB-INF

​ web应用根目录下的内容都是不安全的,外界可以通过url直接访问, 所以,一般为了数据的安全,都会把页面放到WEB-INF下,因为WEB-INF目录下的资源是受保护的,外界不能直接访问。


文章作者: 涂爽
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 涂爽 !
评论
 上一篇
CRM项目SSM框架构建(二) CRM项目SSM框架构建(二)
完成业务: 首页功能 用户登录 安全退出 登录验证 最终效果: 首页功能需求分析用户访问项目首页,首先进入登录页面。 时序&流程 ** 前端要先访问首页index.jsp,再跳转到登录页面login.jsp,但页面资源都WEB
2022-06-23
下一篇 
Redis简介 Redis简介
Redis简介​ Redis是一个用C语言编写的、开源的、基于内存运行并支持持久化的、高性能的NoSQL数据库,也是当前热门的NoSQL数据库之一。 ​ Redis中的数据以K-V模型存储数据,大部分时间都是存储内存中的,适合存储频繁访问、
2022-06-20
  目录