Java之CRM客户关系管理系统教程+源代码,SpringMVC+Mybatis(SSM项目)

在这里插入图片描述

(2)创建JSP目录

在这里插入图片描述

(3)创建springmvc.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:p=“http://www.springframework.org/schema/p”

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-4.0.xsd

http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

<context:component-scan base-package=“com.itzheng.crm.controller” />

<mvc:annotation-driven />

(四)Web.xml文件

配置Spring

配置前端控制器

在这里插入图片描述

<?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_2_5.xsd”

id=“WebApp_ID” version=“2.5”>

boot-crm

index.html

index.htm

index.jsp

default.html

default.htm

default.jsp

contextConfigLocation

classpath:spring/applicationContext-*.xml

org.springframework.web.context.ContextLoaderListener

encoding

org.springframework.web.filter.CharacterEncodingFilter

encoding

/*

boot-crm

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring/springmvc.xml

1

boot-crm

*.action

四、静态资源加入


下载JSP页面代码直接导入到项目当中:JSP页面下载地址:https://download.csdn.net/download/qq_44757034/16528744

在这里插入图片描述

1、创建控制器:CustomerController

在这里插入图片描述

package com.itzheng.crm.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

/*

  • 客户信息请求处理

*/

@Controller

@RequestMapping(“customer”)

public class CustomerController {

@RequestMapping(“list”)

public String list() {

return “customer”;

}

}

2、创建customer.jsp

在这里插入图片描述

<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8”%>

<%@ page trimDirectiveWhitespaces=“true”%>

<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

<%@ taglib prefix=“itzheng” uri=“http://itzheng.cn/common/”%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:” + request.getServerPort()

  • path + “/”;

%>

客户列表-BootCRM

type=“text/css”>

type=“text/css”>

style=“margin-bottom: 0”>

<button type=“button” class=“navbar-toggle” data-toggle=“collapse”

data-target=“.navbar-collapse”>

Toggle navigation <span

class=“icon-bar”> <span

class=“icon-bar”>

BOOT客户管理系统 v2.0

  • data-toggle=“dropdown” href=“#”>

  • 令狐冲

    昨天

    今天晚上向大哥找我吃饭,讨论一下去梅庄的事...

  • 查看全部消息
  • data-toggle=“dropdown” href=“#”>

  • 任务 1 完成40%

    role=“progressbar” aria-valuenow=“40” aria-valuemin=“0”

    aria-valuemax=“100” style=“width: 40%”>

    完成40%

  • 任务 2 完成20%

    aria-valuenow=“20” aria-valuemin=“0” aria-valuemax=“100”

    style=“width: 20%”>

    完成20%

  • 查看所有任务
  • data-toggle=“dropdown” href=“#”>

  • 新回复 <span

    class=“pull-right text-muted small”>4分钟之前

  • 新消息 <span

    class=“pull-right text-muted small”>4分钟之前

  • 新任务 <span

    class=“pull-right text-muted small”>4分钟之前

  • 服务器重启 <span

    class=“pull-right text-muted small”>4分钟之前

  • 查看所有提醒
  • data-toggle=“dropdown” href=“#”>

  • 用户设置
  • 系统设置
  • 退出登录

  • class=“fa fa-edit fa-fw”> 客户管理

  • class=“fa fa-dashboard fa-fw”> 客户拜访

    --请选择--

    <c:forEach items=“${fromType}” var=“item”>

    </c:forEach>

    --请选择--

    <c:forEach items=“${industryType}” var=“item”>

    </c:forEach>

    --请选择--

    <c:forEach items=“${levelType}” var=“item”>

    </c:forEach>

    查询

    客户信息列表
    ID 客户名称 客户来源 客户所属行业 客户级别 固定电话 手机 操作

    <c:forEach items=“${page.rows}” var=“row”>

    ${row.cust_id} ${row.cust_name} ${row.cust_source} ${row.cust_industry} ${row.cust_level} ${row.cust_phone} ${row.cust_mobile}

    修改

    删除

    </c:forEach>

    <itzheng:page url=“${pageContext.request.contextPath }/customer/list.action” />

    aria-labelledby=“myModalLabel”>

    ×

    --请选择--

    <c:forEach items=“${fromType}” var=“item”>

    </c:forEach>

    --请选择--

    <c:forEach items=“${industryType}” var=“item”>

    </c:forEach>

    --请选择--

    <c:forEach items=“${levelType}” var=“item”>

    </c:forEach>

    关闭

    保存修改

    3、引入自定义标签

    (1)编写自定义标签的文件tld

    在这里插入图片描述

    <?xml version="1.0" encoding="UTF-8" ?>

    2.0

    1.2

    common

    http://itzheng.cn/common/

    Common Tag

    Common Tag library

    page

    com.itzheng.crm.utils.NavigationTag

    JSP

    create navigation for paging

    bean

    true

    number

    true

    url

    true

    true

    (2)创建自定义标签的类:NavigationTag和Page类

    a、Page

    在这里插入图片描述

    package com.itzheng.crm.utils;

    import java.util.List;

    public class Page {

    private int total;

    private int page;

    private int size;

    private List rows;

    public Page() {

    super();

    }

    /**

    • @param total 查询数据总条数

    • @param page 当前页码数

    • @param size 每页显示数据条数

    • @param rows 查询结果集

    */

    public Page(int total, int page, int size, List rows) {

    super();

    this.total = total;

    this.page = page;

    this.size = size;

    this.rows = rows;

    }

    public int getTotal() {

    return total;

    }

    public void setTotal(int total) {

    this.total = total;

    }

    public int getPage() {

    return page;

    }

    public void setPage(int page) {

    this.page = page;

    }

    public int getSize() {

    return size;

    }

    public void setSize(int size) {

    this.size = size;

    }

    public List getRows() {

    return rows;

    }

    public void setRows(List rows) {

    this.rows = rows;

    }

    }

    b、NavigationTag

    在这里插入图片描述

    package com.itzheng.crm.utils;

    import java.io.IOException;

    import java.io.UnsupportedEncodingException;

    import java.util.Map;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.jsp.JspException;

    import javax.servlet.jsp.JspWriter;

    import javax.servlet.jsp.tagext.TagSupport;

    /**

    • 显示格式 上一页 1 2 3 4 5 下一页

    */

    public class NavigationTag extends TagSupport {

    static final long serialVersionUID = 2372405317744358833L;

    /**

    • request 中用于保存Page 对象的变量名,默认为“page”

    */

    private String bean = “page”;

    /**

    • 分页跳转的url地址,此属性必须

    */

    private String url = null;

    /**

    • 显示页码数量

    */

    private int number = 5;

    @Override

    public int doStartTag() throws JspException {

    JspWriter writer = pageContext.getOut();

    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();

    Page page = (Page) request.getAttribute(bean);

    if (page == null)

    return SKIP_BODY;

    url = resolveUrl(url, pageContext);

    try {

    // 计算总页数

    int pageCount = page.getTotal() / page.getSize();

    if (page.getTotal() % page.getSize() > 0) {

    pageCount++;

    }

    writer.print(“

    // 显示“上一页”按钮

    if (page.getPage() > 1) {

    String preUrl = append(url, “page”, page.getPage() - 1);

    preUrl = append(preUrl, “rows”, page.getSize());

    writer.print(“

  • <a href=”" + preUrl + “”>上一页
  • ");

    } else {

    writer.print(“<li class=“disabled”><a href=”#“>上一页”);

    }

    // 显示当前页码的前2页码和后两页码

    // 若1 则 1 2 3 4 5, 若2 则 1 2 3 4 5, 若3 则1 2 3 4 5,

    // 若4 则 2 3 4 5 6 ,若10 则 8 9 10 11 12

    int indexPage = (page.getPage() - 2 > 0) ? page.getPage() - 2 : 1;

    for (int i = 1; i <= number && indexPage <= pageCount; indexPage++, i++) {

    if (indexPage == page.getPage()) {

    writer.print(“<li class=“active”><a href=”#“>” + indexPage

    • “<span class=“sr-only”>(current)
    • ”);

    continue;

    }

    String pageUrl = append(url, “page”, indexPage);

    pageUrl = append(pageUrl, “rows”, page.getSize());

    writer.print(“

  • <a href=”" + pageUrl + “”>" + indexPage + “
  • ”);

    }

    // 显示“下一页”按钮

    if (page.getPage() < pageCount) {

    String nextUrl = append(url, “page”, page.getPage() + 1);

    nextUrl = append(nextUrl, “rows”, page.getSize());

    writer.print(“

  • <a href=”" + nextUrl + “”>下一页
  • ");

    } else {

    writer.print(“<li class=“disabled”><a href=”#“>下一页”);

    }

    writer.print(“”);

    } catch (IOException e) {

    e.printStackTrace();

    }

    return SKIP_BODY;

    }

    private String append(String url, String key, int value) {

    return append(url, key, String.valueOf(value));

    }

    /**

    • 为url 参加参数对儿

    • @param url

    • @param key

    • @param value

    • @return

    */

    private String append(String url, String key, String value) {

    if (url == null || url.trim().length() == 0) {

    return “”;

    }

    if (url.indexOf(“?”) == -1) {

    url = url + “?” + key + “=” + value;

    } else {

    if (url.endsWith(“?”)) {

    url = url + key + “=” + value;

    } else {

    url = url + “&” + key + “=” + value;

    }

    }

    return url;

    }

    /**

    • 为url 添加翻页请求参数

    • @param url

    • @param pageContext

    • @return

    • @throws javax.servlet.jsp.JspException

    */

    private String resolveUrl(String url, javax.servlet.jsp.PageContext pageContext) throws JspException {

    // UrlSupport.resolveUrl(url, context, pageContext)

    Map params = pageContext.getRequest().getParameterMap();

    for (Object key : params.keySet()) {

    if (“page”.equals(key) || “rows”.equals(key))

    continue;

    Object value = params.get(key);

    if (value == null)

    continue;

    try {

    if (value.getClass().isArray()) {

    // 解决GET乱码问题

    // value = new String(((String[])

    // value)[0].getBytes(“ISO-8859-1”), “UTF-8”);

    value = ((String[]) value)[0];

    url = append(url, key.toString(), value.toString());

    } else if (value instanceof String) {

    // 解决GET乱码问题

    // value = new String(((String)

    // value).getBytes(“ISO-8859-1”), “UTF-8”);

    value = (String) value;

    url = append(url, key.toString(), value.toString());

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    return url;

    }

    /**

    • @return the bean

    */

    public String getBean() {

    return bean;

    }

    /**

    • @param bean the bean to set

    */

    public void setBean(String bean) {

    this.bean = bean;

    }

    /**

    • @return the url

    */

    public String getUrl() {

    return url;

    }

    /**

    • @param url the url to set

    */

    public void setUrl(String url) {

    this.url = url;

    }

    public void setNumber(int number) {

    this.number = number;

    }

    }

    3、运行项目,并测试

    http://localhost:8080/boot-crm/customer/list.action

    在这里插入图片描述

    五、自定义标签


    1、创建自定义标签类MyTag类

    在这里插入图片描述

    这个类要继承TagSupport

    package com.itzheng.crm.utils;

    import java.io.IOException;

    import javax.servlet.jsp.JspException;

    import javax.servlet.jsp.JspWriter;

    import javax.servlet.jsp.tagext.TagSupport;

    /*

    • 自定义标签的使用

    */

    public class MyTag extends TagSupport {

    @Override

    public int doStartTag() throws JspException {

    JspWriter out = super.pageContext.getOut();

    try {

    out.print(“这个是自定义标签输出的内容”);

    } catch (IOException e) {

    e.printStackTrace();

    }

    return super.doStartTag();

    }

    }

    2、创建tld文件

    在这里插入图片描述

    <?xml version="1.0" encoding="UTF-8" ?>

    2.0

    1.2

    myTag

    http://itzheng/myTag/

    out

    com.itzheng.crm.utils.MyTag

    JSP

    3、创建myTag.jsp页面,并引用创建好的标签

    在这里插入图片描述

    <%@ page language=“java” contentType=“text/html; charset=UTF-8”

    pageEncoding=“UTF-8”%>

    <%@ page trimDirectiveWhitespaces=“true”%>

    <%@ taglib prefix=“myTag” uri=“http://itzheng/myTag/”%>

    <%

    String path = request.getContextPath();

    String basePath = request.getScheme() + “😕/” + request.getServerName() + “:” + request.getServerPort()

    • path + “/”;

    %>

    自定义标签的使用

    myTag:out</myTag:out>

    4、修改CustomerController类创建myTage方法

    在这里插入图片描述

    @RequestMapping(“myTag”)

    public String myTag() {

    System.out.println(“-------------”);

    return “myTag”;

    }

    5、运行并测试

    http://localhost:8080/boot-crm/customer/myTag.action

    在这里插入图片描述

    6、输出其他内容使其在页面上显示,修改MyTag

    在这里插入图片描述

    再次运行并访问

    在这里插入图片描述

    六、项目实现:


    1、查询条件加载

    (1)创建接口

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.crm.mapper;

    /*

    • 字典数据表持久化接口

    */

    public interface BaseDictMapper {

    }

    (2)创建BaseDict类

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.crm.pojo;

    /*

    • 字典数据模型

    */

    public class BaseDict {

    private String dict_id;

    private String dict_type_code;

    private String dict_type_name;

    private String dict_item_name;

    private String dict_item_code;

    private String dict_sort;

    private String dict_enable;

    private String dict_memo;

    public String getDict_id() {

    return dict_id;

    }

    public void setDict_id(String dict_id) {

    this.dict_id = dict_id;

    }

    public String getDict_type_code() {

    return dict_type_code;

    }

    public void setDict_type_code(String dict_type_code) {

    this.dict_type_code = dict_type_code;

    }

    public String getDict_type_name() {

    return dict_type_name;

    }

    public void setDict_type_name(String dict_type_name) {

    this.dict_type_name = dict_type_name;

    }

    public String getDict_item_name() {

    return dict_item_name;

    }

    public void setDict_item_name(String dict_item_name) {

    this.dict_item_name = dict_item_name;

    }

    public String getDict_item_code() {

    return dict_item_code;

    }

    public void setDict_item_code(String dict_item_code) {

    this.dict_item_code = dict_item_code;

    }

    public String getDict_sort() {

    return dict_sort;

    }

    public void setDict_sort(String dict_sort) {

    this.dict_sort = dict_sort;

    }

    public String getDict_enable() {

    return dict_enable;

    }

    public void setDict_enable(String dict_enable) {

    this.dict_enable = dict_enable;

    }

    public String getDict_memo() {

    return dict_memo;

    }

    public void setDict_memo(String dict_memo) {

    this.dict_memo = dict_memo;

    }

    @Override

    public String toString() {

    return “BaseDict [dict_id=” + dict_id + “, dict_type_code=” + dict_type_code + “, dict_type_name=”

    • dict_type_name + “, dict_item_name=” + dict_item_name + “, dict_item_code=” + dict_item_code

    • “, dict_sort=” + dict_sort + “, dict_enable=” + dict_enable + “, dict_memo=” + dict_memo + “]”;

    }

    }

    (3)完善上述所创建的接口

    在这里插入图片描述

    package com.itzheng.crm.mapper;

    import java.util.List;

    import com.itzheng.crm.pojo.BaseDict;

    /*

    • 字典数据表持久化接口

    */

    public interface BaseDictMapper {

    /*

    • 根据字典编码查询字典列表

    */

    List getBaseBictByCode(String code);

    }

    (4)创建对应的映射文件:BaseDictMapper.xml

    在这里插入图片描述

    在这里插入图片描述

    <?xml version="1.0" encoding="UTF-8" ?>

    SELECT

    dict_id,

    dict_type_code,

    dict_type_name,

    dict_item_name,

    dict_item_code,

    dict_sort,

    dict_enable,

    dict_memo

    FROM base_dict

    WHERE dict_type_code = #{code}

    (4)创建BaseDictService

    在这里插入图片描述

    package com.itzheng.crm.service;

    import java.util.List;

    import com.itzheng.crm.pojo.BaseDict;

    /*

    • 字典数据表业务接口

    */

    public interface BaseDictService {

    /*

    • 根据字典编码查询字典列表

    */

    List getBaseDictByCode(String code);

    }

    (5)创建实现类BaseDictServiceImpl实现BaseDictService接口

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.crm.service.impl;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Service;

    import com.itzheng.crm.mapper.BaseDictMapper;

    import com.itzheng.crm.pojo.BaseDict;

    import com.itzheng.crm.service.BaseDictService;

    @Service

    public class BaseDictServiceImpl implements BaseDictService {

    @Autowired

    private BaseDictMapper baseDictMapper;

    @Override

    public List getBaseDictByCode(String code) {

    return baseDictMapper.getBaseDictByCode(code);

    }

    }

    (6)控制层调用

    在这里插入图片描述

    package com.itzheng.crm.controller;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Controller;

    import org.springframework.ui.Model;

    import org.springframework.web.bind.annotation.RequestMapping;

    import com.itzheng.crm.pojo.BaseDict;

    import com.itzheng.crm.service.BaseDictService;

    /*

    • 客户信息请求处理

    */

    @Controller

    @RequestMapping(“customer”)

    public class CustomerController {

    @Autowired

    private BaseDictService dictService;

    @RequestMapping(“list”)

    public String list(Model model) {

    //查询来源

    List fromType = dictService.getBaseDictByCode(“002”);

    //查询行业

    List industryType = dictService.getBaseDictByCode(“001”);

    List levelType = dictService.getBaseDictByCode(“006”);

    //设置数据模型的返回

    model.addAttribute(“fromType”,fromType);

    model.addAttribute(“industryType”,industryType);

    model.addAttribute(“levelType”,levelType);

    return “customer”;

    }

    @RequestMapping(“myTag”)

    public String myTag() {

    return “myTag”;

    }

    }

    (7)运行并测试项目

    http://localhost:8080/boot-crm/customer/list.action

    在这里插入图片描述

    (8)创建对应的数据加载文件:crm.properties

    在这里插入图片描述

    customer_from_type=002

    customer_industry_type=001

    customer_level_type=006

    (9)加载上面的配置文件

    在这里插入图片描述

    <context:property-placeholder location=“classpath:crm.properties” />

    (10)CustomerController类当中绑定对应数据文件的值

    在这里插入图片描述

    /*

    • 客户信息请求处理

    */

    @Controller

    @RequestMapping(“customer”)

    public class CustomerController {

    @Autowired

    private BaseDictService dictService;

    @Value(“${customer_from_type}”)

    private String customer_from_type;

    @Value(“${customer_industry_type}”)

    private String customer_industry_type;

    @Value(“${customer_level_type}”)

    private String customer_level_type;

    @RequestMapping(“list”)

    public String list(Model model) {

    //查询来源

    List fromType = dictService.getBaseDictByCode(customer_from_type);

    //查询行业

    List industryType = dictService.getBaseDictByCode(customer_industry_type);

    //查询级别的

    List levelType = dictService.getBaseDictByCode(customer_level_type);

    //设置数据模型的返回

    model.addAttribute(“fromType”,fromType);

    model.addAttribute(“industryType”,industryType);

    (11)运行并测试http://localhost:8080/boot-crm/customer/list.action

    在这里插入图片描述

    2、条件查询实现

    (1)创建POJO,Customer:客户信息数据模型

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.crm.pojo;

    import java.util.Date;

    public class Customer {

    private Long cust_id;

    private String cust_name;

    private Long cust_user_id;

    private Long cust_create_id;

    private String cust_source;

    private String cust_industry;

    private String cust_level;

    private String cust_linkman;

    private String cust_phone;

    private String cust_mobile;

    private String cust_zipcode;

    private String cust_address;

    private Date cust_createtime;

    public Long getCust_id() {

    return cust_id;

    }

    public void setCust_id(Long cust_id) {

    this.cust_id = cust_id;

    }

    public String getCust_name() {

    return cust_name;

    }

    public void setCust_name(String cust_name) {

    this.cust_name = cust_name;

    }

    public Long getCust_user_id() {

    return cust_user_id;

    }

    public void setCust_user_id(Long cust_user_id) {

    this.cust_user_id = cust_user_id;

    }

    public Long getCust_create_id() {

    return cust_create_id;

    }

    public void setCust_create_id(Long cust_create_id) {

    this.cust_create_id = cust_create_id;

    }

    public String getCust_source() {

    return cust_source;

    }

    public void setCust_source(String cust_source) {

    this.cust_source = cust_source;

    }

    public String getCust_industry() {

    return cust_industry;

    }

    public void setCust_industry(String cust_industry) {

    this.cust_industry = cust_industry;

    }

    public String getCust_level() {

    return cust_level;

    }

    public void setCust_level(String cust_level) {

    this.cust_level = cust_level;

    }

    public String getCust_linkman() {

    return cust_linkman;

    }

    public void setCust_linkman(String cust_linkman) {

    this.cust_linkman = cust_linkman;

    }

    public String getCust_phone() {

    return cust_phone;

    }

    public void setCust_phone(String cust_phone) {

    this.cust_phone = cust_phone;

    }

    public String getCust_mobile() {

    return cust_mobile;

    }

    public void setCust_mobile(String cust_mobile) {

    this.cust_mobile = cust_mobile;

    }

    public String getCust_zipcode() {

    return cust_zipcode;

    }

    public void setCust_zipcode(String cust_zipcode) {

    this.cust_zipcode = cust_zipcode;

    }

    public String getCust_address() {

    return cust_address;

    }

    public void setCust_address(String cust_address) {

    this.cust_address = cust_address;

    }

    public Date getCust_createtime() {

    return cust_createtime;

    }

    public void setCust_createtime(Date cust_createtime) {

    this.cust_createtime = cust_createtime;

    }

    @Override

    public String toString() {

    return “Customer [cust_id=” + cust_id + “, cust_name=” + cust_name + “, cust_user_id=” + cust_user_id

    • “, cust_create_id=” + cust_create_id + “, cust_source=” + cust_source + “, cust_industry=”

    • cust_industry + “, cust_level=” + cust_level + “, cust_linkman=” + cust_linkman + “, cust_phone=”

    • cust_phone + “, cust_mobile=” + cust_mobile + “, cust_zipcode=” + cust_zipcode + “, cust_address=”

    • cust_address + “, cust_createtime=” + cust_createtime + “]”;

    }

    }

    (2)创建POJO,QueryVo:与页面上客户信息一致的内容

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.crm.pojo;

    public class QueryVo {

    private String custName;

    private String custSource;

    private String custIndustry;

    private String custLevel;

    // 当前页码数

    private Integer page = 1;

    // 数据库从那一条数据开始查

    private Integer start;

    // 每页显示数据条数

    private Integer rows = 10;

    public String getCustName() {

    return custName;

    }

    public void setCustName(String custName) {

    this.custName = custName;

    }

    public String getCustSource() {

    return custSource;

    }

    public void setCustSource(String custSource) {

    this.custSource = custSource;

    }

    public String getCustIndustry() {

    return custIndustry;

    }

    public void setCustIndustry(String custIndustry) {

    this.custIndustry = custIndustry;

    }

    public String getCustLevel() {

    return custLevel;

    }

    public void setCustLevel(String custLevel) {

    this.custLevel = custLevel;

    }

    public Integer getPage() {

    return page;

    }

    public void setPage(Integer page) {

    this.page = page;

    }

    public Integer getStart() {

    return start;

    }

    public void setStart(Integer start) {

    this.start = start;

    }

    public Integer getRows() {

    return rows;

    }

    public void setRows(Integer rows) {

    this.rows = rows;

    }

    @Override

    public String toString() {

    return “QueryVo [custName=” + custName + “, custSource=” + custSource + “, custIndustry=” + custIndustry

    • “, custLevel=” + custLevel + “, page=” + page + “, start=” + start + “, rows=” + rows + “]”;

    }

    }

    (3)修改CustomerController的list方法

    在这里插入图片描述

    (4)创建CustomerMapper客户信息持久化接口

    在这里插入图片描述

    package com.itzheng.crm.mapper;

    import java.util.List;

    import com.itzheng.crm.pojo.Customer;

    import com.itzheng.crm.pojo.QueryVo;

    /*

    • 客户信息持久化接口

    */

    public interface CustomerMapper {

    /*

    • 根据查询条件,分页查询用户列表

    */

    List getCustomerByQueryVo(QueryVo vo);

    }

    (5)创建CustomerMapper客户信息映射文件

    在这里插入图片描述

    <?xml version="1.0" encoding="UTF-8" ?>

    SELECT

    c.cust_id,

    c.cust_name,

    c.cust_user_id,

    c.cust_create_id,

    s.dict_item_name cust_source,

    i.dict_item_name cust_industry,

    l.dict_item_name cust_level,

    c.cust_linkman,

    c.cust_phone,

    c.cust_mobile,

    c.cust_zipcode,

    c.cust_address,

    c.cust_createtime

    FROM customer c

    LEFT JOIN base_dict s ON c.cust_source= s.dict_id

    LEFT JOIN base_dict i ON c.cust_industry = i.dict_id

    LEFT JOIN base_dict l ON c.cust_level = l.dict_id

    and c.cust_name LIKE ‘%${ cust_name }%’

    AND c.cust_industry = #{cust_industry}

    AND c.cust_level = #{cust_level}

    LIMIT #{start}, #{rows};

    (6)创建CustomerMapper当中根据查询条件查询总记录数

    在这里插入图片描述

    /*

    • 根据查询条件查询总记录数

    */

    Integer getCountByQueryVo(QueryVo vo);

    (7)创建CustomerMapper当中根据查询条件查询总记录数对应的映射文件

    抽取查询条件

    在这里插入图片描述

    SELECT count(1)

    FROM customer c

    LEFT JOIN base_dict s ON c.cust_source= s.dict_id

    LEFT JOIN base_dict i ON c.cust_industry = i.dict_id

    LEFT JOIN base_dict l ON c.cust_level = l.dict_id

    抽取

    在这里插入图片描述

    <?xml version="1.0" encoding="UTF-8" ?>

    and c.cust_name LIKE ‘%${custName}%’

    AND c.cust_source = #{custSource}

    AND c.cust_industry = #{custIndustry}

    AND c.cust_level = #{custLevel}

    SELECT

    c.cust_id,

    c.cust_name,

    c.cust_user_id,

    c.cust_create_id,

    s.dict_item_name cust_source,

    i.dict_item_name cust_industry,

    l.dict_item_name cust_level,

    c.cust_linkman,

    c.cust_phone,

    c.cust_mobile,

    c.cust_zipcode,

    c.cust_address,

    c.cust_createtime

    FROM customer c

    LEFT JOIN base_dict s ON c.cust_source= s.dict_id

    LEFT JOIN base_dict i ON c.cust_industry = i.dict_id

    LEFT JOIN base_dict l ON c.cust_level = l.dict_id

    LIMIT #{start}, #{rows};

    SELECT count(1)

    FROM customer c

    LEFT JOIN base_dict s ON c.cust_source= s.dict_id

    LEFT JOIN base_dict i ON c.cust_industry = i.dict_id

    LEFT JOIN base_dict l ON c.cust_level = l.dict_id

    (8)创建CustomerService接口

    在这里插入图片描述

    package com.itzheng.crm.service;

    import java.util.List;

    import com.itzheng.crm.pojo.Customer;

    import com.itzheng.crm.pojo.QueryVo;

    import com.itzheng.crm.utils.Page;

    /*

    • 客户信息业务逻辑接口

    */

    public interface CustomerService {

    /*

    • 根据查询条件,分页查询用户列表

    */

    Page getCustomerByQueryVo(QueryVo vo);

    }

    (9)创建CustomerService接口的实现类

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.crm.service.impl;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Service;

    import com.itzheng.crm.mapper.CustomerMapper;

    import com.itzheng.crm.pojo.Customer;

    import com.itzheng.crm.pojo.QueryVo;

    import com.itzheng.crm.service.CustomerService;

    import com.itzheng.crm.utils.Page;

    @Service

    public class CustomerServiceImpl implements CustomerService {

    @Autowired

    private CustomerMapper customerMapper;

    @Override

    public Page getCustomerByQueryVo(QueryVo vo) {

    // 计算分页查询那条记录开始

    vo.setStart((vo.getPage() - 1) * vo.getRows());

    // 查询总记录数

    Integer total = customerMapper.getCountByQueryVo(vo);

    // 查询每一页的数据列表

    List list = customerMapper.getCustomerByQueryVo(vo);

    // 包装分页数据

    Page page = new Page(total, vo.getPage(), vo.getRows(), list);

    return page;

    }

    }

    (10)修改CustomerController当中注入CustomerService

    在这里插入图片描述

    package com.itzheng.crm.controller;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.beans.factory.annotation.Value;

    import org.springframework.stereotype.Controller;
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

    如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

    img

    写在最后

    还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

    image

    《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
    w_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzU3MDM0,size_16,color_FFFFFF,t_70)

    package com.itzheng.crm.service;

    import java.util.List;

    import com.itzheng.crm.pojo.Customer;

    import com.itzheng.crm.pojo.QueryVo;

    import com.itzheng.crm.utils.Page;

    /*

    • 客户信息业务逻辑接口

    */

    public interface CustomerService {

    /*

    • 根据查询条件,分页查询用户列表

    */

    Page getCustomerByQueryVo(QueryVo vo);

    }

    (9)创建CustomerService接口的实现类

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.crm.service.impl;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Service;

    import com.itzheng.crm.mapper.CustomerMapper;

    import com.itzheng.crm.pojo.Customer;

    import com.itzheng.crm.pojo.QueryVo;

    import com.itzheng.crm.service.CustomerService;

    import com.itzheng.crm.utils.Page;

    @Service

    public class CustomerServiceImpl implements CustomerService {

    @Autowired

    private CustomerMapper customerMapper;

    @Override

    public Page getCustomerByQueryVo(QueryVo vo) {

    // 计算分页查询那条记录开始

    vo.setStart((vo.getPage() - 1) * vo.getRows());

    // 查询总记录数

    Integer total = customerMapper.getCountByQueryVo(vo);

    // 查询每一页的数据列表

    List list = customerMapper.getCustomerByQueryVo(vo);

    // 包装分页数据

    Page page = new Page(total, vo.getPage(), vo.getRows(), list);

    return page;

    }

    }

    (10)修改CustomerController当中注入CustomerService

    在这里插入图片描述

    package com.itzheng.crm.controller;

    import java.util.List;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.beans.factory.annotation.Value;

    import org.springframework.stereotype.Controller;
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-PmJWzy5M-1713128282933)]

    [外链图片转存中…(img-neQTSCAU-1713128282933)]

    [外链图片转存中…(img-vfunHzS2-1713128282934)]

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

    如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

    img

    写在最后

    还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

    [外链图片转存中…(img-1NM57BcS-1713128282934)]

    《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值