ibatis 如何生成自增主键

时间:2021-07-10 00:44:07
我刚学ibatis  


xml中配置为

<select id="login" parameterClass="User" resultMap="user">
SELECT * FROM users where userName=#userName# and password=#password#
</select>

<insert id="register" parameterClass="User">

insert into users(uid,userName,password,userType) values  
                            (#uid# ,#userName# ,#password#,#userType#);  
</insert>



JAVA代码中如下配置

User user = new User();
// user.setUid(10);
user.setUserName(userName);
user.setPassword(password);
user.setUserType("1");
boolean bool = SpringUtil.getBeans().getUserDao().insert(user);


现在是可以进行插入的,但是表的主键是我在这里设置的user.setUid(10);,


[size=12px][/ 如果数据库表的主键是自增的数字主键如何处理????

如果没有自增的数字主键,ibatis 如何处理??????
size]

6 个解决方案

#1



<insert id="insertUser" parameterClass="User">

  insert into t_user values (

       null,#username#,#password#,#,#userType#

  )
//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置

//如果不通过<selectKey>标签来设置,则返回值为空!
  <selectKey resultClass="int" keyProperty="id">

       SELECT @@IDENTITY AS ID

  </selectKey> 

 </insert>

#2


引用 1 楼 lvbang_lzt 的回复:
Java code<insert id="insertUser" parameterClass="User">

  insert into t_user values (null,#username#,#password#,#,#userType#

  )//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置//如果不通过<selectKey>标签来设置,则返回值为空!<?-



我用的是MYSQL,使用SELECT @@IDENTITY AS ID
每次查到的都是0

#3


字段未自增长

#4


引用 3 楼 yanghao0 的回复:
字段未自增长



恩,是的,每次都是0 

#5


既然是自增字段,为什么要获得呢?
只有数据保存后,才能通过查询对象获得


如果没有自增的数字主键,ibatis 如何处理:
ibatis不会负责帮你生成主键,需要你自己指定,ibatis 只负责数据的处理,不负责数据的生成

#6


引用 1 楼 lvbang_lzt 的回复:
Java code<insert id="insertUser" parameterClass="User">

  insert into t_user values (null,#username#,#password#,#,#userType#

  )//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置//如果不通过<selectKey>标签来设置,则返回值为空!<?-



谢谢2楼,
我把数据库表修改为主键自增

DROP TABLE IF EXISTS  `store`.`users`;
CREATE TABLE  `store`.`users` (
  `uid` int auto_increment primary key ,
  `userName` varchar(20) NOT NULL,
  `password` varchar(32) NOT NULL,
  `userType` varchar(20) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


然后配置修改为

<insert id="insertProduct-MYSQL" parameterClass="User">   
 insert into users values(null,#userName# ,#password#,#userType#);
  <selectKey resultClass="int" keyProperty="uid">
        SELECT @@IDENTITY AS UID
       </selectKey> 
</insert>  

现在操作都成功了,多谢哈

#1



<insert id="insertUser" parameterClass="User">

  insert into t_user values (

       null,#username#,#password#,#,#userType#

  )
//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置

//如果不通过<selectKey>标签来设置,则返回值为空!
  <selectKey resultClass="int" keyProperty="id">

       SELECT @@IDENTITY AS ID

  </selectKey> 

 </insert>

#2


引用 1 楼 lvbang_lzt 的回复:
Java code<insert id="insertUser" parameterClass="User">

  insert into t_user values (null,#username#,#password#,#,#userType#

  )//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置//如果不通过<selectKey>标签来设置,则返回值为空!<?-



我用的是MYSQL,使用SELECT @@IDENTITY AS ID
每次查到的都是0

#3


字段未自增长

#4


引用 3 楼 yanghao0 的回复:
字段未自增长



恩,是的,每次都是0 

#5


既然是自增字段,为什么要获得呢?
只有数据保存后,才能通过查询对象获得


如果没有自增的数字主键,ibatis 如何处理:
ibatis不会负责帮你生成主键,需要你自己指定,ibatis 只负责数据的处理,不负责数据的生成

#6


引用 1 楼 lvbang_lzt 的回复:
Java code<insert id="insertUser" parameterClass="User">

  insert into t_user values (null,#username#,#password#,#,#userType#

  )//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置//如果不通过<selectKey>标签来设置,则返回值为空!<?-



谢谢2楼,
我把数据库表修改为主键自增

DROP TABLE IF EXISTS  `store`.`users`;
CREATE TABLE  `store`.`users` (
  `uid` int auto_increment primary key ,
  `userName` varchar(20) NOT NULL,
  `password` varchar(32) NOT NULL,
  `userType` varchar(20) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


然后配置修改为

<insert id="insertProduct-MYSQL" parameterClass="User">   
 insert into users values(null,#userName# ,#password#,#userType#);
  <selectKey resultClass="int" keyProperty="uid">
        SELECT @@IDENTITY AS UID
       </selectKey> 
</insert>  

现在操作都成功了,多谢哈