1.mybatis实现数据库的插入操作可以查看https://www.cnblogs.com/wyhluckdog/p/10149895.html这篇博文,这里面的插入操作没有返回结果,所以这篇博文就实现插入的返回。
2. 有两个方式可以获取返回结果:
(1)主键是自增类型的;
(2)主键是字符串类型的;
3. 自增主键返回
通过修改User.xml映射文件,可以将mysql自增主键返回:
<!-- 自增主键返回 --> <insert id="insertUser" parameterType="com.huida.po.User"> <!-- selectKey将主键返回,需要再返回 --> <!-- keyProperty:将返回的主键放入传入参数的id中保存。也就是最后的结果通过id保存起来 order:当前函数相对于insert语句的执行顺序,在insert前执行的是before,在insert之后执行的是after resultType:id的类型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() </selectKey> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}); </insert>
keyProperty:将返回的主键放入传入参数的id中保存。也就是最后的结果通过id保存起来
order:当前函数相对于insert语句的执行顺序,在insert前执行的是before,在insert之后执行的是after。
resultType:id的类型
LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值。
4.使用uuid实现返回之间(当主键是字符串的时候使用这种方式)
通过select uuid()得到uuid的值
<insert id="insertUser" parameterType="cn.huida.mybatis.po.User"> <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id"> select uuid() </selectKey> insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address}) </insert>
注意这里使用的order是“BEFORE”
5.测试代码(针对的是主键是自增类型的):
@Test public void testInsertUser() throws Exception{ //通过流将核心配置文件读取进来 InputStream inputStream=Resources.getResourceAsStream("config/SqlMapConfig.xml"); //通过核心配置文件输入流来创建工厂 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream); //通过工厂创建session SqlSession openSession=factory.openSession(); //插入一条记录 User user=new User(); user.setUsername("aaa"); user.setBirthday(new Date()); user.setSex("1"); user.setAddress("qhd"); System.out.println("--------------"+user.getId()); int id=openSession.insert("test.insertUser", user); //一定要提交事务,做查找的时候可以不用提交事务,但是增删改必须要提交事务。 //提交事务 mybatis会自动开启事务,但是它不知道何时提交,需要手动提交事务 openSession.commit(); System.out.println(user); //关闭资源 openSession.close(); //factory没有close(),因为session关闭之后,factory也就关闭了。 }
这里要注意的是insert返回结果存到id中,id通过事务的提交传到user中,从而使user中的id值为数据库插入后的最后的id值。我们要想查看返回的主键值不能直接输出insert返回的id值,而是通过User来查看。
6.单元测试的执行结果:
可以看到我们的id值现在是32。