欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Day10——支持主键自增的数据库获取主键值

程序员文章站 2022-06-02 17:04:41
...

一. 问题需求

插入一条新的数据,立马查询这条数据。

分析: 插入新数据很简单,查询数据需要知道这条数据的主键值,因此我们需要在插入新数据后立马获取到并且返回它的主键值

前往免费下载源码

二. 例子

MyBatis中可以使用useGeneratedKeys=“true”,然后把keyProperty设置到目标属性上,如下:

EmployeeMapper.xml

<!-- public void insertEmployee(Employee employee); 
	      
	      parameterType:可以省略不配。MyBatis可以通过具体的参数推断类型
	      useGeneratedKeys:当前使用的是主键自增
	      keyProperty:指定使用对象 的哪个属性来保存返回的主键值
	 -->
	 <insert id="insertEmployee" parameterType="com.atguigu.mybatis.beans.Employee"
	    useGeneratedKeys="true" keyProperty="id">
	     insert into tbl_employee (last_name, email, gender) values (#{lastName}, #{email}, #{gender})
	 </insert>

TestMyBatis.java

@Test
	public void testReturnKeys() throws Exception{
		SqlSessionFactory ssf = getSqlSessionFactory();
		SqlSession session = ssf.openSession();
		//ssf.openSession(true);带自动提交功能
		try {
			EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
			Employee employee = new Employee(null, "柴柴", "[email protected]", "0");
			mapper.insertEmployee(employee);
			
			Integer id = employee.getId();
			System.out.println("主键值:" + id);
			
			session.commit();
			
			
			/**
			 * 底层源码实现主键自增并且返回主键
			 */
//			
//			Connection conn = null;
//			PreparedStatement ps = 
//					conn.prepareStatement("sql语句", PreparedStatement.RETURN_GENERATED_KEYS);
//			ps.executeUpdate();
//			ps.getGeneratedKeys();
			
		} finally {
			// TODO: handle finally clause
			session.close();
		}
		
	}
	
	
	public SqlSessionFactory getSqlSessionFactory() throws Exception {
		String resource = "mybatis-config.xml"; 
		InputStream inputStream = 
				Resources.getResourceAsStream(resource); 
		SqlSessionFactory sqlSessionFactory = 
				new SqlSessionFactoryBuilder().build(inputStream);
		return sqlSessionFactory;
	}
相关标签: MyBatis mybatis