form表单传值,外键的值是怎么传的

举个例子
我们有一个员工表,和一个部门表,一个部门包括多个员工,而一个员工只属于一个部门。所以在员工表添加外键约束,将员工的部门编号与部门表的编号绑定。

create table dept(
id int primary key ,
name varchar(50)
);
create table emp(
id int primary key ,
name varchar(50),
age int ,
dept_id int,
constraint foreign key(dept_id) references dept(id)
);

接着我们写一个插入员工的功能,首先写实体类

public class Dept {
    private int id;
    private String name;

    @Override
    public String toString() {
        return "Dept{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Emp {
    private int id;
    private String name;
    private int age;
    private Dept dept;

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", dept=" + dept +
                '}';
    }
}

接着写接口

package cn.sjxy.employee_springboot.dao;

import cn.sjxy.employee_springboot.domain.Dept;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface DeptMapper {
    public Dept findById(int id);
}

package cn.sjxy.employee_springboot.dao;

import cn.sjxy.employee_springboot.domain.Emp;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
@Mapper
public interface UserMapper {
    public void insert(Emp emp);

}

接下来写映射文件mapper,这里的values(#{id},#{name},#{age},#{dept.id}中的dept.id最为关键

<?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="cn.sjxy.employee_springboot.dao.UserMapper">
    <insert id="insert" parameterType="emp">
        insert into emp values(#{id},#{name},#{age},#{dept.id})
    </insert>

</mapper>

接着写控制层


@Controller
public class EmpController {
    @Autowired
    private UserMapper userMapper;
    @RequestMapping(value="/insert",method = RequestMethod.POST)
    public String insert(Emp emp){
        userMapper.insert(emp);
        return "redirect:/find";

    }
    }

下面写jsp页面, 部门:input name="dept.id"中的dept.id就是本文的重点。

<html>
<head>
    <title>insert</title>
</head>
<body>
<form action="/insert" method="post">
id:<input name="id" type="text">
<br>
姓名:<input name="name" type="text">
<br>
age:<input name="age" type="number">
<br>
    部门:<input name="dept.id">

<button type="submit">提交</button>
</form>
</body>
</html>

其实本质上就是form表单通过input标签的name属性,来匹配实体类的属性,而实体类就是根据数据库设计的,因此name属性一般会和数据库中#{}中的内容一致。
而员工表的外键值本来就是绑定在部门表的id上的,因此用dept.id来表示员工所在部门的编号。如果直接在映射文件的#{}中写dept_id,在jsp页面也这么写,就会出现属性不匹配问题,因为实体类没有dept_id属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值