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。

 

posted on 2018-12-20 16:34  wyhluckydog  阅读(503)  评论(0编辑  收藏  举报