mybatis学习教程——获取主键ID的方法

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> 




猜你喜欢

转载自blog.csdn.net/jingshenbusi/article/details/80552398