总纲:
1.项目分析
2.项目设计
3.编码
4.测试
CRM项目(客户管理系统项目)
项目采用的技术架构:
视图层(view):展示数据,与用户交互。html、css、js、jquery、bootstrap、jsp
控制层(controller):控制业务处理流程(接收请求,接收参数,封装参数;根据不同的请求调
用业务层处理业务,根据处理结果,返回相应信息)。servlet、springMVC
业务层(service):处理业务逻辑(处理业务的步骤以及业务操作的逻辑性)javaSE
持久层(dao/mappper):访问数据库。jdbc、mybatis
整合层:维护类资源,维护数据库资源。spring(IOC,AOP)
软件公司的组织结构:
研发部(美工、程序员、DBA);测试部;实施部;产品部;运维部;市场部
软件开发的生命周期:
1.招标、投标
2.可行性分析、需求分析
3.分析与设计
项目设计:
物理模型设计:表、字段、字段类型与长度以及表与表之间的关系
逻辑模型设计:类、属性与方法,方法返回值与参数,类与类之间的关系
界面设计:企业级应用(朴素),互联网应用(酷炫)
算法设计
搭建开发环境:
创建项目、添加jar包、添加配置文件、添加静态页面、添加公共类等
CRM项目的核心业务
CRM项目简介:Customer Relationship Management 客户关系管理系统(企业级应用)
系统管理功能:非直接处理业务数据,为保证业务管理系统的安全运行而设计的功能,例如用户登录、安全退出、登录验证
业务管理功能:处理业务数据,包括市场活动、客户与联系人、交易、售后回访、统计图表
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 任务表
主键字段:在数据库表中,如果有一组字段能够唯一确定一条记录,则可以把它们设计成表的主键字段。推荐使用一个字段做主键,而且推荐使用没有业务含义的字段做主键,比如:id等。
主键字段的类型和长度由主键值的生成方式来决定:
主键值的生成方式:
1)自增:借助数据库自身主键生成机制
数值型 长度由数据量来决定
运行效率低
开发效率高
2)assighed:程序员手动生成主键值,唯一非空,算法.
hi/low:数值型 长度由数据量决定
UUID:字符串 长度是32位
3)共享主键:由另一张表的类型和长度决定
tbl_person tbl_card
id name id name
1001 zs 1001 card1
1002 ls
4)联合主键:由多个字段的类型和长度决定
2)外键字段:用来确定表和表之间的关系。
1)一对多:一张表(A)中的一条记录可以对应另一张表(B)中的多条记录;
另一张表(B)中的一条记录只能对应一张表(A)中的一条记录。
A(1)---------B(n)
父表 子表
tbl_student tbl_class
id name class_id id name
1001 zs 111 111 class1
1002 ls 111 222 class2
1003 ww 222
1004 zl
添加数据时,先添加父表记录,再添加子表记录;
删除数据时,先删除子表记录,再删除父表记录;
查询数据时,可能会进行关联查询:
//查询所有姓张的学生的id,name和所在班级name
select s.id,s.name,c.name as className
from tbl_student s
join tbl_class c on s.class_id=c.id//假如外键不可以为空
where s.name like 'z%'
内连接:查询所有符合条件的数据,并且要求结果在两张表中都有相对应的记录
左外连接:查询左侧表中所有符合条件的数据,即使在右侧表中没有相对应的记录
*如果外键不能为空,优先使用内连接;
如果外键可以为空,
--假如只需要查询那些在另一张表中有相对应的记录,使用内连接
--假如需要查询左侧表中所有符合条件的记录,使用左外连接.
2)一对一:一张表(A)中的一条记录只能对应另一张表(B)中的一条记录;
另一张表(B)中的一条记录也只能对应一张表(A)中的一条记录。
tbl_person tbl_card
id name id name
1001 zs 1001 card1
a)共享主键:(不推荐)
添加数据:先添加先产生的表,再后产生的表记录
删除数据:先删除后产生的表记录,再删除先产生的表记录
查询数据:无需进行连接查询
//查询zhangsan的驾照信息 1001
select *
from tbl_card
where id='1001'
b)唯一外键:
tbl_person tbl_card
id name id name person_id(唯一性约束)
1001 zs 111 card1 1001
1002 ls 222 card2 1002
1003 ww 333 card3 1003
*一对一就是一种特殊的一对多。
*操作跟一对多完全一样。
3)多对多:一张表(A)中的一条记录可以对应另一张表(B)中的多条记录;
另一张表(B)中的一条记录也可以对应一张表(A)中的多条记录。
tbl_student tbl_course
id name id name
1001 zs 111 java
1002 ls 222 mysql
tbl_student_course_relation
student_id course_id
1001 111
1001 222
1002 111
1002 222
添加数据时,先添加父表记录(tbl_student,tbl_course),再添加子表(tbl_student_course_relation)记录;
删除数据时,先删除子表记录(tbl_student_course_relation),再删除父表记录(tbl_student,tbl_course)
查询数据时,可能会进行关联查询:
//查询所有姓张的学生的id,name,和所选课程的name
select s.id,s.name,c.name as courseName
from tbl_student s
join tbl_student_course_relation scr on s.id=scr.student_id
join tbl_course c on scr.course_id=c.id
where s.name like 'z%'
3)给关于日期和时间的字段:
都按照字符串处理:
char(10) yyyy-MM-dd
char(19) yyyy-MM-dd HH:mm:ss
2,创建crm的数据库实例:
把sql脚本导入数据库实例:
tbl_user
搭建开发环境:
1)创建项目:crm-project
设置JDK.
创建工程:crm
补全目录结构:
设置编码格式:UTF-8
2)添加jar包:添加依赖
3)添加配置文件
4)添加静态页面资源:
webapps
|->stumgr
|->crm
|->.html,.css,.js,.img test.jsp
|->WEB-INF
|->web.xml
|->classes
|->lib
*web应用根目录下的内容都是不安全的,外界可以通过url直接访问;
所以,一般为了数据的安全,都会把页面放到WEB-INF下,因为WEB-INF目录下的资源是受保护的,外界不能直接访问。
http://127.0.0.1:8080/crm/test.jsp
webapps
|->stumgr
|->crm
|->.css,.js,.img
|->WEB-INF
|->web.xml
|->classes
|->lib
|->pages test.jsp
5)把crm项目部署到tomcat上:
http://127.0.0.1:8080/crm