mybatis的插入数据后的主键获取
为什么要在插入数据后获取主键:当有一个订单表和订单详情表,当插入订单表的数据后,需要在订单详情表插入该订单的具体购物情况,订单详情表需要的一个列是订单表的主键或者订单ID。(通俗讲:A表的主键是B表的外键,当向A表添加数据后需要在B表对A表做补充说明,B表的外键列就从A表的主键获取)
1.创建实体类com.entity.Dept(DeptId和DeptName)和com.dao.DeptDao(有方法Integer insert(Dept dept)),这里写的是Dept类,要用到反射的,和后面的deptMapper.xml代码有关
2.在dao模块的resources中创建deptMapper.xml文件,当然,要先在mabatis-config.xml中添加<Mapper resource="deptMapper.xml"></Mapper>
方法一:在deptMapper.xml文件中,
<mapper namespace="com.dao.DeptDao">//命名空间和DeptDao类的全称一样
<insert id="insert" keyProperty="deptId" useGeneratedKeys="true">//deptId是Dept类的字段
insert into dept(dept_name) values (#{deptName})//#{deptName}中的deptName是和Dept类的字段一样
</insert>
</mapper>
java代码:
public class DeptDaoImpl implements DeptDao{ public int insert(Dept dept) {
DeptDao deptDao = MapperFactory.generateMapper(DeptDao.class);
deptDao.insert(dept);
return dept.getDeptId();
}
} public class DeptDaoImplTest { @Test
public void testInsertKey() {
Dept dept = new Dept();
dept.setDeptName("动漫");
int insert = new DeptDaoImpl().insert(dept);
System.out.println(insert);
}
}
方法二:利用<insert>和<selectKey>结合使用:
deptMapper.xml文件内容:
<mapper namespace="com.dao.DeptDao">
<insert id="insert" >
<selectKey resultType="integer" order="AFTER" keyProperty="deptId">
select last_insert_id();//Mysql的函数,获取最后插入的
</selectKey>
insert into dept(dept_name) values (#{deptName})
</insert>
</mapper>
方法三:order="BEFORE"
<mapper namespace="com.dao.DeptDao">
<insert id="insert">
<selectKey keyProperty="deptId" order="BEFORE" resultType="integer">
select 88 // 自己直接设置dept_id
</selectKey>
insert into dept(dept_id,dept_name) values (#{deptId},#{deptName})
</insert>
</mapper>
总结:方法二较之方法一的好处是即使要获取的不是主键也可以。Java部分代码不需要改变,只需要改变xml文件
mybatis的插入数据后的主键获取的更多相关文章
- Mybatis插入数据后返回主键id
有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...
- Laravel 5 插入数据后返回主键ID
方法一: $info = DB::table('表名')->insertGetId(['imgName' => $fileName]);//图片名入库后返回添加数据行的主键ID 方法二:( ...
- Java MyBatis insert数据库数据后返回主键
<selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER&quo ...
- mybatis 插入数据时返回主键
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...
- ibatis实战之插入数据(自动生成主键)
ibatis实战之插入数据(自动生成主键) --------- 如果你将数据库设计为使用自动生成的主键,就可以使用ibatis的<selectKey>元素(该元素是<insert&g ...
- SpringBoot整合MyBatis获得插入数据后获取主键,返回值总是1
xml里的写法 <insert id="insertLogin" parameterType="com.xyt.p2p.pojo.LoginInfo" k ...
- MyBatis + MySQL返回插入成功后的主键id
这是最近在实现perfect-ssm中的一个功能时碰到的一个小问题,觉得需要记录一下,向MySQL数据库中插入一条记录后,需要获取此条记录的id值,以生成对应的key值存入到redis中,id为自增i ...
- MyBatis在Oracle中插入数据并返回主键的问题解决
引言: 在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2 SQL Snipp ...
- [oracle] 如何使用myBatis在数据库中插入数据并返回主键
在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...
随机推荐
- Golang函数-递归函数
Golang函数-递归函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 弱点扫描-openvas初始化
OPENVAS: NESSUS项目分支:商业版的扫描器 管理目标系统的漏洞 免费开源 Kali 默认安装但是未配置个启动 安装 创建证书 同步弱点数据库 创建客户端证书 重建数据库 备份数据库 启动服 ...
- Thymeleaf(一)---引入js/css文件
th:href="@{/static/css/style.css}" th:src="@{/static/js/thymeleaf.js}" index.htm ...
- windowsXP下 使用live555搭建视频服务器,并使用ffplay和VLC播放
首先在官网下载live555:http://www.live555.com/mediaServer/#downloading当然是现在windows的版本了!!上官网下载FFmpeg:http://f ...
- javacv 通过rtsp 获取视频流 设置帧率
原文章:https://blog.csdn.net/eguid_1/article/details/52680802 原代码: /** * 按帧录制视频 * * @param inputFile-该地 ...
- 聊一聊Java中的各种运算符(转载)
计算机之所以叫"计算机",其最基本用途之一就是运算,对应刚刚接触Java的小伙伴而言,熟悉并掌握Java中的各种运算符及其在表达式中的运算优先级是十分必要的. 算术运算 算术运算主 ...
- 【LeetCode】合并两个有序数组
[问题] 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...
- ELK 安装Elasticsearch
章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash ELK栈要安装以下开源组件: Elasticsearch Ki ...
- WebApi发布IIS404
1.确定访问路径有没有问题,路由的设置: 2.配置文件中要加 <modules runAllManagedModulesForAllRequests="true" /> ...
- oracle11g数据库的安装
先在 Oracle官网上下载11g oracle Database 11g 第 2 版 (11.2.0.1.0) 标准版.标准版 1 以及企业版,适用于 Microsoft Windows (x6 ...