一、restful的认识
(1)RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。
(2)简单概括
/emp/{id} GET查询一个员工
/emp GET查询所有员工
/emp POST保存一个员工
/emp/{id} PUT修改一个员工
/emp/{id} DELETE删除一个员工
二、具体使用
(1)根据id查询一个员工
------controller端-----
@RequestMapping("/emp/{empId}")
@ResponseBody
public Emp getEmpById(@PathVariable Long empId) {
Emp emp= empService.getEmpById(empId);
return emp;
}
<!--Emp就一个pojo-->
------serviceImpl端-----
@Override
public Emp getEmpById(long empId) {
Emp emp = empMapper.selectByPrimaryKey(empId);
return emp;
}
------前端的ajax-----
function getEmp(empId){
$.ajax({
url : "${Pro_Path}/emp/"+empId,
type : "GET",
//请求成功的回调函数
success : function(result) {
$("#一个input的id").val(result.empName);
}
});
}
(2)查询所有员工
------controller端-----
<!-- 分页查询的参数:page传入页码,rows以及每页的大小-->
@RequestMapping("/emp/list")
@ResponseBody
public PageInfo getEmpList(Integer page, Integer rows) {
return empService.getEmpList(page, rows);
}
------serviceImpl端-----
public PageInfo getEmpList(int page, int rows) {
//设置分页信息
PageHelper.startPage(page, rows);
//执行查询
EmpExample example = new EmpExample();
List<Emp> list = empMapper.selectByExample(example);
//取查询结果
PageInfo<Emp> pageInfo = new PageInfo<>(list);
//返回结果
return pageInfo;
}
------前端的ajax-----
function to_page(page) {
$.ajax({
url : "${Pro_Path}/emp/list",
data: '{"page": page, "rows": 8}',
type : "GET",
//请求成功的回调函数
success : function(result) {
//数据表单展示:
$.each(result.list,function(index, item) {
//将表格内容显示出来
var checkBoxTd=$("<td><input type='checkbox'/></td>");
var empIdTd = $("<td></td>").append(item.empId);
var empNameTd = $("<td></td>").append(item.empName);
$("<tr></tr>").append(checkBoxTd).append(empIdTd).append(empNameTd).appendTo("#tbody的id");
});
页面情况展示:
$("#div的id").append("当前第" + result.pageNum + "页 共有" + result.pages+ "页 总计" + result.total + "条记录");
页数导航:
var ul = $("<ul></ul>");
$.each(result.navigatepageNums, function(index, item) {
var eachPgaeNumLi = $("<li></li>").append(
$("<a></a>").append(item));
//添加单击事件
eachPgaeNumLi.click(function() {
to_page(item);
});
ul.append(eachPgaeNumLi);
});
var navEle = $("<nav></nav>").append(ul);
navEle.appendTo("#div的id");
}
});
}
(3)保存一个员工
------controller端-----
//保存员工(一般有用到jsr303校验)
@RequestMapping(value="/saveEmp",method=RequestMethod.POST)
@ResponseBody
public DataResult saveEmp(@Valid Employee employee,BindingResult result) {
if(result.hasErrors()) {
Map<String,Object> map=new HashMap<String,Object>();
//result校验失败,应该返回失败 ,在模态框中显示校验失败的错误信息
List<FieldError> errors=result.getFieldErrors();
for (FieldError fieldError : errors) {
map.put(fieldError.getField(), fieldError.getDefaultMessage());
}
DataResult.build( DataResult.error ,null, map);
}else {
return employeeService.saveEmp(employee);
}
}
<!--DataResult是一个处理结果的pojo,
包含属性 :
响应业务状态 private Integer status;
响应消息 private String msg;
响应中的数据 private Object data; -->
------serviceImpl端-----
public DataResult saveEmp(Employee employee) {
employeeMapper.insertSelective(employee);
return DataResult.ok();
}
------前端的ajax-----
$.ajax({
url:"${Pro_Path}/saveEmp",
type:"POST",
data:$("#form的id").serialize(),
success:function(result){
//保存成功后:
if(result.status==100){
。。。此处省略。。。
}else{
// 保存失败后
//如果有邮箱的错误信息
if(result.data.email!=undefined){
。。。此处省略。。。
}
//如果有用户名的错误
if(result.data.empName!=undefined){
。。。此处省略。。。
}
}
}
});
(4)根据id修改某个实体
------controller端-----
/*
* 根据id修改员工
* 注意传递的id名字要和Employee 的属性名一样
*/
@RequestMapping(value="/updateEmp/{empId}",method=RequestMethod.PUT)
@ResponseBody
public DataResult updateEmp(Employee employee) {
return employeeService.updateEmp(employee);
}
------serviceImpl端-----
public DataResult updateEmp(Employee employee) {
employeeMapper.updateByPrimaryKeySelective(employee);
return DataResult.ok();
}
------前端的ajax-----
var id=$(this).attr("edit-id");
$.ajax({
url : "${Pro_Path}/updateEmp/"+id,
type : "POST",
data:$("#form的id").serialize()+"&_method=PUT",
success : function(result) {
}
});
(5)删除一个用户
------controller端-----
@RequestMapping(value="/deleteEmpById/{id}",method=RequestMethod.DELETE)
@ResponseBody
public DataResult deleteEmpById(@PathVariable("id")Integer id) {
return employeeService.deleteEmpById(id);
}
------serviceImpl端-----
public DataResult deleteEmpById(Integer id) {
employeeMapper.deleteByPrimaryKey(id);
return DataResult.ok();
}
------前端的ajax-----
$.ajax({
url : "${Pro_Path}/deleteEmpById/"+empId,
type : "DELETE",
success : function(result) {
}
});
(6)批量删除多个用户
------controller端-----
@RequestMapping(value="/deleteEmpsById/{ids}",method=RequestMethod.DELETE)
@ResponseBody
public ProcessMsg deleteEmpsById(@PathVariable("ids")String ids) {
//如果是多个id
if(ids.contains("-")) {
String[] str_id=ids.split("-");
List<Integer> list_id=new ArrayList<Integer>();
for(String item_id:str_id) {
list_id.add(Integer.parseInt(item_id));
}
return employeeService.deleteBatch(list_id);
//如果是一个id
}else {
return employeeService.deleteEmpById(Integer.parseInt(ids));
}
}
------serviceImpl端-----
public DataResult deleteBatch(List<Integer> str_id) {
EmployeeExample employeeExample=new EmployeeExample();
Criteria criteria=employeeExample.createCriteria();
criteria.andEmpIdIn(str_id);
employeeMapper.deleteByExample(employeeExample);
return DataResult.ok();
}
public DataResult deleteEmpById(Integer id) {
employeeMapper.deleteByPrimaryKey(id);
return DataResult.ok();
}
------前端的ajax-----
$("#emp_delete_all_btn").click(function() {
var del_id_str="";
$.each($(".check_item:checked"),function(){
del_id_str+=$(this).parents("tr").find("td:eq(1)").text()+"-";
});
//去除最后一个逗号,分号
del_id_str=del_id_str.substring(0 , del_id_str.length-1);
$.ajax({
url : "${Pro_Path}/deleteEmpsById/"+del_id_str,
type : "DELETE",
success : function(result) {
}
});
});