ps:昨天将管理员登录的功能完成了,并完美的解决跳过登录从而进入管理界面的bug,今天我们将实现"查询用户"功能。

①在po包中创建Customer类,并编写相关变量和添加set/get方法。(相关变量:客户编号,客户名称,负责人id,创建人id,客户信息来源,客户所属行业,客户级别,联系人,固定电话,移动电话,邮政编码,联系地址,创建时间,起始行,所取行数) 然后创建BaseDict类(字典类)

②在dao包中创建CustomerDao接口,接口中包含 通过id查询客户的方法,客户列表方法(List集合)和显示客户数的方法

③在dao包中创建CustomerDao.xml文件,在文件开头我们先编写映射地址,然后编写查询用户的sql语句,其id为
"selectCustomerListWhere" 
然后编写查询客户列表的sql语句(查询客户列表的语句要和字典表结合来查)。之后编写查询客户总数的sql语句。

  1. <mapper namespace="com.yehaijing.core.dao.CustomerDao" >
  2. <!-- 查询客户 -->
  3. <sql id="selectCustomerListWhere">
  4. <where>
  5. <if test="cust_name != null" >
  6. cust_name like "%"#{cust_name}"%"
  7. </if>
  8. <if test="cust_source != null" >
  9. and cust_source = #{cust_source}
  10. </if>
  11. <if test="cust_industry != null" >
  12. and cust_industry = #{cust_industry}
  13. </if>
  14. <if test="cust_level != null" >
  15. and cust_level = #{cust_level}
  16. </if>
  17. </where>
  18. </sql>
  19. <!-- 查询客户列表 -->
  20. <select id="selectCustomerList" parameterType="customer"
  21. resultType="customer">
  22. SELECT
  23. cust_id,
  24. cust_name,
  25. cust_user_id,
  26. cust_create_id,
  27. b.dict_item_name cust_source,
  28. c.dict_item_name cust_industry,
  29. d.dict_item_name cust_level,
  30. cust_linkman,
  31. cust_phone,
  32. cust_mobile,
  33. cust_createtime
  34. FROM
  35. customer a
  36. LEFT JOIN (
  37. SELECT
  38. dict_id,
  39. dict_item_name
  40. FROM
  41. base_dict
  42. WHERE
  43. dict_type_code = '002'
  44. ) b ON a.cust_source = b.dict_id
  45. LEFT JOIN (
  46. SELECT
  47. dict_id,
  48. dict_item_name
  49. FROM
  50. base_dict
  51. WHERE
  52. dict_type_code = '001'
  53. ) c ON a.cust_industry = c.dict_id
  54. LEFT JOIN (
  55. SELECT
  56. dict_id,
  57. dict_item_name
  58. FROM
  59. base_dict
  60. WHERE
  61. dict_type_code = '006'
  1. @Controller
  2. public class CustomerController {
  3. // 依赖注入
  4. @Autowired
  5. private CustomerService customerService;
  6. @Autowired
  7. private BaseDictService baseDictService;
  8. // 客户来源
  9. @Value("${customer.from.type}")
  10. private String FROM_TYPE;
  11. // 客户所属行业
  12. @Value("${customer.industry.type}")
  13. private String INDUSTRY_TYPE;
  14. // 客户级别
  15. @Value("${customer.level.type}")
  16. private String LEVEL_TYPE;
  17. /**
  18. * 客户列表
  19. */
  20. @RequestMapping(value = "/customer/list.action")
  21. public String list(@RequestParam(defaultValue="1")Integer page,
  22. @RequestParam(defaultValue="10")Integer rows,
  23. String custName, String custSource, String custIndustry,
  24. String custLevel, Model model) {
  25. // 条件查询所有客户
  26. Page<Customer> customers = customerService
  27. .findCustomerList(page, rows, custName,
  28. custSource, custIndustry,custLevel);
  29. model.addAttribute("page", customers);
  30. // 客户来源
  31. List<BaseDict> fromType = baseDictService
  32. .findBaseDictByTypeCode(FROM_TYPE);
  33. // 客户所属行业
  34. List<BaseDict> industryType = baseDictService
  35. .findBaseDictByTypeCode(INDUSTRY_TYPE);
  36. // 客户级别
  37. List<BaseDict> levelType = baseDictService
  38. .findBaseDictByTypeCode(LEVEL_TYPE);
  39. // 添加参数
  40. model.addAttribute("fromType", fromType);
  41. model.addAttribute("industryType", industryType);
  42. model.addAttribute("levelType", levelType);
  43. model.addAttribute("custName", custName);
  44. model.addAttribute("custSource", custSource);
  45. model.addAttribute("custIndustry", custIndustry);
  46. model.addAttribute("custLevel", custLevel);
  47. return "customer";
  48. }
  49. }

) d ON a.cust_level = d.dict_id<include
refid="selectCustomerListWhere"/><!-- 执行分页查询 --><if
test="start !=null and rows != null">limit
#{start},#{rows}</if></select><!-- 查询客户总数
--><select id="selectCustomerListCount" parameterType="customer"

resultType="Integer">select count(*) from customer<include
refid="selectCustomerListWhere"/></select>

④在service包中创建CustomerService.java接口和BaseDictService.java接口,并在CustomerService接口中编写通过id查询客户的方法,传入customer对象和查询客户列表的方法。在BaseDict接口中编写根据类别代码查询数据字典的方法
findBaseDictByTypeCode。

⑤在service.impl包中创建CustomerServiceImpl.java接口实现类和BaseDictServiceImpl.java接口实现类,并在方法名上添加@Service注解和在方法内部添加@Autowired自动注入

⑥在Controller包中创建CustomerController.java类,在方法名上方加上@Controller注解,在方法内@Autowired自动注入CustomerService和BaseDictService。

  1. @Controller
  2. public class CustomerController {
  3. // 依赖注入
  4. @Autowired
  5. private CustomerService customerService;
  6. @Autowired
  7. private BaseDictService baseDictService;
  8. // 客户来源
  9. @Value("${customer.from.type}")
  10. private String FROM_TYPE;
  11. // 客户所属行业
  12. @Value("${customer.industry.type}")
  13. private String INDUSTRY_TYPE;
  14. // 客户级别
  15. @Value("${customer.level.type}")
  16. private String LEVEL_TYPE;
  17. /**
  18. * 客户列表
  19. */
  20. @RequestMapping(value = "/customer/list.action")
  21. public String list(@RequestParam(defaultValue="1")Integer page,
  22. @RequestParam(defaultValue="10")Integer rows,
  23. String custName, String custSource, String custIndustry,
  24. String custLevel, Model model) {
  25. // 条件查询所有客户
  26. Page<Customer> customers = customerService
  27. .findCustomerList(page, rows, custName,
  28. custSource, custIndustry,custLevel);
  29. model.addAttribute("page", customers);
  30. // 客户来源
  31. List<BaseDict> fromType = baseDictService
  32. .findBaseDictByTypeCode(FROM_TYPE);
  33. // 客户所属行业
  34. List<BaseDict> industryType = baseDictService
  35. .findBaseDictByTypeCode(INDUSTRY_TYPE);
  36. // 客户级别
  37. List<BaseDict> levelType = baseDictService
  38. .findBaseDictByTypeCode(LEVEL_TYPE);
  39. // 添加参数
  40. model.addAttribute("fromType", fromType);
  41. model.addAttribute("industryType", industryType);
  42. model.addAttribute("levelType", levelType);
  43. model.addAttribute("custName", custName);
  44. model.addAttribute("custSource", custSource);
  45. model.addAttribute("custIndustry", custIndustry);
  46. model.addAttribute("custLevel", custLevel);
  47. return "customer";
  48. }
  49. }

总结:

写到这里,我们的查询客户的功能就全部写完了,回顾一下我们做了什么工作:首先,我们先创建了POJO类(用户类和字典表类),然后我们在dao包中创建了用户类和字典表类的对应接口,并且还对应的创建了xml文件。然后是service类,在service中我们仍然还是创建了接口,并且之后创建了该接口的实现类,最后在controller包中创建了控制类(我觉得这个类相当于一个开关 OFF/ON)。那么将这个项目发布到Tomocat服务器上,浏览器的执行顺序是这样子的:我们在网页上点击操作,然后浏览器首先会查看教程(一)中写好的配置文件(applicationContext.xml等~),然后会首先进入到Controller类中,检查RequestMapping的映射路径(看图)

Boot-crm管理系统开发教程(二)的更多相关文章

  1. Boot-crm管理系统开发教程(总结)

    这个Boot-crm管理系统我花了大概两周写完,因为是刚学完SSM框架,所以立马开始了这个项目,项目初期,运行书本上给的前端代码都报了许多错误,导致这个原因是因为书本给的 设计说明文档 没有看清楚.然 ...

  2. MIP开发教程(二) 使用MIP-CLI工具调试MIP网页

    初始化 MIP 配置 新建一个 MIP 网页 编写 MIP 网页代码 校验 MIP 网页 调试 MIP 网页 1. 初始化 MIP 配置 首先在html目录下进行初始化 MIP 配置: $ mip i ...

  3. 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取

    公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...

  4. XAF应用开发教程(二)业务对象模型之简单类型属性

    使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...

  5. Boot-crm管理系统开发教程(三)

    (ps:前两章我们已经把管理员登录和查看用户的功能实现了,那么今天我们将要实现:添加用户,删除用户,和修改用户功能) 由于Cusomer的POJO类型已经写好了,所以这次我们之前从CustomerCo ...

  6. Odoo 二次开发教程(二)-模块的基础构建

    注:本篇及后续均以8.0为基础. 一. Odoo模块的构成 __init__.py 文件是python包导入所必须的文件,内容可以为空,通常情况下我们用来导入自己写的py文件. __openerp__ ...

  7. 【转载】Vue 2.x 实战之后台管理系统开发(二)

    2. 常见需求 01. 父子组件通信 a. 父 -> 子(父组件传递数据给子组件) 使用 props,具体查看文档 - 使用 Prop 传递数据(cn.vuejs.org/v2/guide/co ...

  8. Boot-crm管理系统开发教程(一)

    ps:上周就把这个项目写完了,一直忘记记录,现在补上. Boot-crm是书上第十八章的内容,书上提供了前端的代码,所以只需要写后端的代码就可以了,①所以我们先把前端的代码移植到项目中. ②然后在li ...

  9. Android OpenGL ES 开发教程 从入门到精通

    感谢,摘自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ...

随机推荐

  1. 定义了char**p,为什么能用p[i][j]的形式?p又不是二维数组?

    char **p;p[i][j]相当于*(*(p+i)+j) https://www.zhihu.com/question/63717863

  2. 简述python中的@staticmethod作用及用法

    关于@staticmethod,这里抛开修饰器的概念不谈,只简单谈它的作用和用法. staticmethod用于修饰类中的方法,使其可以在不创建类实例的情况下调用方法,这样做的好处是执行效率比较高.当 ...

  3. gradle添加阿里云maven库

    用gradle构建spring项目,才发现gradle要添加阿里云maven库和maven不太一样 链接:https://www.cnblogs.com/SiriYang/p/10638365.htm ...

  4. OUC_TeamTraining_#1 720

    D - The Mirror of Galadriel Time Limit:2000MS     Memory Limit:0KB     64bit IO Format:%lld & %l ...

  5. Nginx之最简单的反向代理机制分析

    注:当前分析基于 Nginx之搭建反向代理实现tomcat分布式集群 的配置. 1. 用到的指令 下面介绍在上面的配置中用到的指令. upstream 指令 语法:upstream name { .. ...

  6. Windows Server 2012R2 部署 Domain Controller

    1. Create a machine as Domain Controller; 2. Change DNS server address as 127.0.0.1; 3. Change Compu ...

  7. CentOS服务器安装部署Java环境(jdk,tomcat)

    第一步:卸载openjdk 用命令 java -version,如有下面的信息说明CentOS自带OpenJdk,没安装跳过这一步: 最好还是先卸载掉openjdk,再安装oracle公司的jdk.先 ...

  8. Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  9. Scrapy+redis实现分布式爬虫

    概述 什么是分布式爬虫 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一网络资源进行联合且分布的数据爬取. 原生Scrapy无法实现分布式的原因 原生Scrapy中调度器 ...

  10. Java泛型(4):泛型与匿名内部类

    泛型同样也可以使用在匿名内部类中. 下面的例子是对 Java泛型(3):泛型方法 中例(2)的修改. public interface Generator<T> { T next(); } ...