mybatis自增主键的问题

来源:互联网 发布:erwin数据建模 pdf 编辑:程序博客网 时间:2024/06/10 03:12

mybatis自增主键有个有意思的地方.在进行插入数据库操作时,新建一个不显式设定id的对象(对于int类型,此时id默认为0),然后执行save操作.该操作在将对象中属性存储在数据库表的同时,设定了该对象的id值,为mybatis自增的数值.而且,即使在新建对象的时候,显式设定了id的值,如new User(1,"tom"),在进行insert操作之后,该对象的id值也自动变为了mybatis自增的id值.这是mybatis内部的机制,不亲自试一下觉得这么轻易地就改变了对象的id值多多少少有些不可思议.

看代码:

1CREATE TABLE  user (
2  user_id int(10) unsigned NOT NULL auto_increment,
3  email_id varchar(45) NOT NULL,
4  password varchar(45) NOT NULL,
5  first_name varchar(45) NOT NULL,
6  last_name varchar(45default NULL,
7  PRIMARY KEY  (user_id),
8  UNIQUE KEY Index_2_email_uniq (email_id)
9) ENGINE=InnoDB DEFAULT CHARSET=latin1;

01package com.sivalabs.mybatisdemo.domain;
02public class User
03{
04 private Integer userId;
05 private String emailId;
06 private String password;
07 private String firstName;
08 private String lastName;
09 
10 @Override
11 public String toString() {
12  return 'User [userId=' + userId + ', emailId=' + emailId
13    ', password=' + password + ', firstName=' + firstName
14    ', lastName=' + lastName + ']';
15 }
16 //setters and getters
17}


01package com.sivalabs.mybatisdemo.mappers;
02 
03import java.util.List;
04import com.sivalabs.mybatisdemo.domain.User;
05 
06public interface UserMapper
07{
08 
09 public void insertUser(User user);
10 
11 public User getUserById(Integer userId);
12 
13 public List<User> getAllUsers();
14 
15 public void updateUser(User user);
16 
17 public void deleteUser(Integer userId);
18 
19}


30  <insert id='insertUser' parameterType='User' useGeneratedKeys='true' keyProperty='userId'>
31   INSERT INTO USER(email_id, password, first_name, last_name)
32    VALUES(#{emailId}, #{password}, #{firstName}, #{lastName})
33  </insert>

49    @Test
50    public void testInsertUser()
51    {
52     User user = new User();
53     user.setEmailId('test_email_'+System.currentTimeMillis()+'@gmail.com');
54     user.setPassword('secret');
55     user.setFirstName('TestFirstName');
56     user.setLastName('TestLastName');
57 
58     userService.insertUser(user);
59  Assert.assertTrue(user.getUserId() != 0);
60  User createdUser = userService.getUserById(user.getUserId());
61  Assert.assertNotNull(createdUser);
62  Assert.assertEquals(user.getEmailId(), createdUser.getEmailId());
63  Assert.assertEquals(user.getPassword(), createdUser.getPassword());
64  Assert.assertEquals(user.getFirstName(), createdUser.getFirstName());
65  Assert.assertEquals(user.getLastName(), createdUser.getLastName());
66 
67 }

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 跑步机钥匙丢了怎么办 跑步机磁铁丢了怎么办 瑜伽拉筋拉伤了怎么办康复 大腿拉筋拉伤了怎么办 肚子饿的咕咕叫怎么办 手表折叠扣松了怎么办? 手表链扣松了怎么办? 原车挡泥板碎了怎么办 车检通不过的车怎么办 车子被轻微刮了怎么办 车龙门架弯了怎么办 材料合格工地非说不合格怎么办 汽车翼子板撞过弄好缝隙大怎么办 手表秒针摔掉了怎么办 元征升降机泄压怎么办 自拍杆的杆子往下下滑怎么办 小狗被车压了一下拉血怎么办 有鬼给你磕头让你不好怎么办 腿又粗又短怎么办 腿又短又粗怎么办 因跑步小腿变粗怎么办 健身后小腿变粗怎么办 打非洲鼓打的手疼怎么办 无塔供水压力小怎么办 家用增压水塔压力不稳定怎么办 蝴蝶耳堵比较紧怎么办 跑步机踏板坏了怎么办 遥控器电池没电了怎么办 空调遥控器电池没电了怎么办 想要自慰家里没有情趣用品怎么办 对政协提案的答复有意见怎么办 邻居在自建房养殖鳖怎么办 江桥全民健身卡怎么办 南翔全民健身卡怎么办 椭圆机皮带断了怎么办 不小心扭腰了怎么办 扭腰之后腿疼怎么办 扭腰怎么办吃什么补 湖州奥体中心怎么办卡 学车把教练投诉了怎么办 白球鞋鞋边发黄怎么办