• 【JavaEE】之MyBatis插入数据后获取自增主键


      很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作。针对这个问题,有两种解决方案:

    • 先插入,后查询。我们可以先插入一条数据,然后根据插入的数据的各个字段值,再次访问数据库,从数据库中将刚刚插入的数据查询出来。当然,这种方法是很笨的,不提倡使用。
    • MyBatis为我们提供了一种在插入数据后获取自增主键的方式,通过这种方式,我们可以在插入一条数据之后直接从插入的POJO对象中取出id即可。这种方式简单且效率高、节省代码量,因此提倡使用。

      Mapper.xml文件中的代码如下:

    <mapper namespace="testuser">
        <insert id="insertUser" parameterType="com.itgungnir.hellomybatis.bean.User">
            <!-- 将插入数据的主键返回,返回到User对象中 -->
            <!-- keyProperty:将查询到的主键值设置到parameterType对象的哪个属性中 -->
            <!-- order:SELECT LAST_INSERT_ID()语句的执行顺序(相对于insert语句来说的执行顺序) -->
            <!-- resultType:指定SELECT LAST_INSERT_ID()语句的结果类型 -->
            <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
                <!-- SELECT LAST_INSERT_ID():得到刚insert到数据表中的记录的主键值,只适用于自增主键 -->
                SELECT LAST_INSERT_ID()
            </selectKey>
            INSERT INTO user(name) VALUES(#{name})
        </insert>
    </mapper>

      测试代码中这样写:

    public void insertUser(){
        SqlSession session = null;
        try {
            // MyBatis配置文件
            String resource = "SqlMapConfig.xml";
            // 得到配置文件流
            InputStream is = Resources.getResourceAsStream(resource);
            // 创建会话工厂,传入MyBatis配置文件的信息
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            // 通过工厂得到SqlSession
            session = factory.openSession();
            // 要添加到数据库中的作为参数的员工对象
            User user = new User();
            user.setName("111111");
            // 通过SqlSession操作数据库,查询结果是与映射文件中的resultType相匹配的数据类型
            // 第一个参数:映射文件中Statement的id,等于namespace+"."+statementid
            // 第二个参数:指定和映射文件中的SQL语句匹配的parameter type类型的参数
            session.insert("testuser.insertUser", user);
            // 提交事务
            session.commit();
            // 打印主键
            System.out.println(user.getId());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 释放资源(会话资源)
            if (session != null) {
                session.close();
            }
        }
    }
  • 相关阅读:
    中国移动全球通寻宝第四期攻略
    推荐一个奥运门票交流的网站!
    国务院发出通知明确2008年部分节假日放假安排
    [转]开发人员如何谈加薪,抛砖引玉,欢迎大家各抒己见。
    中级.NET开发人员应该知道些什么?
    linux系统管理 系统安全及应用
    Linux10 进程 定时任务 僵尸进程
    shell脚本练习
    虚拟机和liunx系统的装机
    Linux三剑客awk的应用对比案例详解
  • 原文地址:https://www.cnblogs.com/itgungnir/p/6211303.html
Copyright © 2020-2023  润新知