(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 + “/”;
%>
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”>
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
cLEFT 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
cLEFT 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
cLEFT 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
cLEFT 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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
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获取)
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
[外链图片转存中…(img-1NM57BcS-1713128282934)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
-