User user = new User();
user.setName("l2");
user.setPassword("444");
int i = userMapper.addUser(user);
System.out.println(i);
select的返回值没什么好说的,写的不是有resultType还有resultMap嘛,那就是返回值了。
User user = userMapper.getUserById(1);
System.out.println(user.toString());
测试的数据也比较简单。这个就没什么说的了。
INSERT INTO `db_ssm`.`t_user` (`id`, `name`, `password`)
VALUES
(null, #{name}, #{password}) ;
save也比较简单,测试的贴上来。
User user = new User();
user.setName("l2");
user.setPassword("444");
int i = userMapper.addUser(user);
System.out.println(i);
貌似也比较简单,也没什么说的了。
等等,好像忘记了本文的中心思想了,没错,说的就是save。
save 如果成功的话返回值是1,因为我只插入了一条数据。为什么要提数据的事呢,是因为据说这个save返回的就是插入的数据的条数。如果插入多条数据的话…… 想入非非中。可能就不是1了啊。这个我就不试了,遇到的时候再试。
这是验证的结果。
那有的人要问了,如果插入出错了呢。
重新模拟插入错误的,
User user = new User();
// user.setName("l2222");
user.setPassword("111");
int i = userMapper.addUser(user);
System.out.println(i);
注释掉name,
在我的数据库中name是不可以为空的。
所以硬要插入的话肯定会出错的。下面演示结果。
华丽的出错了,瞬间把我原来以为结果会是0的想法冲击的粉碎。
正是我想要的结果。
所以
save的结果,如果成功返回的是1(可能是这个1是影响的条数),失败返回的是exception,而不是0。
身为社会有识青年,怎么能容忍异常的呢。我先简单的处理一下。
User user = new User();
user.setPassword("33333");
int i = 0;
try {
i = userMapper.addUser(user);
} catch (Exception e) {
i = -1;
} finally {
}
System.out.println(i);
这样一搞,如果插入成功的话返回的是1,如果不成功的话返回的是-1。
岂不妙哉,我都佩服自己的聪明才智了。但是我不能排除有没有可能返回0,所有如果返回的数字不小于1判定为插入成功。
但是一般情况下,我们插入成功了,就要在页面上马上用ajax展示出来。但是遗憾的是,我们的这个user怎么能没有id呢,没有id有怎么查,怎么删,怎么改。所以我们在插入的时候要是可以得到id就更好了。
INSERT INTO `db_ssm`.`t_user` (`id`, `name`, `password`)
VALUES
(null, #{name}, #{password}) ;
看到后面 的两个数据了吗?
useGeneratedKeys="true" 这是必须的。
keyProperty="id" 这是id就是绑定的id,那我就疑惑了,这绑定的哪个id啊。令人头疼。你这个返回值明明是int,难道返回的就是这个id。
这个先看测试的文件
User user = new User();
user.setName("1222");
user.setPassword("44122224");
int i = 0;
try {
i = userMapper.addUser1(user);
sqlSession.commit();
} catch (Exception e) {
System.out.println("add error");
} finally {
}
System.out.println(user.toString());
System.out.println(i);
看到这到是明白了,原来不是把id当成返回值啊,原来它是把
parameterType="User" 这是user的id设置成了插入的id。
进来的是没有id的user,出去的是有id的user,真是太厉害了,没想到不仅把返回值改变了,连参数都发生了改变,真是太神奇了。亮瞎了我眼。这思想的境界之高,我等真是不能望其项背。
返回值还是插入的条数。
哦,弄到这,mybatis插入的返回值我是了解的差不多了。
delete from t_user where id = #{id}
我先找个你肯定删不掉的为难你
int i = 0;
try {
i = userMapper.deleteUser(222222);
sqlSession.commit();
} catch (Exception e) {
System.out.println("delete error");
} finally {
}
System.out.println(i);
我让你删id是222222的,我还没创建呢,看你怎么删
删不掉的就返回个0啊,好简单,为什么 不说This can't be deleted,一点都不智能。
int i = 0;
try {
i = userMapper.deleteUser(14);
sqlSession.commit();
} catch (Exception e) {
System.out.println("delete error");
} finally {
}
System.out.println(i);
那试试正常的id= 14
哦,删除正常的返回是1。
我给你个删都删不动的,你怎么搞。
如果删有外键约束的会报错。哈哈哈。
`FK_test` FOREIGN KEY (`name`) REFERENCES `t_user` (`name`)
写到这已经累了,不想写了,但是还有一点,赶紧写完得了。
update t_user set name = #{name}, password = #{password} where id = #{id}
测试 成功
User user = new User();
user.setId(9);
user.setName("121111");
user.setPassword("11111");
int i = 0;
try {
i = userMapper.updateUser(user);
sqlSession.commit();
} catch (Exception e) {
System.out.println("delete error");
} finally {
}
System.out.println(i);
成功是1,失败是0
错误是异常
成功是1,失败是0,错误是异常。一定要捕捉异常。不然项目就崩了。