mybatis新增(三)

来源:互联网 发布:风水织梦网站源码 编辑:程序博客网 时间:2024/06/05 05:46

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();    }
原创粉丝点击