mybatis新增数据并获取主键值

在很多业务下,对User表新增一条数据后,往往还要以该数据对其他关联的表格做操作,所以拿到该条数据的主键尤为关键。

以下记录 对Mysal和Oracle中的 User表新增一条数据,并获取该条数据的主键

 

 entity

package com.mybatis.bean;

//User表的实体类
public class User {

	//成员变量属性名  建议和  数据库字段保持一致
	private Integer id;
	private String name;
	private Integer money;
	private String sex;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getMoney() {
		return money;
	}
	public void setMoney(Integer money) {
		this.money = money;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

main 方法

public static void main(String[] args) throws IOException {
		
	String resource = "mybatis_config.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
	SqlSession session = sqlSessionFactory.openSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
		
	User u =new User();
		
	u.setMoney(1000);
	u.setName("小笨");
	u.setSex("man");
		
	mapper.save(u); //新增数据
	session.commit();

//	新增数据 完成之后,获取主键id值
	System.out.println("主键:"+u.getId());
}

 

DAO持久层 

public interface UserMapper {
	
	/**
	  新增方法
	 */
	public void save(User u);
}

 

UserMapper.xml 配置

 1.mysql配置
  
 因为mysql的主键id字段设置了主键自增,所以sql指令中没有插入id值,mysql数据库会自动分配值
   代码关键:useGeneratedKeys="true"     keyProperty="id"  。


 
	
	INSERT INTO user(name,money,sex) VALUES(#{name},#{money},#{sex})

 

  2.oracle 配置
 oracle数据库 不支持主键自增,只能借助序列来模拟自增,
 每次插入数据的主键值是从序列中拿到的值,如何获取到这个值?


  在执行 insert 指令之前 ,先查询 序列的下一个值(selectKey),并将值封装给User对象的id字段,
  这样在执行insert指令式,就可以直接从User对象中获取id字段。

 
		
   
   
	
	select seq_USERTEMP_id.nextval  from  dual
  
  INSERT INTO userTemp(id,name,money,sex) VALUES(#{id},#{name},#{money},#{sex})

 

 

你可能感兴趣的:(Mybatis)