There_there 2023-03-25 17:57 采纳率: 50%
浏览 146
已结题

vue+springboot,如何实现前端提交一张表单,后端控制层接收两个实体类插入数据到两张数据表中

我把用户信息分成了账号表和信息表,如图

img

我在前端中想用一张表单填完所有的信息点击保存后把数据提交到后端插入两张数据库表,但不知道为什么数据库里的数据都为null,如图

img

img


我的前端代码是这样的

<el-button class="color2" icon="el-icon-circle-plus" @click="addUserFormShow = true">添加用户</el-button>

      <el-dialog title="添加用户信息" :visible.sync="addUserFormShow">
        <el-form :model="adduserform">
          <el-form-item label="姓名" :label-width="formLabelWidth">
            <el-input v-model="adduserform.username" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="账号" :label-width="formLabelWidth">
            <el-input v-model="adduserform.account" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="密码" :label-width="formLabelWidth">
            <el-input v-model="adduserform.password" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="性别" :label-width="formLabelWidth">
            <el-input v-model="adduserform.gender" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="电话" :label-width="formLabelWidth">
            <el-input v-model="adduserform.tel" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="用户类型" :label-width="formLabelWidth">
            <el-select v-model="adduserform.position_id" placeholder="请选择用户的类型">
              <el-option label="管理员" value="1"></el-option>
              <el-option label="普通用户" value="2"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="状态" :label-width="formLabelWidth">
            <el-input v-model="adduserform.status" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="备注" :label-width="formLabelWidth">
            <el-input v-model="adduserform.remark" autocomplete="off"></el-input>
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button @click="addUserFormShow = false">取 消</el-button>
          <el-button type="primary" @click="saveUser">保存</el-button>
        </div>
      </el-dialog>
<script>
export default {
  data() {
    return {
      
      addUserFormShow: false,
      
      adduserform: {
        username: "",
        account: "",
        password: "",
        gender: "",
        tel: "",
        position_id: 0,
        status: "",
        remark: "",
      },

    };
  },
  methods: {
   
    async saveUser() {
      const res = await this.$axios.post(
        "http://localhost:8801/saveUser",
        this.adduserform
      );
      if (res) {
        this.$message({
          message: "用户信息添加成功",
          type: "success",
        });
        this.addUserFormShow = false;
        this.loadUser();
        this.adduserform = {};
      }
    },


后端代码是这样的
UserAccount以及User的实体类省略
getter,setter省略,

public class AccountAndUser {
    private UserAccount userAccount;
    private User user;
}

控制器层

@Controller
public class UserAccountController {
@Autowired
        private UserAccountService userAccountService;
//添加新用户
        @PostMapping(value = "saveUser",produces = "application/json;charset=UTF-8")
        @ResponseBody
        public boolean saveUser(@RequestBody AccountAndUser accountAndUser){
            UserAccount userAccount = accountAndUser.getUserAccount();
            User user = accountAndUser.getUser();
            boolean flag = userAccountService.addUser(userAccount,user);
            return flag;
        }
}

service层

@Override
    @Transactional
    public boolean addUser(UserAccount userAccount, User user) {
       try{
           //先添加账户
           userAccountMapper.insertUserAccount(userAccount);
           //再添加用户的其它信息
           userMapper.insertUser(user);
           return true;
       }catch (Exception e){
           e.printStackTrace();
       }
       return false;
    }

两个mapper层

<insert id="insertUserAccount" parameterType="UserAccount">
        insert into user_account (account, password, position_id, status)
        values (#{account},#{password},#{position_id},#{status})
    </insert>
<insert id="insertUser" parameterType="User">
        insert into user (username, gender, tel, remark)
        values (#{username},#{gender},#{tel},#{remark})
    </insert>

这样做不行吗?要怎么做才可以呢?

  • 写回答

2条回答 默认 最新

  • 哗哗的賏 2023-03-25 18:43
    关注

    前端传参不对,user和userAccount要分开

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月25日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加