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)
搭建开发环境
创建空项目,作为项目根目录
设置JDK:File–>Project Structure–>Project–>SDK–>配置JDK1.8
设置编码格式:Setting–>FileEncodings–>(配置Global Encoding:UTF-8, Project Encoding:UTF-8)
配置Maven:Setting–>Build,Execution,Deployment–>Maven–>(配置Maven home path:,User setting file:,Local reposity:)
创建Maven工程
补全目录结构:
添加依赖
pom.xml
<!-- 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>
添加相关配置
Mybatis配置文件mybatis-config.xml
<?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>
配置数据库连接和事务文件applicationContext-datasource.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: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&useUnicode=true&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>
springMVC配置文件applicationContext-mvc.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: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="#{1024*1024*80}"/> <property name="defaultEncoding" value="utf-8"/> </bean> </beans>
spring总配置文件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: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>
web.xml配置
<?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>
添加jar包依赖pom.xml
<?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>
添加静态资源
部署到tomcat上
- 配置tomcat
- 配置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逆向工程
在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>
创建数据库连接信息文件generator.properties
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
修改generatorConfig.xml( 修改代码保存的目录以及表的信息)
<?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="${jdbc.driverLocation}"/> <context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在创建class时,对注释进行控制,false生成注释,true无注释 --> <commentGenerator> <property name="suppressDate" value="false"/> <property name="suppressAllComments" value="false"/> </commentGenerator> <!--jdbc的数据库连接 --> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}"> </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>
双击执行Maven,mybatis-generator:generate
创建成功后:
复习知识点
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目录下的资源是受保护的,外界不能直接访问。