为什么要在插入数据后获取主键:当有一个订单表和订单详情表,当插入订单表的数据后,需要在订单详情表插入该订单的具体购物情况,订单详情表需要的一个列是订单表的主键或者订单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文件

最新文章

  1. PHP框架模板原理
  2. Plant Design Review Based on AnyCAD
  3. RSA的傻瓜原理
  4. sharepoint2010问卷调查(4)-实现问卷的重复答复次数(采用自定义字段类型和JS)
  5. Effective C++ -----条款04:确定对象被使用前已被初始化
  6. Django--models一对多实例
  7. 日志分析(三) kibana数据展示
  8. HDU4907小技巧
  9. Swing——布局管理器
  10. default.conf
  11. httprouter使用pprof
  12. Could not find default endpoint element that references contract &#39;wcfXXXXXXXXXXX&#39; in the ServiceMode
  13. POJ 3616 Milking Time 【DP】
  14. go https json
  15. mysql运用now(3)存储时间到毫秒
  16. canvas绘图,html5 k线图,股票行情图
  17. 主键非自增列 EF 插入数据库引起的 ID 列不能为 NULL 的错误
  18. [UE4]动态改变相机OrthWidh、关掉阴影
  19. java 构造json对象数组
  20. 单片机CPU

热门文章

  1. JMeter学习-图形化 HTML 报表概要说明
  2. 设备树DTS 学习:2-设备树语法
  3. java文件的上传
  4. 031、Java中偶数偶数的判断方法
  5. 认识json,详解JsonConfig
  6. ROS-1 : Ubuntu16.04中安装ROS Kinetic
  7. Webstorm常用快捷键备忘
  8. NO2 pwd-touch-vim-vi-echo-重定向等命令
  9. Adapter之ArrayAdapter以及监听器设置
  10. 实训30 延时中断组织块0B20仿真