CRM项目
RequestMethod类,枚举类型。
MultipartFile类,配置接口的实现类。
把之前的数据表拿过来修改一下用。
新建数据库,再运行sql文件,即可导入数据库。
整合SSM框架
新建maven为什么没有生成文件夹啊?
新建maven项目,maven软件的安装位置,maven核心配置文件的位置,maven仓库的位置,这三个选不对,就不能正常创建项目。
添加依赖管理。
新建java和resources文件夹并设置对应属性。
添加静态资源(静态资源添加的位置),加入分页标签。
标签库:
1)自定义标签库,标签库中可能有多个标签,也可能只有一个标签。
2)标签的功能也是有java代码实现的,每一个标签都要有java类的支持。
3)继承自TagSupport,就可以书写自定义标签。
实现页面展示:
页面布局错乱:Js,css样式都被拦截掉了,所以导致页面布局出现问题。
使用*.do进行解决;通过spring-mvc对静态资源进行放行。
点击F12再刷新页面才会开始记录网络请求的。
F12:查看网络请求的,对前端页面进行调试。查看Network基本信息,请求了哪些地址及每个URL的网络相关请求信息都可以看的到URL,响应状态码,响应数据类型,响应数据大小,响应时间。
![](https://i-blog.csdnimg.cn/blog_migrate/ecdbcaa12f50627001c7d3c614c3d52b.png)
实现查询条件初始化,其实就是查询导航栏。
springMVC @Value的使用:将某个常量,给变量赋值,供程序使用。@Value获取某个参数的值并不是随随便便就能取到的,需要遵循一定的格式。
1)加载读取配置文件,2)读取其中键值对中键的名字。
resources.properties。
三层中,首先编写dao层。
写sql注意数据库的字段和对象的属性名不一样(在这里错了太多次)。
模糊查询和精确查询。
只在Service的接口实现类上添加注解,不需要在接口上添加注解。
通过tomcat日志去查看错误信息,看看是哪里报错了,如何解决?
学会查看tomcat的报错信息,一般都能解决问题,大致哪里写错了。
EL表达式,JSP指令,JSP脚本,JSP指令内置对象,JSP标签库,Form表单。
如何在jsp页面中发送网路请求?
Form表单的使用:发送网络请求。
在jsp页面与java后台的交互还是不熟悉,一定要精通。对表单的网络请求不熟悉。
Jstl标签库:什么时候使用jstl标签库?格式化日期,非空判断,循环遍历等
Jsp页面中如何输入java代码?
<Form>提交按钮<input type="submit"> 定义用于向表单处理程序(form-handler)提交表单数据的按钮。
action 属性定义在提交表单时,发送网络请求。
method 属性规定在提交表单时所用的 HTTP 方法(GET 或 POST)。
name 属性:如果要正确地被提交,每个输入字段必须设置一个name 属性。
${pageContext.request.contextPath}
pageContext对象是JSP中很重要的一个内置对象,pageContext对象提供了对JSP页面所有的对象及命名空间的访问。
request.contextPath()拿到的是web项目的根路径。
/**
*describe:
*
*@author chenrushui
*@date ${YEAR}/${MONTH}/${DAY}
RequestMethod类,枚举类型。
MultipartFile类,配置接口的实现类。
把之前的数据表拿过来修改一下用。
新建数据库,再运行sql文件,即可导入数据库。
整合SSM框架
新建maven为什么没有生成文件夹啊?
新建maven项目,maven软件的安装位置,maven核心配置文件的位置,maven仓库的位置,这三个选不对,就不能正常创建项目。
添加依赖管理。
新建java和resources文件夹并设置对应属性。
添加静态资源(静态资源添加的位置),加入分页标签。
标签库:
1)自定义标签库,标签库中可能有多个标签,也可能只有一个标签。
2)标签的功能也是有java代码实现的,每一个标签都要有java类的支持。
3)继承自TagSupport,就可以书写自定义标签。
实现页面展示:
页面布局错乱:Js,css样式都被拦截掉了,所以导致页面布局出现问题。
使用*.do进行解决;通过spring-mvc对静态资源进行放行。
点击F12再刷新页面才会开始记录网络请求的。
F12:查看网络请求的,对前端页面进行调试。查看Network基本信息,请求了哪些地址及每个URL的网络相关请求信息都可以看的到URL,响应状态码,响应数据类型,响应数据大小,响应时间。
XHR:XMLHttpRequest在后台与服务器交换数据。
![](https://i-blog.csdnimg.cn/blog_migrate/ecdbcaa12f50627001c7d3c614c3d52b.png)
实现查询条件初始化,其实就是查询导航栏。
springMVC @Value的使用:将某个常量,给变量赋值,供程序使用。@Value获取某个参数的值并不是随随便便就能取到的,需要遵循一定的格式。
1)加载读取配置文件,2)读取其中键值对中键的名字。
resources.properties。
三层中,首先编写dao层。
写sql注意数据库的字段和对象的属性名不一样(在这里错了太多次)。
模糊查询和精确查询。
只在Service的接口实现类上添加注解,不需要在接口上添加注解。
通过tomcat日志去查看错误信息,看看是哪里报错了,如何解决?
学会查看tomcat的报错信息,一般都能解决问题,大致哪里写错了。
当前启动的哪个Tomcat,就去看对应的运行日志?Run面板。
log4j.properties 日志的名字
EL表达式,JSP指令,JSP脚本,JSP指令内置对象,JSP标签库,Form表单。
如何在jsp页面中发送网路请求?
Form表单的使用:发送网络请求。
在jsp页面与java后台的交互还是不熟悉,一定要精通。对表单的网络请求不熟悉。
Jstl标签库:什么时候使用jstl标签库?格式化日期,非空判断,循环遍历等
Jsp页面中如何输入java代码?
<Form>提交按钮<input type="submit"> 定义用于向表单处理程序(form-handler)提交表单数据的按钮。
action 属性定义在提交表单时,发送网络请求。
method 属性规定在提交表单时所用的 HTTP 方法(GET 或 POST)。
name 属性:如果要正确地被提交,每个输入字段必须设置一个name 属性。
${pageContext.request.contextPath}
pageContext对象是JSP中很重要的一个内置对象,pageContext对象提供了对JSP页面所有的对象及命名空间的访问。
request.contextPath()拿到的是web项目的根路径。
类头注释
/**
*describe:
*
*@author chenrushui
*@date ${YEAR}/${MONTH}/${DAY}
*/
xml映射文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.crm.mapper.CustomerDao">
<!--查询到的数据的条数-->
<select id="customCount" parameterType="QueryVo" resultType="Integer">
select count(1) from customer
<where>
<if test="custName!=null and custName!=''">
cust_name like "%"#{custName}"%"
</if>
<if test="custSource!=null and custSource!=''">
and cust_source = #{custSource}
</if>
<if test="custIndustry!=null and custIndustry!=''">
and cust_industry = #{custIndustry}
</if>
<if test="custLevel!=null and custLevel!=''">
and cust_level = #{custLevel}
</if>
</where>
</select>
<!--通过id查询用户信息-->
<select id="selectCustomerById" parameterType="Integer" resultType="com.crm.pojo.Customer">
select * from customer where cust_id=#{id}
</select>
<update id="updateCustomerById" parameterType="Customer">
update customer set cust_name=#{cust_name} where cust_id=#{cust_id};
</update>
<delete id="deleteCustomer" parameterType="Integer">
delete from customer where cust_id=#{id}
</delete>
</mapper>
Controller层代码:
package com.crm.controller;
import com.crm.pojo.BaseDict;
import com.crm.pojo.Customer;
import com.crm.pojo.QueryVo;
import com.crm.service.BaseCustomerService;
import com.crm.utils.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* describe:用戶管理控制器
*
* @author chenrushui
* @date 2018/06/14
*/
@Controller
@RequestMapping(value = "/customer")
public class CustomerController {
//注入成为成员变量:需要被加载的资源文件需要放到spring-mvc配置文件中。
//这种方式特别好用,不需要通过ResourceBundle进行读取。
@Value("${fromType.code}")
private String fromTypeCode;
@Value("${industryType.code}")
private String industryTypeCode;
@Value("${levelType.code}")
private String levelTypeCode;
@Autowired
private BaseCustomerService mBaseCustomerService;
/**
* 展示前端页面
*
* @return
*/
@RequestMapping(value = "/list")
public String getCustomerList(QueryVo vo, Model model) {
//特別注意:如何解决硬编码问题?通过注入成员变量的方式进行解决
List<BaseDict> fromType = mBaseCustomerService.selectCustomerByCode(fromTypeCode);
List<BaseDict> industryType = mBaseCustomerService.selectCustomerByCode(industryTypeCode);
List<BaseDict> levelType = mBaseCustomerService.selectCustomerByCode(levelTypeCode);
//特別注意:键的名称要和jsp页面中获取的一样。
model.addAttribute("fromType", fromType);
model.addAttribute("industryType", industryType);
model.addAttribute("levelType", levelType);
//填充结果数据
Page<Customer> page = mBaseCustomerService.selectCustomerByQueryVo(vo);
model.addAttribute("page", page);
//实现数据回显(把数据返回)
model.addAttribute("custName", vo.getCustName());
model.addAttribute("custSource", vo.getCustSource());
model.addAttribute("custIndustry", vo.getCustIndustry());
model.addAttribute("custLevel", vo.getCustLevel());
//model内部是通过request域实现的,通过el表达式获取的是哪个变量的值,控件的name属性名
return "customer";
}
/**
* 編輯用戶信息
*
* @param id
* @return
*/
@RequestMapping(value = "/edit.action", method = RequestMethod.GET)
@ResponseBody
public Customer changeCustomerInfo(Integer id) {
return mBaseCustomerService.selectCustomerById(id);
}
/**
* 保存修改的用户信息
*
* @param customer
* @return
*/
@RequestMapping(value = "/update.action", method = RequestMethod.POST)
@ResponseBody
public String updateCustomer(Customer customer) {
Integer row = mBaseCustomerService.updateCustomerById(customer);
System.out.print(row + "");
return "ok";
}
@RequestMapping(value = "/delete.action", method = RequestMethod.POST)
@ResponseBody
public String deleteCustomer(Integer id) {
Integer row = mBaseCustomerService.deleteCustomer(id);
System.out.print(row + "受影响的行数");
return "ok";
}
}