赞
踩
本篇承接知识点5,介绍如何新增数据,新增时考虑到后期的知识点,因此扩展一张部门表,达到一对多的关系
第一步:首先我们需准备一张部门表,实现一个部门下有多个员工的一对多关系
同时在user表中,添加一个字段保存部门id
第二步:编写相应的架构代码块
在User的bean实例中添加两个字段
//在User中添加该字段
private Integer did;
//user表不存在的字段,但是后面要保存部门名称,因此spring boot对这种情况提供了相关注解,表示该字段非表中字段
@TableField(exist = false)
private String dname;
准备部门的Bean
package com.wy.scjg.bean;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
public class Dept implements Serializable {
private Integer id;
private String name;
}
准备部门的Controller
package com.wy.scjg.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/dept")
public class DeptController {
}
准备对应的Service
package com.wy.scjg.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wy.scjg.bean.Dept;
public interface DeptService extends IService<Dept> {
}
下面这个实现类中的DeptMapper也是自己建的Dao层
package com.wy.scjg.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wy.scjg.bean.Dept;
import com.wy.scjg.mapper.DeptMapper;
import com.wy.scjg.service.DeptService;
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
}
Dao层准备Mapper
package com.wy.scjg.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wy.scjg.bean.Dept;
public interface DeptMapper extends BaseMapper<Dept> {
}
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wy.scjg.mapper.DeptMapper">
<resultMap id="BaseResultMap" type="com.bawei.usersys.entity.Dept">
<id column="id" property="id" />
<result column="name" property="name" />
</resultMap>
</mapper>
给UserMapper中准备一个部门字段的映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wy.scjg.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.wy.scjg.bean.User">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="age" property="age" />
<result column="email" property="email" />
<result column="brith" property="brith" />
<result column="did" property="did" />
</resultMap>
</mapper>
第三步:在UserController中编写预
新增控制器
@RequestMapping("/toAdd")
public String toAdd(HttpServletRequest request){
//查出所有的部门
List<Dept> depts = deptService.list();
request.setAttribute("depts",depts);
return "/user_add";
}
编写新增的freemaker页面-user_add.ftl
<html> <head> <title>欢迎进入user用户列表</title> <script type="text/javascript" src="/jquery-3.2.1.js"></script> </head> <body> <form id="addFrm"> 名称:<input type="text" name="name" /><br/> 出生日期:<input type="date" name="brith"/><br/> 所在部门:<select name="did"> <option value="">请选择所在的部门</option> <#list depts as dept> <option value="${dept.id}">${dept.name}</option> </#list> </select><br/> 邮箱:<input type="email" name="email"/><br/> <!--不写<button></button> 不写 type="submit" 而采用ajax的写法--> <input type="button" onclick="saveObject()" value="添加用户"/> </form> <script type="text/javascript"> function saveObject(){ $.post('/user/add',$("#addFrm").serialize(),function(data){ if(data){ alert("添加成功") window.location.href="/user/list"; }else{ alert("添加失败") } },"json"); } </script> </body> </html>
在list页面合适的地方写一个添加选项,用来跳转到添加页面
<a href="/user/toAdd">添加用户</a>
UserController写一个正式添加的控制器
/**
* 正式添加方法
* @param user
* @return
*/
@RequestMapping("/add")
@ResponseBody
public boolean add(User user){
return userService.save(user);
}
第五步:当你测试添加的时候你会发现,添加成功后回到列表页面时,本来是正常的,但是数据列表查询到添加的哪条数据的时候展示就报错了
这个是因为fremaker本身是一个测试组件,它对空值的识别有些缺陷,官方提供了一个内建函数来预处理空值,需要我们在页面上取值时末尾添加!""
之后重启程序查询列表
到此新增功能完成
在有了删除和新增功能后,大家的程序一定会出现一个bug,当你删除新增功能新增的数据时删除不掉,这个是因为spring boot的新增API会自动生成一个id,虽然类型会受到bean的限制,但是长度大概率不对,导致虽然能存到数据库,但是数据其他id相关操作会出问题,这时spring boot给我们提供了一个注解,使得生成的id是合规的,我们只需要在user的Bean中id字段加上它就可以解决这个问题
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
到此本篇知识点讲解结束,此外 本次整体讲解的spring boot项目已上传github
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。