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"  。

<!-- 新增方法    public void save(User u) 
		useGeneratedKeys="true" : 告诉mybatis使用主键自增   生成策略
		keyProperty="id"  :将获取到的主键值   封装到com.mybatis.bean.User (入参对象)的 id字段中	 
	-->
<insert id="save" parameterType="com.mybatis.bean.User" databaseId="mysql" useGeneratedKeys="true" keyProperty="id"> 
	<!-- mybatis 支持主键只增,主键的值使用的是原生的jdbc方法  getGeneratedKey -->
	INSERT INTO user(name,money,sex) VALUES(#{name},#{money},#{sex})
</insert>

 

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


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

<insert id="save" parameterType="com.mybatis.bean.User" databaseId="oracle"> 
		
  <selectKey keyProperty="id" order="BEFORE" resultType="_int"> 
   <!--  keyProperty=id : 将查询出来的值封装到 User对象的id字段中
	     order="BEFORE" : 在执行insert插入数据之前---先执行该指令
	 	 resultType="_int" :数据返回值类型
   -->
	<!-- 编写SQL指令,查询序列的下一个值 作为插入 数据的主键 -->
	select seq_USERTEMP_id.nextval  from  dual
  </selectKey>
  INSERT INTO userTemp(id,name,money,sex) VALUES(#{id},#{name},#{money},#{sex})
</insert>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值