mybatis新增(三)

User.xml映射文件配置

<insert id="insertUser" parameterType="com.test.domain.User">
        <selectKey keyProperty="id" resultType="int" order="BEFORE">
            SELECT LAST_INSERT_ID()
        </selectKey>

        INSERT INTO USER 
        (username,birthday,sex,address) 
        VALUES
        (#{username},#{birthday},#{sex},#{address})
    </insert>

这里写图片描述

突然发现写错了标签,select也是可以插入数据的
这里写图片描述

测试代码

@org.junit.Test
    public void insertUser() throws Exception{
        //读取配置文件
        //全局配置文件的路径
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = new User();
        user.setUsername("大小姐");
        user.setSex("2");
        user.setBirthday(new Date());
        user.setAddress("王者");

        int num = sqlSession.insert("test.insertUser", user);

        sqlSession.commit();

        System.out.println(num);

        //关闭资源
        sqlSession.close();
    }

主键返回之自增主键

    <!-- 添加用户 -->
    <!-- selectKey:查询主键,在标签内需要输入查询主键的sql -->
    <!-- order:指定查询主键的sql和insert语句的执行顺序,相当于insert语句来说 -->
    <!-- LAST_INSERT_ID:该函数是mysql的函数,获取自增主键的ID,它必须配合insert语句一起使用 -->
    <insert id="insertUser" parameterType="com.test.domain.User">
        <selectKey keyProperty="id" resultType="int" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>

        INSERT INTO USER 
        (username,birthday,sex,address) 
        VALUES
        (#{username},#{birthday},#{sex},#{address})
    </insert>

keyProperty:selectKey 语句结果应该被设置的目标属性。对应的主键属性
resultType:返回结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串
order: 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。

注:SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错。

测试代码

    @org.junit.Test
    public void insertUser() throws Exception{
        //读取配置文件
        //全局配置文件的路径
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = new User();
        user.setUsername("墨子");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("王者");

        int num = sqlSession.insert("test.insertUser", user);

        sqlSession.commit();

        System.out.println(user.getId());

        //关闭资源
        sqlSession.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值