公司决定新项目用mybatis,虽然这个以前学过但是一直没用过都忘得差不多了,而且项目比较紧,也没时间去系统点的学一学,只好很粗略的百度达到能用的程度就行了。

其中涉及到插入实体要求返回主键id的问题,以前用ssh配合oracle很容易实现,因为有sequence,而且mysql也基本没用过,所以只好去百度了。

  这个内容还是比较好查的,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.UserDao">
  <insert id="insertUser" parameterType="com.entity.User">
insert into sys_User(username,classes)
values(#{username},#{classes})
</insert>
</mapper> 

  本来我们一般配置一个不需要返回主键的,并且id是自增的,只需要上述配置即可,values中的大括号内的字段和parameterType指向的实体类的字段大小写记得对应起来,然后namespace的路径与接口方法路径对应起来,然后调用这个sql的接口方法就只需如下:

public interface UserDao{

    /**
* 新增学生
* @param User
*/
public void insertUser(User user); }

  如果需要返回插入时自增主键的值的话,上述方法就需要稍微更改下了,其中存放数据库语句的xml文件里需要相应更改配置,而接口方法的返回值类型也需要更改,如下:

xml方法:记得加上useGeneratedKeys和keyProperty配置即可,前者是指设置是否使用jdbc的getGenereatedKeys方法获取主键并赋值到keyProperty设置的属性中,后者即实体类主键字段
<insert id="insertUser" useGeneratedKeys="true" keyProperty="userid" parameterType="com.entity.User">
    insert into sys_User(username,classes)
    values(#{username},#{classes})
</insert> 接口方法返回值改为int即可,因为mysql也只有int类型值支持自增,但是没试过返回值为string是不是能够成功返回,我猜想应该是可以的
  /**
* 新增学生
* @param User
*/
public int insertUser(User user);

  到这一步为止其实都没有什么问题,很容易就能百度到,具体是在调用时候,我不小心进了一个坑,我程序代码片段类似于这样的:

User user=new User();
user.setUsername("acfun");
user.setClasses("注孤生一班");
int id=userDao.insertUser(user);
system.out.println(id)

  结果我发现不管怎么样返回来的都是1,即便数据库中主键已经自增到10了。。。

  后来才知道是姿势不对,应该如下:

User user=new User();
user.setUsername("acfun");
user.setClasses("注孤生一班");
userDao.insertUser(user);
system.out.println(user.getUserid);

  这样才是返回的自增的id。

  只怪自己没理解意思,其实人家插入以后取回来的主键直接给赋值到你当做参数的实体的id里面去了,至于方法返回值返回的应该是受影响行数,那个useGeneratedKeys说的很清楚了,使用jdbc的getGenereatedKeys方法获取主键并赋值到keyProperty设置的属性中,但是由于比较紧急就草草的根据百度看人家怎么配置就怎么配置,想当然的去用了。

  话说这么初级的一个问题我也水了这么多字也真不好意思,因为知道自己水平有限,就写的详细一点,也没关乎什么原理性的东西,因为有些东西在熟悉的人看来实在简单不过,根本无需一提,但是实际上看你的博文的可能会是一个初入java的小白,就像我在找minasocket方面的使用方法时候就感觉深受其害,泪流满面,找到的基本都是说的各种原理源码啥的,我想看到的结果博主一句:此类代码实在简单,无需赘述。。。看的我当时就。。。也不怪人家,确实不同的位置不同的看法。

  现在项目太紧,都没时间去好好系统的学一下,基本都是需要用到什么赶紧去查使用方法,也不去管原理什么的,今天难得稍微闲下来一点发个毫无深度的博文,希望有些和我一样的小白别掉同样的坑里。

  已经连续一个多月加班到晚上9点半并且周末无休的初级程序猿留。。。

可能代码会有些许错误,因为是直接从公司项目代码拷过来,然后改成User这种的,可能有些路径方面没改正确。以后等项目稍微告一段落,闲下来了,再去自己搭个ssm的框架,去稍微具体点的学习学习。

关于mybatis用mysql时,插入返回自增主键的问题的更多相关文章

  1. Mybatis批量插入返回自增主键(转)

    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:useGenerateKeys和keyProperty. 2.不支持生成自增主键的数据库:< ...

  2. mybatis插入操作时,返回自增主键id

    mapper.xml 代码 <insert id="insert" parameterType="com.Student" > <select ...

  3. mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)

    通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...

  4. mybatis 设置新增数据后返回自增主键

    主要是注解@Options起作用,语句如下: @Insert({ "INSERT INTO application_open_up ( " + "app_open_hos ...

  5. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  6. Mybatis:插入数据返回自增主键

    使用Mybatis作为工具连接MySQL,要求在插入数据之后返回自增主键 一开始也很迷惑,Mybatis使用insert之后,成功返回的是1,失败会报错或返回0,主键去哪找来 后来知道Mybatis可 ...

  7. Spring中新建记录后返回自增主键的处理方法

    接手一个旧系统改造的过程,要插入后立即返回自增值,不能重构guid类型主键,Spring提供了很优美的机制. Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值 ...

  8. mysql数据库表的自增主键号不规律,重新排列

    mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...

  9. Mysql数据库表的自增主键ID号乱了,需要重新排列。

    Mysql数据库表的自增主键ID号乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键:ALTER TABLE `table_name` DROP `id`; 2, ...

随机推荐

  1. document.getElementsByClassName方法的重写(OVERRIDE)

    众所周知,对于IE8以下的浏览器(IE8居然是WIN7预装的)没有document.getElementsByClassName,网上也有很多重写的方法,以下是本人在项目中所使用的方法 documen ...

  2. Codeforces Round #362

    A - Pineapple Incident #pragma comment(linker, "/STACK:102c000000,102c000000") #include &l ...

  3. Java每日一则-002

    Java中包的层级关系 java中的包在逻辑上是没有套嵌的,也就是说: java.lang 和 java.lang.awt 是两个平行的包,地位相等,互不相关.只不过一个名字叫java.lang另一个 ...

  4. C++ 我想这样用(七)

    话接前篇,继续基于对象编程语法的剩余部分: 6.类的const成员函数和const对象 const数据成员:跟const常量一样,只是一个在类里(而且是在构造函数里),一个在类外而已,都必须初始化. ...

  5. Ubuntu 12.04 pppoe拨号问题

    我的系统信息: Ubuntu 12.04.4 X64 Q001: 我学校需要使用pppoe拨号上网.我在宿舍架了个路由,可以使用无线连接拨号上网,也可以使用网线连接.在ubuntu下,使用无线连接时没 ...

  6. POJ2763-Housewife Wind(树链剖分)

    也是入门题,和上一题不一样的是权值在边上. 调了半天后来发现线段树写错了,build的时候没有pushup...蠢哭了好吗.... 做题还是不专心,太慢辣.. #include <algorit ...

  7. 转】Maven学习总结(二)——Maven项目构建过程练习

    原博文出自于:http://www.cnblogs.com/xdp-gacl/p/4051690.html 感谢! 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven ...

  8. C++问题-Qt Visual Studio Add-in

    问题现象:用VS打开其他人的项目提示如下:Qt Visual Studio Add-in...中间全TMD的英文,我就省略...QT版本不对,需要修改QT版本. 问题原因:占时不明,因为我是开发Del ...

  9. Red5边源服务器集群部署

    http://www.myexception.cn/open-source/446184.html Red5简介: Red5是一个采用Java开发开源的Flash流媒体服务器.它支持:把音频(MP3) ...

  10. jquery easyui的layout

    1.创建一个布局:layout是一个容器,它有5个区域:north(北),south(南),east(东),west(西):center(中)-----------学习中文网地址 <body c ...