简单介绍:在使用mybats插入数据是,有很多需要和id关联的其他数据,所以在插入一条信息时获取其主键信息是很常见的操作。

一 mysql数据库的主键自增(int类型的主键)

1 创建一个表,设置表的id(此id必须是int类型),设置为auto_increment自增类型

2 映射文件配置如下:

insert into user(name,sex,age) values(#{name},#{sex},#{age})

useGeneratedKeys:设置为true表示开启主键自增。

keyProperty:指定数据库主键对应的实体类属性,好将自增的主键赋值给传入的实体类参数。由于数据库设置的id的主键自增,所以这里的插入sql没有对id进行插入,mysql会自动赋值。

3 测试与输出

@Test

public void insertUser(){

User user = new User();

user.setAge(55);

user.setName("zyb");

user.setSex("男");

userDao.insertUser(user);

System.out.println(user);

}

==> Preparing: insert into user(name,sex,age) values(?,?,?)

==> Parameters: zyb(String), hhh(String), 55(Integer)

<== Updates: 1

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f099cef]

User(name=zyb, age=55, sex=hhh, id=1)

可以看见的是参数实体类并没有设置id值,但是在执行了插入之后,mybatis自动就将生成的主键值赋值给了实体类的id属性。这种返回数据库生成的id必须要定义 useGeneratedKeys="true" keyProperty="id"两个属性才行,不然不会给实体类参数的id属性赋值为新生成的主键值。

二 自动生成uuid类型的主键

1 数据库定义一个id为varchar类型的表,注意长度最好设置长点,这里设置的是64,因为生成的uuid长度都比较长。

2 映射文件配置如下:

select replace(uuid(),'-','')

insert into student(id,name,sex,age) values(#{id},#{name},#{sex},#{age})

:作用就是封装一条需要执行的sql

resultType:指定执行了标签里面的sql后返回的java类型。

keyProperty:指定将标签里面的sql的执行结果封装给传入实体类的那个属性。

order:值为BEFORE/AFTER 表示标签里面的sql是在插入sql之前还是之后执行,并将结果赋值给实体类的某个属性(通过keyProperty指定)。

需要注意的是,这里必须在sql中传入对id进行插入,并且,由于要在执行了标签里面的sql后,传入的实体类的id才有值,所以标签里面的sql必须在插入sql执行之前执行,即order="BEFORE",如果设置为order="AFTER ",在插入之后执行,虽然任然会对参数实体类的id赋值,但是数据库中却没有插入id值,因为在之后执行,这时插入的实体对象的id还没有赋值。

ibatis mysql 自增_mybatis自增主键相关推荐

  1. mybatis 主键自增 insert后返回主键

    mybatis 主键自增 insert后返回主键 : <insert id="insertStudentAutoKey" parameterType="Studen ...

  2. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  3. mysql中非主键不能自增吗_mysql非主键自增长用法实例分析

    本文实例讲述了mysql非主键自增长用法.分享给大家供大家参考,具体如下: mysql并非只有主键才能自增长,而是设为键的列就可以设置自增长.   如下: CREATE TABLE t1 ( id I ...

  4. mysql插入成功返回主键_MyBatis + MySQL返回插入成功后的主键id

    这是最近在实现perfect-ssm中的一个功能时碰到的一个小问题,觉得需要记录一下,向MySQL数据库中插入一条记录后,需要获取此条记录的id值,以生成对应的key值存入到redis中,id为自增i ...

  5. php id如何设置主键自增,phpmyadmin设置id主键自增报错怎么办_数据库

    phpmyadmin啥意思_数据库 phpmyadmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库,如建立.修 ...

  6. db2主键自增和oracle,DB2主键自增长设置(id自增)

    接触DB2还没有多久,最近的项目中 需要创建一个表,表的主键自增长,毕竟跟Oracle有点不一样啊! CREATE  TABLE T_RUNNING_THREAD ( IDINTEGER NOT NU ...

  7. think migrate自增字段与复合主键的使用方法

    使用 thinkphp数据库迁移工具,建表时,默认产生id字段,并且是自增的,但是为了很多情况下,需要不创建自增字段,可以使用下面的语句,也可以创建复合主键(多个字段的复合主键) public fun ...

  8. mapper中mysql复合语句_MyBatis定义复合主键

    前为别名后为主查询getXXX语句中字段 SELECT colid,colname FROM table1 SELECT * FROM table2 WHERE id = #{id} AND name ...

  9. php sqlite id自增,Android sqlite设置主键自增长的方法教程

    今天在APP中增加一个添加项目的功能,项目的主键为整数,要让它自增长. 既然要自增长,那么在代码里面就不用给id字段赋值.但是调试的时候发现不行,提示主键重复,观察了输出,不赋值的话,id默认为0,于 ...

最新文章

  1. python入门要多久-初学者如何快速上手python入门要多久
  2. 搬家到新地址:http://kittsoft.xp3.biz/,欢迎访问!
  3. poj2826 An Easy Problem?!(计算几何)
  4. java jinternalframe_JInternalFrame的使用
  5. 7-1-JavaBean基础
  6. Flex中添加大量组件时内存占用问题
  7. 关于javascript控制系统弹出下载提示 用以下载图片
  8. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
  9. JAVA环境变量配置步骤及测试(JDK的下载、安装和环境配置教程)
  10. java速成----一篇博文搞定基础
  11. 反病毒工具 PCHunter 1.5.6
  12. 美国人因工程学的历史
  13. Transmission下载安装
  14. Premiere Elements 2021 安装教程【电脑配置要求较高】
  15. 华为交换机,登录密码忘记
  16. scikit-learn:4.3. Preprocessing data(standardi/normali/binari..zation、encoding、missing value)
  17. 2018-10-10工作日报
  18. Linux中括号的使用
  19. DeepMind AI碾压《星际争霸2》人类职业玩家 但它还不完美
  20. office使用技巧大全

热门文章

  1. C# socket nat 映射 网络 代理 转发
  2. RUNOOB python练习题29
  3. js将base64做UrlEncode转码
  4. Android零基础入门第83节:Activity间数据传递方法汇总
  5. 《机器人学经典教程》——2.2 控制论
  6. XCoreRedux框架:Android UI组件化与Redux实践
  7. 项目总结SpringMVC相关
  8. CodeForces 176A Trading Business 贪心
  9. C#反射技术在多语言实现中的实际用处参考,让初学者学技术有个针对性【附源码】...
  10. php pfm 改端口,罗马2ESF和PFM 修改建筑 军团 派系 兵种等等等很多东西的教程