1.获取自增id的方法
(1)使用mysql函数LAST_INSERT_ID(),mapper配置文件如下:
<insert id="insertUser" parameterType="com.aruisi.mybatis.dto.UserDTO">
<!-- order参数表示该SQL函数相对于insert语句的执行时间,在其之前before,之后after -->
<!-- 执行完此SQL函数之后,会将自增id封装到输入参数中(parameterType) -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `test`.`user` (
`login_name`,
`sex`,
`age`,
`create_time`
)
VALUES
(
#{loginName},
#{sex},
#{age},
#{createTime}
);
</insert>
(2)测试类
public static void main(String[] args) {
/**
* java 7增强了try语句的功能,圆括号可以声明、初始化一个或多个资源(必须在程序结束时显示关闭的资源)
* try语句在该语句结束时会自动关闭这些资源
*/
try (
//读取配置文件信息
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
//参数为true,设置事务是自动提交
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(reader).openSession(true);
){
UserDTO userDTO = new UserDTO();
userDTO.setLoginName("zhangsan");
userDTO.setAge(12);
userDTO.setSex(0);
userDTO.setCreateTime(new Date());
sqlSession.insert("user.insertUser", userDTO);
UserDTO user = sqlSession.selectOne("user.queryUserById",userDTO.getId());
System.out.println("============="+user.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
(2)使用useGeneratedKeys属性
<!-- useGeneratedKeys表示自增主键,keyProperty对应Java实体类中属性名
mybatis执行完insert语句之后,会自动将自增id值赋给parameterType的属性id -->
<insert id="insertUser" parameterType="com.aruisi.mybatis.dto.UserDTO"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO `test`.`user` (
`login_name`,
`sex`,
`age`,
`create_time`
)
VALUES
(
#{loginName},
#{sex},
#{age},
#{createTime}
);
</insert>
2.获取uuid
<insert id="insertStudentUUID" parameterType="com.aruisi.mybatis.dto.StudentDTO">
<!-- uuid主键时,order必须是BEFORE -->
<selectKey keyProperty="sno" order="BEFORE" resultType="java.lang.String">
<!-- mysql返回长度是36位 -->
SELECT uuid()
</selectKey>
INSERT INTO `test`.`student` (`SNO`,`SNAME`, `AGE`)
VALUES
(#{sno},#{sname}, #{age});
</insert>