使用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();
}
- 运行结果
最后看一下数据库的数据