zoukankan      html  css  js  c++  java
  • mybatis框架入门程序:演示通过mybatis实现数据库的插入操作中实现返回结果的获取

      

    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。

  • 相关阅读:
    26个新鲜有魅力的自适应网站设计实例
    计划——Redis
    Go语言工具go get的一点问题
    JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼
    策略模式
    在Sping的配置文件中,关于dataSource的配置,就我们常用的方法大致可以有三种:
    Spring 中 用 ${xxx} 读取properties文件的说明
    Spring中属性文件properties的读取与使用
    通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
    设置xml以让通知spring 扫描 注解
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10150222.html
Copyright © 2011-2022 走看看