Mybatis中使用储存过程实现一条记录入两张表

使用Mybatis实现输入用户的完整的信息分别进入两个表,由于自己还是个小白,这个问题还真的难搞,使用insert来写的话,标签内只能写一句SQL,太多SQL会出现SQL注入的问题。所以我就想用存储过程来实现。下面是我的实现过程!

  • 首先是两张表的表结构


    注:这里我做了外键约束,detail表中的ded是userinfo表中的外键,
  • 建立存储过程

    报的错就是:
    在这里插入图片描述
  • 接下来就是Mapper.xml
<insert id="insertUserInfos" statementType="CALLABLE" parameterType="HashMap">
        {
          CALL insertInfo(
            #{uid,jdbcType=INTEGER,mode=IN},
            #{username,jdbcType=VARCHAR,mode=IN},
            #{password,jdbcType=VARCHAR,mode=IN},
            #{ded,jdbcType=INTEGER,mode=IN},
            #{address,jdbcType=VARCHAR,mode=IN}
          )
        }
    </insert>
  • 接口类
void insertUserInfos(Map<Object,Object> params);
  • Test
public static void insertUserInfos() throws Exception{
        //Connection - SqlSession操作myBatis

        //config.xml  -> reader
        Reader reader = Resources.getResourceAsReader("conf.xml");

        //reader  ->SqlSession
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();

        UserInfoMapper mappers = session.getMapper(UserInfoMapper.class);
        Map<Object, Object> params = new HashMap<>();
        params.put("uid",11);
        params.put("username","hk");
        params.put("password","5201314");
        params.put("ded",6);
        params.put("address","花果山");

        mappers.insertUserInfos(params);

        session.commit();//提交事务
        System.out.println("增加成功!");
        session.close();
    }

  • 运行结果
    在这里插入图片描述
    最后看一下数据库的数据
    在这里插入图片描述
    在这里插入图片描述

最后就成功的实现了!

发布了25 篇原创文章 · 获赞 22 · 访问量 5407

猜你喜欢

转载自blog.csdn.net/weixin_42893085/article/details/104936414