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();
}