使用Mybaties插入数据时返回主键

Mysql:

  1. useGeneratedKeys和keyProperty配置即可,前者是指设置是否使用jdbc的getGenereatedKeys方法获取主键并赋值到keyProperty设置的属性中,后者即实体类主键字段
    e.g: xml文件
 <insert id="insert2ReturnId" useGeneratedKeys="true" keyProperty="id" parameterType="com.yaoxx.OA.vacation.entity.VacationPlan">
    insert into t_vacation_plan (
    				c_id,
    				c_dept_id,
    				c_create_time, 
			        c_creater_id,
			        c_status)
    values (
    				#{id,jdbcType=INTEGER}, 
    				#{deptId,jdbcType=INTEGER},
    			    #{createTime,jdbcType=TIMESTAMP}, 
			        #{createrId,jdbcType=INTEGER},
			        #{status,jdbcType=INTEGER})
  </insert>

使用时并不是直接获取mapper接口中方法的返回值,而是从方法参数那个实体中获取:

@Transactional
@Service
public class VacationPlanServiceImpl implements VacationPlanService{
	
	@Autowired
	private VacationPlanMapper planDao;

	@Override
	public Integer addOne(VacationPlan plan) {
		 planDao.insert2ReturnId(plan);//此方法对应上面的.xml
		 return plan.getId();//执行xml后会对此实体添加id
	}

}

  1. 使用注解的方式(- -没测试- -)
@Mapper
public interface UserMapper
{
    @Insert("insert into tbl_user (name, age) values (#{name}, #{age})")
    @Options(useGeneratedKeys=true, keyProperty="userId", keyColumn="id")
    void insertUser(User user);//通过user.getId();获取
    
}

Orcle

其中common_sequence是一个专门给表提供自增主键的序列

<!-- 创建序列sql -->
CREATE SEQUENCE common_sequence

INCREMENT BY 1 -- 每次递增1

START WITH 1 -- 从1开始

MINVALUE 1 -- 最小值=1

NOCYCLE; -- 不循环
<insert id="addOne" parameterType="com.dd.work.workaudit.entity.WtspStatus" useGeneratedKeys="true" keyProperty="id" >
       <!-- 返回查询并将id添加进实体参数 -->
        <selectKey keyProperty="id" resultType="int" order="BEFORE">
            select common_sequence.nextval from dual
        </selectKey>
		insert into T_WTSP_STATUS
        	(
    			C_ID,
        		C_STATION_NAME
        	)  
            values
            (
            	#{id, jdbcType=INTEGER},
				#{stationName, jdbcType=VARCHAR} 
            )  
    </insert>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一款基于Java的持久层框架,它的设计理念是将数据库操作与具体的SQL语句解耦,通过XML或注解的方式来配置SQL语句,并提供了强大的映射功能,能够将查询结果映射为Java对象。 在MyBatis中,插入数据返回主键有多种方式,其中比较常用的方式是使用数据库的自增长主键。下面是在MyBatis中插入数据返回主键的源码解析: 1. 配置SQL语句:在XML文件或注解中配置插入SQL语句,并设置useGeneratedKeys属性为true,以启用主键返回功能。 2. 执行插入操作:通过MyBatis的SqlSession对象调用插入方法,传入SQL语句的参数。 3. SQL语句解析:MyBatis会根据配置的SQL语句解析生成相应的PreparedStatement对象。 4. 执行插入操作并返回主键:MyBatis会通过PreparedStatement的executeUpdate方法执行插入操作,并获得影响的行数。如果配置了自动生成主键的功能,则会通过PreparedStatement的getGeneratedKeys方法获取到插入数据生成的主键。 5. 主键映射:如果返回主键是自动生成的,则MyBatis会根据配置的主键返回类型自动进行映射,将插入数据生成的主键值设置到对应的Java对象中。 6. 返回结果:最后,MyBatis会将插入操作的结果包装成对应的Java对象,并返回给调用方。 总结来说,MyBatis插入数据返回主键的过程是通过配置SQL语句和设置相关属性,然后执行插入操作并获取主键值,最后将主键值映射到Java对象中,返回给调用方。这样就可以方便地使用自动生成的主键值进行后续操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值