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 ...
随机推荐
- Redis之datatype概述
Redis支持的数据类型 String List Set Sorted Set Hashes Bit array HyperLogLog Bina ...
- P1063 计算谱半径
P1063 计算谱半径 转跳点:
- 磁盘空间引起ES集群shard unassigned的处理过程
1.问题描述 早上醒来发现手机有很多ES状态为red的告警,集群就前几天加了几个每天有十多亿记录的业务,当时估算过磁盘容量,应该是没有问题的,但是现在集群状态突然变成red了,这就有点懵逼了. 2.查 ...
- C++中的简单继承
Father.cpp: #include<iostream> using namespace std; class Father { protected: int width; int h ...
- 050、Java中使用switch判断,使用字符串判断
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- Linq----------if使用
static void Main(string[] args) { "; "; var processid = "c8b79051249940acbeca5dd951d2 ...
- wincc的服务器-客户机模式具体做法(全抄-未测试)
一.原来的工作方式:在同一工作组中4台计算机其windows名分别为A.B.C.D且都已安装好wincc5.0+sp2,原来在每台计算机上运行的均是单用户,4台计算机上实际运行的是一个相同的项目,最先 ...
- 51nod 1055:最长等差数列
1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 收藏 取消关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 ...
- asp.net数据库增删改查demo
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- mongodb单机版的安装和配置
首先根据操作系统下载MongoDB的相关安装文件 下载后上传到linux上,解压 将解压后的文件夹重新命名为monggodb4.0.1 命令mv 配置必要的文件夹mgdata存放运行数据,mglog存 ...