《数据库技术课程设计》
设计文档
题 目 客户管理系统系统
教 师
院 系 计算机科学与技术系
专 业 计算机科学与技术
班 级
目录:
第一章 概述................................................................................................................... 1
1.1 背景.................................................................................................................. 1
1.2 可行性分析....................................................................................................... 1
第二章 需求分析............................................................................................................ 2
2.1 开发运行环境.................................................................................................... 2
2.2 功能模块划分.................................................................................................... 2
2.3 需求模型........................................................................................................... 3
第三章 软件设计............................................................................................................ 4
3.1 设计方案........................................................................................................... 4
3.2 数据库设计....................................................................................................... 5
第四章 源代码................................................................................................................ 6
4.1 关键类清单....................................................................................................... 6
4.2 代码清单........................................................................................................... 7
4.3 源代码............................................................................................................... 8
第五章 总结................................................................................................................. 69
第一章 概述
1.1 开发目的和意义
CRM(Customer Relationship Management)客户关系管理是管理企业与客户之间关系的新型管理机制。终极目标是吸引新客户、保留老客户以及将已有客户转变为忠诚客户,以增加市场份额。
它是一个完整的客户关系管理系统,包括市场、销售、服务3大环节,产品成熟,操作简单,功能强大。帮您从客户全生命周期的各个阶段获取价值。
这是一类软件,很多公司专门做这种CRM系统。我们这个系统,是从咱们一个非常有名的专门致力于CRM项目开发的公司中拿过来的。不同行业的CRM,功能一点都不一样,它是由销售模式来决定的,你比如有分销和直销。
CRM为改善企业与客户之间关系的提供了一种新型管理机制,企业可以规划市场营销活动、增加销售线索、规范客户联系人信息、对不同阶段的交易进行有效区分和统计、妥善安排售后回访、为决策提供支撑等,优化各业务环节,减少各环节客户流失,和公司成本。当然,我们不是全部都做,我们只是拿出来其中的某几个模块来做。
1.2 可行性分析(管理、技术可行性分析)
1)管理上的可行性分析
由此系统的开发,可以节约大量的时间,使得管理人员和员工能够及时获得客户个性化的需求,此外客户关系管理不再是局部的,不再只是销售人员或服务人员所关心的,而是成为企业的核心。
- 技术上的可行性分析
信息技术的发展对于客户管理系统给予了强有力的支持,本系统采用java开发语言进行实现,用了ssm框架+jsp+jquery技术和mysql数据库,这些技术都是在校学习期间老师教过和我们自学过,技术不是很难通过一定时间的学习和积累,还有就是该客户管理系统并不是完整的功能,有些很复杂的功能不好实现,所以就没去代码实现,但是将简单较为容易的功能技术大体都实现了,所以将这些技术用于实现客户管理系统是可行的。
第二章 需求分析
2.1 开发运行环境
硬件:Pentium以上的计算机。
软件:Windows 10操作系统、MySql数据库、IDEA编辑器、JDK1.8,tomcat服务器等集成环境。
2.2 功能模块划分
客户管理系统模块的划分如下
2.3 需求模型
图2‑1系统的需求分析结构图
图 2‑2市场活动模块图
图 2‑3用例图
第三章 软件设计
3.1 设计方案
系统有登录页面,主页面,每个模块的主页面以及详细跳转页面等。
登录页面:用户在登录页面,输入用户名和密码,点击"登录"按钮或者回车,完成用户登录的功能.
*用户名和密码不能为空
*用户名或者密码错误,用户已过期,用户状态被锁定,ip受限 都不能登录成功
*登录成功之后,所有业务页面显示当前用户的名称
*实现10天记住密码
*登录成功之后,跳转到业务主页面
*登陆失败后,提示信息,不跳转页面
主功能页面中,通过三七分页面,左边三分页面设有导航栏,导航栏中分成不同的管理模块,点击可跳转。主要功能界面在中间,默认页面为为一张图,同时数据库中的各种信息通过导入,显示在主功能界面中。
每个模块主页面中,右边显示区头位置设有创建、修改、删除以及多条件查询功能按钮,显示区的最下方则是一个分页导航栏可以知道有多少条记录,显示每页的记录条数还有具体第几页的信息,首页末页都可以通过点击实现跳转到具体页查看信息,还能对每页显示条数进行修改。
3.2 数据库设计
系统中的表单来源于数据库,系统中添加、删除、修改等操作又在数据库中显现。数据库中分别设有 tbl_activity,tbl_activity_remark,tbl_clue,tbl_clue_activity_relation,tbl_clue_remark,tbl_contacts,tbl_contacts_activity_relation,tbl_contacts_remark,tbl_customer,tbl_customer_remark,tbl_dic_type,tbl_dic_value,tbl_tran,tbl_tran_history,tbl_tran_remark,tbl_user共16张表及其相关属性。
表3‑1数据库设计表
第四章 源代码
4.1 代码清单
图4‑1代码清单图1
图 4‑2代码清单图2
4.2 部分源代码
package cn.szw.crm.workbench.web.Controller;
import cn.szw.crm.commons.constant.Constants;
import cn.szw.crm.commons.domain.ReturnObject;
import cn.szw.crm.commons.utils.DateUtils;
import cn.szw.crm.commons.utils.HSSFUtIls;
import cn.szw.crm.commons.utils.UUIDUtils;
import cn.szw.crm.setting.domain.User;
import cn.szw.crm.setting.service.UserService;
import cn.szw.crm.workbench.domain.Activity;
import cn.szw.crm.workbench.domain.ActivityRemark;
import cn.szw.crm.workbench.service.ActivityRemarkService;
import cn.szw.crm.workbench.service.ActivityService;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.util.*;
/**
* @author 宋祖威 20级
* @date 2022/9/21 19:56
* @slogn 致未来的你!
*/
@Controller
public class ActivityController {
@Autowired
private UserService userService;
@Autowired
private ActivityRemarkService activityRemarkService;
@Autowired
private ActivityService activityService;
@RequestMapping("/workbench/activity/index")
public String index(HttpServletRequest request){
//调用service层方法来查询所有的用户
List<User> userList = userService.queryAllUsers();
//把数据保存到request中
request.setAttribute("userList",userList);
//转发到市场活动的主页面
return "workbench/activity/index";
}
@RequestMapping("/workbench/activity/saveCreateActivity")
@ResponseBody
public Object saveCreateActivity(Activity activity, HttpSession session){
User user = (User)session.getAttribute(Constants.SESSION_USER);
//封装参数
activity.setId(UUIDUtils.getUUID());
activity.setCreateTime(DateUtils.formateDateTime(new Date()));
activity.setCreateBy(user.getId());
ReturnObject returnObject = new ReturnObject();
try{
//调用service层用法,保存创建的市场活动
int i = activityService.saveCreateActivity(activity);
if(i>0){
returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);
}else {
returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后重试....");
}
}catch (Exception e){
e.printStackTrace();
returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后重试....");
}
return returnObject;
}
@RequestMapping("/workbench/activity/queryActivityByConditionForPage")
@ResponseBody
public Object queryActivityByConditionForPage(String name,String owner,String starDate,String endDate,
Integer pageNo,Integer pageSize){
//封装参数
Map<String,Object> map = new HashMap<>();
map.put("name",name);
map.put("owner",owner);
map.put("startDate",starDate);
map.put("endDate",endDate);
map.put("pageSize",pageSize);
map.put("beginNo",(pageNo-1)*pageSize);
//调用service层方法 查询数据
List<Activity> activityList = activityService.queryActivityByConditionForPage(map);
int totalRows = activityService.queryCountOfActivityByCondition(map);
//根据查询结果生成响应信息
Map<String,Object> resMap = new HashMap<>();
resMap.put("activityList",activityList);
resMap.put("totalRows",totalRows);
return resMap;
}
@RequestMapping("/workbench/activity/deleteActivityIds")
@ResponseBody
public Object deleteActivityIds(String[] id){
ReturnObject returnObject = new ReturnObject();
try{
//调用service层方法,删除市场活动
int i = activityService.deleteActivityByIds(id);
if(i>0){
returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);
}else{
returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后重试。。。");
}
}catch (Exception e){
e.printStackTrace();
returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后重试。。。");
}
return returnObject;
}
@ResponseBody
@RequestMapping("/workbench/activity/queryActivityById")
public Object queryActivityById(String id){
//调用service层方法 查询市场活动
Activity activity = activityService.queryActivityById(id);
//根据查询结果返回相应信息
return activity;
}
@RequestMapping("/workbench/activity/saveEditActivity")
@ResponseBody
public Object saveEditActivity(Activity activity,HttpSession httpSession){
User user = (User) httpSession.getAttribute(Constants.SESSION_USER);
//封装参数
activity.setEditTime(DateUtils.formateDateTime(new Date()));
activity.setEditBy(user.getId());
ReturnObject returnObject = new ReturnObject();
try{
//调用service层方法 保存修改的市场活动
int i = activityService.saveEditActivity(activity);
if(i>0){
returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);
}else{
returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后");
}
}catch (Exception e){
e.printStackTrace();
returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后");
}
return returnObject;
}
@RequestMapping("/workbench/activity/fileDownload")
public void fileDownload(HttpServletResponse response) throws IOException {
//1.设置响应类型
response.setContentType("application/octet-stream;charset=UTF-8");
//2.获取输出流
ServletOutputStream writer = response.getOutputStream();
//浏览器接收到相应信息后 默认情况下 直接在显示窗口中打开响应信息 即使打不开也会调用电脑上的应用程序打开
//只有实在打不开才会激活文件下载 可以设置响应头信息 使浏览器接收到响应信息后直接激活文件下载窗口 即使能打开也不能打开
response.addHeader("Content-Disposition","attachment;filename=mystudent.xls");
//读取磁盘上的excel文件(InputStream) 把输出到浏览器(OutPutStream)
FileInputStream fileInputStream = new FileInputStream("D:\\douban\\student.xls");
byte[] buff = new byte[256];
int len=0;
while( (len=fileInputStream.read(buff))!=-1){
writer.write(buff,0,len);
}
//关闭资源
fileInputStream.close();
writer.flush();
}
@RequestMapping("/workbench/activity/exportAllActivitys")
public void exportAllActivitys(HttpServletResponse response) throws IOException {
//调用service层方法 去查询所有的市场活动
List<Activity> activities = activityService.queryAllActivitys();
//创建excel表 把activityList写入到excel表中
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("市场活动列表");
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue("ID");
cell = row.createCell(1);
cell.setCellValue("所有者");
cell = row.createCell(2);
cell.setCellValue("名称");
cell = row.createCell(3);
cell.setCellValue("开始日期");
cell = row.createCell(4);
cell.setCellValue("结束日期");
cell = row.createCell(5);
cell.setCellValue("成本");
cell = row.createCell(6);
cell.setCellValue("描述");
cell = row.createCell(7);
cell.setCellValue("创建时间");
cell = row.createCell(8);
cell.setCellValue("创建者");
cell = row.createCell(9);
cell.setCellValue("修改时间");
cell = row.createCell(10);
cell.setCellValue("修改者");
//遍历activities创建HSSFRow对象 生成所有的数据
Activity activity = null;
if(activities!=null&activities.size()>0){
for(int i = 0 ; i < activities.size();i++){
activity = activities.get(i);
//每遍历出一个activity 生成一行
row = sheet.createRow(i + 1);
//每一行都创建11列 每列数据从activities中获取
cell = row.createCell(0);
cell.setCellValue(activity.getId());
cell = row.createCell(1);
cell.setCellValue(activity.getOwner());
cell = row.createCell(2);
cell.setCellValue(activity.getName());
cell = row.createCell(3);
cell.setCellValue(activity.getStartDate());
cell = row.createCell(4);
cell.setCellValue(activity.getEndDate());
cell = row.createCell(5);
cell.setCellValue(activity.getCost());
cell = row.createCell(6);
cell.setCellValue(activity.getDescription());
cell = row.createCell(7);
cell.setCellValue(activity.getCreateTime());
cell = row.createCell(8);
cell.setCellValue(activity.getCreateBy());
cell = row.createCell(9);
cell.setCellValue(activity.getEditTime());
cell = row.createCell(10);
cell.setCellValue(activity.getEditBy());
}
}
//根据wb对象生成excele文件
// FileOutputStream fileOutputStream = new FileOutputStream("D:\\douban\\activity.xls");
// wb.write(fileOutputStream);
// fileOutputStream.close();
// wb.close();
//把生成的excel文件下载到用户客户端
response.setContentType("application/octet-stream;charset=UTF-8");
response.addHeader("Content-Disposition","attachment;filename=activity.xls");
ServletOutputStream outputStream = response.getOutputStream();
// FileInputStream fileInputStream = new FileInputStream("D:\\douban\\activity.xls");
// byte[] buff = new byte[256];
// int len=0;
// while((len=fileInputStream.read(buff))!=-1){
// outputStream.write(buff,0,len);
// }
// fileInputStream.close();
wb.write(outputStream);
wb.close();
outputStream.flush();
}
/**
* 配置springmvc的文件上传解析器
* @param username
* @param myFile
* @return
*/
@RequestMapping("/workbench/activity/fileUpload")
@ResponseBody
public Object fileUpload(String username, MultipartFile myFile) throws IOException {
//把文本数据打印到控制台
System.out.println("username:"+username);
//把文件在服务器指定目录上生成一个同样的文件
String originalFilename = myFile.getOriginalFilename();
File file = new File("D:\\douban\\"+originalFilename);//路径必须手动创建好,文件如果不存在会自动创建
myFile.transferTo(file);
//返回响应信息
ReturnObject returnObject = new ReturnObject();
returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);
returnObject.setMessage("上传成功");
return returnObject;
}
@RequestMapping("/workbench/activity/importAllActivitys")
@ResponseBody
public Object importAllActivitys(MultipartFile activityFile,HttpSession session){
User user = (User) session.getAttribute(Constants.SESSION_USER);
ReturnObject returnObject = new ReturnObject();
try {
//把excel文件上传到磁盘目录上
/*String originalFilename = activityFile.getOriginalFilename();
File file = new File("D:\\douban\\"+originalFilename);//路径必须手动创建好,文件如果不存在会自动创建
activityFile.transferTo(file);*/
//解析excel文件 获取文件中的数据 并且封装成activityList
// FileInputStream fileInputStream = new FileInputStream("D:\\douban\\" + originalFilename);
InputStream inputStream = activityFile.getInputStream();
HSSFWorkbook wb = new HSSFWorkbook(inputStream);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
Activity activity = null;
List<Activity>activityList = new ArrayList<>();
for(int i = 1; i <=sheet.getLastRowNum();i++){
row = sheet.getRow(i);
activity = new Activity();
activity.setId(UUIDUtils.getUUID());
activity.setOwner(user.getId());
activity.setCreateTime(DateUtils.formateDateTime(new Date()));
activity.setCreateBy(user.getId());
for(int j = 0;j<row.getLastCellNum();j++ ){
cell = row.getCell(j);
String value = HSSFUtIls.getCellValueForStr(cell);
if(j==0){
activity.setName(value);
}else if(j==1){
activity.setStartDate(value);
}else if(j==2){
activity.setEndDate(value);
}else if(j==3){
activity.setCost(value);
}else if(j==4){
activity.setDescription(value);
}
}
//每一行所有的列都封装完成后 把activity
activityList.add(activity);
}
//调用service层方法 保持市场活动
int i = activityService.saveCreateActivityByList(activityList);
returnObject.setCode(Constants.RETURN_OBJECT_CODE_SUCCESS);
returnObject.setReturnDate(i);
} catch (Exception e) {
e.printStackTrace();
returnObject.setCode(Constants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("系统忙,请稍后重试...");
}
return returnObject;
}
@RequestMapping("/workbench/activity/detailActivity")
public String detailActivity(String id,HttpServletRequest request){
//调用service层方法查询数据
Activity activity = activityService.queryActivityForDetailById(id);
List<ActivityRemark> remarkList = activityRemarkService.queryActivityRemarkForDetailByActivityId(id);
//把数据保持到作用域request
request.setAttribute("activity",activity);
request.setAttribute("remarkList",remarkList);
//请求转发
return "workbench/activity/detail";
}
}
package cn.szw.crm.workbench.service;
import cn.szw.crm.workbench.domain.Activity;
import java.util.List;
import java.util.Map;
/**
* @author 宋祖威 20级
* @date 2022/9/21 21:00
* @slogn 致未来的你!
*/
public interface ActivityService {
int saveCreateActivity(Activity activity);
List<Activity> queryActivityByConditionForPage(Map<String,Object> map);
int queryCountOfActivityByCondition(Map<String,Object> map);
int deleteActivityByIds(String[] ids);
Activity queryActivityById(String id);
int saveEditActivity(Activity activity);
List<Activity> queryAllActivitys();
int saveCreateActivityByList(List<Activity> activityList);
Activity queryActivityForDetailById(String id);
List<Activity> queryActivityForDetailByClueId(String clueId);
List<Activity> queryActivityForDetailByNameClueId(Map<String,Object> map);
List<Activity> queryActivityForDetailByIds(String[] ids);
List<Activity> queryActivityForConvertByNameClueId(Map<String,Object> map);
}
package cn.szw.crm.workbench.service.impl;
import cn.szw.crm.workbench.domain.Activity;
import cn.szw.crm.workbench.mapper.ActivityMapper;
import cn.szw.crm.workbench.service.ActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @author 宋祖威 20级
* @date 2022/9/21 21:03
* @slogn 致未来的你!
*/
@Service("activityService")
public class ActivityServiceImpl implements ActivityService {
@Autowired
private ActivityMapper activityMapper;
@Override
public int saveCreateActivity(Activity activity) {
return activityMapper.insertActivity(activity);
}
@Override
public List<Activity> queryActivityByConditionForPage(Map<String, Object> map) {
return activityMapper.selectActivityByConditionForPage(map);
}
@Override
public int queryCountOfActivityByCondition(Map<String, Object> map) {
return activityMapper.selectCountOfActivityByCondition(map);
}
@Override
public int deleteActivityByIds(String[] ids) {
return activityMapper.deldetActivityByIds(ids);
}
@Override
public Activity queryActivityById(String id) {
return activityMapper.selectActivityById(id);
}
@Override
public int saveEditActivity(Activity activity) {
return activityMapper.updateActivity(activity);
}
@Override
public List<Activity> queryAllActivitys() {
return activityMapper.selectAllActivitys();
}
@Override
public int saveCreateActivityByList(List<Activity> activityList) {
return activityMapper.insertActivityByList(activityList);
}
@Override
public Activity queryActivityForDetailById(String id) {
return activityMapper.selectActivityForDetailById(id);
}
@Override
public List<Activity> queryActivityForDetailByClueId(String clueId) {
return activityMapper.selectActivityForDetailByClueId(clueId);
}
@Override
public List<Activity> queryActivityForDetailByNameClueId(Map<String, Object> map) {
return activityMapper.selectActivityForDetailByNameClueId(map);
}
@Override
public List<Activity> queryActivityForDetailByIds(String[] ids) {
return activityMapper.selectActivityForDetailByIds(ids);
}
@Override
public List<Activity> queryActivityForConvertByNameClueId(Map<String, Object> map) {
return activityMapper.selectActivityForConvertByNameClueId(map);
}
}
package cn.szw.crm.workbench.mapper;
import cn.szw.crm.workbench.domain.Activity;
import java.util.List;
import java.util.Map;
public interface ActivityMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table tbl_activity
*
* @mbg.generated Wed Sep 21 20:54:17 CST 2022
*/
int deleteByPrimaryKey(String id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table tbl_activity
*
* @mbg.generated Wed Sep 21 20:54:17 CST 2022
*/
int insertSelective(Activity record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table tbl_activity
*
* @mbg.generated Wed Sep 21 20:54:17 CST 2022
*/
Activity selectByPrimaryKey(String id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table tbl_activity
*
* @mbg.generated Wed Sep 21 20:54:17 CST 2022
*/
int updateByPrimaryKeySelective(Activity record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table tbl_activity
*
* @mbg.generated Wed Sep 21 20:54:17 CST 2022
*/
int updateByPrimaryKey(Activity record);
/**
保存创建的市场活动
*/
int insertActivity(Activity activity);
/**
* 根据条件分页查询
* @param map
* @return
*/
List<Activity> selectActivityByConditionForPage(Map<String,Object> map);
/**
* 根据条件查询市场活动的总条数
* @param map
* @return
*/
int selectCountOfActivityByCondition(Map<String,Object> map);
/**
* 根据Ids批量删除市场活动
* @param ids
* @return
*/
int deldetActivityByIds(String[] ids);
/**
* 根据id查询市场活动的信息
* @param id
* @return
*/
Activity selectActivityById(String id);
/**
* 保存修改的市场活动
* @param activity
* @return
*/
int updateActivity(Activity activity);
/**
* 查询所有的市场活动
* @return
*/
List<Activity> selectAllActivitys();
/**
* 批量保持创建的市场活动
* @param activityList
* @return
*/
int insertActivityByList(List<Activity> activityList);
/**
* 根据id查询市场活动明细信息
* @param id
* @return
*/
Activity selectActivityForDetailById(String id);
/**
* 根据clueId查询该线索相关联的市场活动的明细信息
* @param clueId
* @return
*/
List<Activity> selectActivityForDetailByClueId(String clueId);
/**
* 根据name模糊查询市场活动并且把已经跟clueId关联过的市场活动排除
* @param map
* @return
*/
List<Activity> selectActivityForDetailByNameClueId(Map<String,Object> map);
/**
* 根据ids查询市场活动的明细
* @param ids
* @return
*/
List<Activity> selectActivityForDetailByIds(String[] ids);
/**
* 根据name 模糊查询市场活动 并且查询哪些跟clueId关联过的
* @param map
* @return
*/
List<Activity> selectActivityForConvertByNameClueId(Map<String,Object> map);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.szw.crm.workbench.mapper.ActivityMapper">
<resultMap id="BaseResultMap" type="cn.szw.crm.workbench.domain.Activity">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
<id column="id" jdbcType="CHAR" property="id" />
<result column="owner" jdbcType="CHAR" property="owner" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="start_date" jdbcType="CHAR" property="startDate" />
<result column="end_date" jdbcType="CHAR" property="endDate" />
<result column="cost" jdbcType="VARCHAR" property="cost" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="create_time" jdbcType="CHAR" property="createTime" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="edit_time" jdbcType="CHAR" property="editTime" />
<result column="edit_by" jdbcType="VARCHAR" property="editBy" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
id, owner, name, start_date, end_date, cost, description, create_time, create_by,
edit_time, edit_by
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
select
<include refid="Base_Column_List" />
from tbl_activity
where id = #{id,jdbcType=CHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
delete from tbl_activity
where id = #{id,jdbcType=CHAR}
</delete>
<insert id="insertActivity" parameterType="cn.szw.crm.workbench.domain.Activity">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
insert into tbl_activity (id, owner, name, start_date, end_date, cost, description, create_time, create_by)
values (#{id,jdbcType=CHAR}, #{owner,jdbcType=CHAR}, #{name,jdbcType=VARCHAR}, #{startDate,jdbcType=CHAR}, #{endDate,jdbcType=CHAR}, #{cost,jdbcType=VARCHAR},
#{description,jdbcType=VARCHAR}, #{createTime,jdbcType=CHAR}, #{createBy,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="cn.szw.crm.workbench.domain.Activity">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
insert into tbl_activity
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="owner != null">
owner,
</if>
<if test="name != null">
name,
</if>
<if test="startDate != null">
start_date,
</if>
<if test="endDate != null">
end_date,
</if>
<if test="cost != null">
cost,
</if>
<if test="description != null">
description,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="createBy != null">
create_by,
</if>
<if test="editTime != null">
edit_time,
</if>
<if test="editBy != null">
edit_by,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=CHAR},
</if>
<if test="owner != null">
#{owner,jdbcType=CHAR},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="startDate != null">
#{startDate,jdbcType=CHAR},
</if>
<if test="endDate != null">
#{endDate,jdbcType=CHAR},
</if>
<if test="cost != null">
#{cost,jdbcType=VARCHAR},
</if>
<if test="description != null">
#{description,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=CHAR},
</if>
<if test="createBy != null">
#{createBy,jdbcType=VARCHAR},
</if>
<if test="editTime != null">
#{editTime,jdbcType=CHAR},
</if>
<if test="editBy != null">
#{editBy,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="cn.szw.crm.workbench.domain.Activity">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
update tbl_activity
<set>
<if test="owner != null">
owner = #{owner,jdbcType=CHAR},
</if>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="startDate != null">
start_date = #{startDate,jdbcType=CHAR},
</if>
<if test="endDate != null">
end_date = #{endDate,jdbcType=CHAR},
</if>
<if test="cost != null">
cost = #{cost,jdbcType=VARCHAR},
</if>
<if test="description != null">
description = #{description,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=CHAR},
</if>
<if test="createBy != null">
create_by = #{createBy,jdbcType=VARCHAR},
</if>
<if test="editTime != null">
edit_time = #{editTime,jdbcType=CHAR},
</if>
<if test="editBy != null">
edit_by = #{editBy,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=CHAR}
</update>
<update id="updateByPrimaryKey" parameterType="cn.szw.crm.workbench.domain.Activity">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Sep 21 20:54:17 CST 2022.
-->
update tbl_activity
set owner = #{owner,jdbcType=CHAR},
name = #{name,jdbcType=VARCHAR},
start_date = #{startDate,jdbcType=CHAR},
end_date = #{endDate,jdbcType=CHAR},
cost = #{cost,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=CHAR},
create_by = #{createBy,jdbcType=VARCHAR},
edit_time = #{editTime,jdbcType=CHAR},
edit_by = #{editBy,jdbcType=VARCHAR}
where id = #{id,jdbcType=CHAR}
</update>
<select id="selectActivityByConditionForPage" resultMap="BaseResultMap">
select a.id,u1.name as owner,a.name,a.start_date,a.end_date,a.cost,a.description,a.create_time,
u2.name as create_by,a.edit_time,u3.name as edit_by
from tbl_activity a
join tbl_user u1 on a.owner=u1.id
join tbl_user u2 on a.create_by=u2.id
left join tbl_user u3 on a.edit_by=u3.id
<where>
<if test="name!=null and name!=''">
and a.name like '%' #{name} '%'
</if>
<if test="owner!=null and owner!=''">
and u1.name like '%' #{owner} '%'
</if>
<if test="startDate!=null and startDate!=''">
and a.start_date>=#{starDate}
</if>
<if test="endDate!=null and endDate!=''">
and a.end_date<=#{endDate}
</if>
</where>
order by a.create_time desc
limit #{beginNo},#{pageSize}
</select>
<select id="selectCountOfActivityByCondition" resultType="java.lang.Integer">
select count(*)
from tbl_activity a
join tbl_user u1 on a.owner=u1.id
join tbl_user u2 on a.create_by=u2.id
left join tbl_user u3 on a.edit_by=u3.id
<where>
<if test="name!=null and name!=''">
and a.name like '%' #{name} '%'
</if>
<if test="owner!=null and owner!=''">
and u1.name like '%' #{owner} '%'
</if>
<if test="startDate!=null and startDate!=''">
and a.start_date>=#{starDate}
</if>
<if test="endDate!=null and endDate!=''">
and a.end_date<=#{endDate}
</if>
</where>
</select>
<delete id="deldetActivityByIds" parameterType="string">
delete from tbl_activity
where id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
<select id="selectActivityById" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"></include>
from tbl_activity
where id=#{id}
</select>
<update id="updateActivity">
update tbl_activity
set owner=#{owner},name=#{name},start_date=#{startDate},
end_date=#{endDate},cost=#{cost},description=#{description},
edit_time=#{editTime},edit_by=#{editBy}
where id=#{id}
</update>
<select id="selectAllActivitys" resultMap="BaseResultMap">
select a.id,u1.name as owner,a.name,a.start_date,a.end_date,a.cost,a.description,a.create_time,
u2.name as create_by,a.edit_time,u3.name as edit_by
from tbl_activity a
join tbl_user u1 on a.owner=u1.id
join tbl_user u2 on a.create_by=u2.id
left join tbl_user u3 on a.edit_by=u3.id
order by a.create_time desc
</select>
<insert id="insertActivityByList">
insert into tbl_activity ( id, owner, name, start_date, end_date, cost, description, create_time, create_by)
values
<foreach collection="list" item="obj" separator=",">
(#{obj.id},#{obj.owner},#{obj.name},#{obj.startDate},#{obj.endDate},#{obj.cost},#{obj.description},#{obj.createTime},#{obj.createBy})
</foreach>
</insert>
<select id="selectActivityForDetailById" resultMap="BaseResultMap">
select a1.id,u1.name as owner,a1.name,a1.start_date,a1.end_date,a1.cost,a1.description,a1.create_time
,u2.name as create_by,a1.edit_time,u3.name as edit_by
from tbl_activity a1
join tbl_user u1 on a1.owner=u1.id
join tbl_user u2 on a1.create_by=u2.id
left join tbl_user u3 on a1.edit_by=u3.id
where a1.id =#{id}
</select>
<select id="selectActivityForDetailByClueId" resultMap="BaseResultMap">
select a.id,a.name,a.start_date,a.end_date,u.name as owner
from tbl_activity a
join tbl_user u on a.owner=u.id
join tbl_clue_activity_relation car on a.id=car.activity_id
where car.clue_id=#{clueId}
</select>
<select id="selectActivityForDetailByNameClueId" resultMap="BaseResultMap">
select a.id,a.name,a.start_date,a.end_date,u.name as owner
from tbl_activity a
join tbl_user u on a.owner=u.id
where a.name like '%' #{activityName} '%'
and a.id not in (
select activity_id
from tbl_clue_activity_relation
where clue_id=#{clueId}
)
</select>
<select id="selectActivityForDetailByIds" resultMap="BaseResultMap">
select a.id,a.name,a.start_date,a.end_date,u.name as owner
from tbl_activity a
join tbl_user u on a.owner=u.id
where a.id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
<select id="selectActivityForConvertByNameClueId" resultMap="BaseResultMap">
select a.id,a.name,a.start_date,a.end_date,u.name as owner
from tbl_activity a
join tbl_user u on a.owner=u.id
where a.name like '%' #{activityName} '%' and a.id in(
select activity_id
from tbl_clue_activity_relation
where clue_id=#{clueId}
)
</select>
</mapper>
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="cn.szw.crm.setting.service"/>
<context:component-scan base-package="cn.szw.crm.workbench.service"/>
<import resource="applicationContext-datasource.xml"></import>
</beans>
<?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.cj.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="szw123"/>
<property name="url" value="jdbc:mysql://localhost:3306/crm?serverTimezone=UTC"/>
</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="cn.szw.crm.setting.mapper,cn.szw.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(* cn.szw.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>
<?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: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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--springmvc的配置文件,包含网站跳转的逻辑的控制 配置-->
<context:component-scan base-package="cn.szw.crm.controller"></context:component-scan>
<context:component-scan base-package="cn.szw.crm.setting.controller"></context:component-scan>
<context:component-scan base-package="cn.szw.crm.workbench.web.Controller"></context:component-scan>
<!--配置视图解析器 方便页面返回-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--俩个标准配置-->
<!--springmvc不能处理的请求交给tomcat-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!--mvc注解驱动 支持springmvc更高级的一些功能 JSR303校验,快捷的ajax请求 映射动态请求-->
<mvc:annotation-driven></mvc:annotation-driven>
<mvc:interceptors>
<mvc:interceptor>
<!--配置拦截的请求-->
<mvc:mapping path="/settings/**"/>
<mvc:mapping path="/workbench/**"/>
<!--配置排除拦截的请求(排除的优先级高)-->
<mvc:exclude-mapping path="/settings/qx/user/tologin"/>
<mvc:exclude-mapping path="/settings/qx/user/login"/>
<!--拦截器类-->
<bean class="cn.szw.crm.setting.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!--配置文件上传解析器 id:必须是multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="#{1024*1024*5}"></property>
<property name="defaultEncoding" value="utf-8"></property>
</bean>
</beans>
<?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="cn.szw.crm.workbench.domain"
targetProject="E:/myjava/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="cn.szw.crm.workbench.mapper"
targetProject="E:/myjava/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="cn.szw.crm.workbench.mapper"
targetProject="E:/myjava/crm/src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="tbl_tran_history" domainObjectName="TranHistory"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
<!-- <table tableName="tbl_tran_remark" domainObjectName="TranRemark"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>-->
<!-- <table tableName="tbl_tran" domainObjectName="Tran"
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_remark" domainObjectName="CustomerRemark"
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_customer" domainObjectName="Customer"
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_clue" domainObjectName="Clue"-->
<!-- enableCountByExample="false" enableUpdateByExample="false"-->
<!-- enableDeleteByExample="false" enableSelectByExample="false"-->
<!-- selectByExampleQueryId="false">-->
<!-- </table>-->
<!-- <table tableName="tbl_dic_value" domainObjectName="DicValue"-->
<!-- enableCountByExample="false" enableUpdateByExample="false"-->
<!-- enableDeleteByExample="false" enableSelectByExample="false"-->
<!-- selectByExampleQueryId="false">-->
<!-- </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_user" domainObjectName="User"
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>
-->
</context>
</generatorConfiguration>
4.3源代码包
第五章 总结
通过这段时间对客户管理系统的建立学习,我们都学到了很多东西。不仅复习到了很多Java的基本知识,更在此基础上学习了ssm框架如何利用框架知识搭建更大的逻辑结构。不仅掌握了数据库基本的增删查改,外键的添加使用,还掌握了有数据库批量插入等操作还有数据库之间的几种关系(一对一,一对多,多对多),学习到了jsp页面相关的前端技术ajax,juqey技术等。并且,在这十天中,我们还体验到了团队协作的强大,我们将整个系统分为若干个模块,将这几个模块分别交给不同的成员完成,最终进行整合和完善,整个过程中虽然有遇到麻烦,但是在团队成员的不懈努力和网上查阅资料,我们将难题一一攻克,我们认为这样的企业级项目非常有意义。