本篇博客内容是:修改数据 & 删除数据。
目录
0.更新和删除简介
1.更新
(1)先在goods.xml中编写【修改的SQL标签】
(2)然后,测试 & 运行结果
2.删除
(1)先在goods.xml中编写【删除的SQL标签】
(2)然后,测试 & 运行结果
0.更新和删除简介
更新和删除:
自然,删除时,parameterType是其他的包装类型,或者Goods类型,或者Map等(应该)都是可以的。
1.更新
(1)先在goods.xml中编写【修改的SQL标签】
说明:
(1) update标签,paremeterType必须是实体类吗?不!,经过实测,发现,在更新的时候,paremeterType是Map也是可以的:
PS,感觉,具体的parameterType是什么类型,可能需要看前端传过来的是什么参数,然后再结合后台看怎么做更好,,,,OK,能懂这个意思吧~~~
(2)然后,测试 & 运行结果
package com.imooc.mybatis;
import com.imooc.mybatis.dto.GoodsDTO;
import com.imooc.mybatis.entity.Goods;
import com.imooc.mybatis.entity.Student;
import com.imooc.mybatis.utils.MyBatisUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* JUnit单元测试类
*/
public class MyBatisTestor {
@Test
public void testUpdate() throws Exception {
SqlSession session = null;
try {
session = MyBatisUtils.openSession();
Goods goods = session.selectOne("goods.selectById", 998); //首先,根据商品id获取商品对象
// 然后,再修改这个Goods对象
goods.setTitle("更新测试商品标题");
// update方法返回值:本次更新成功的数据又多少;
int num = session.update("goods.update", goods);
session.commit();// commit()方法:提交事务数据。
} catch (Exception e) {
if (session != null){
session.rollback(); // 如果程序出错,未能完整执行,则回滚事务。。。
// PS:发现Mybatis封装后,事务控制在编码实现上简单了些
}
throw e;
}finally {
MyBatisUtils.closeSession(session);
}
}
}
说明:
(1) 更新操作,不建议手动set去组织Goods对象:
而是,通过去数据库中查询来得到原始数据:
运行结果:
2.删除
(1)先在goods.xml中编写【删除的SQL标签】
说明:
(1) 因为在实际中,大多数的删除操作,是根据主键来进行的,因此此处的示例中,paremeterType设置成了Integer;;;
经过实测,发现在删除的时候,paremeterType设置成Goods也是可以的:
(2)然后,测试 & 运行结果
package com.imooc.mybatis;
import com.imooc.mybatis.dto.GoodsDTO;
import com.imooc.mybatis.entity.Goods;
import com.imooc.mybatis.entity.Student;
import com.imooc.mybatis.utils.MyBatisUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* JUnit单元测试类
*/
public class MyBatisTestor {
@Test
public void testDelete() throws Exception {
SqlSession session = null;
try {
session = MyBatisUtils.openSession();
// delete方法返回值:本次删除成功的数据有多少;
int num = session.delete("goods.delete", 998);
session.commit();// commit()方法:提交事务数据。
} catch (Exception e) {
if (session != null){
session.rollback(); // 如果程序出错,未能完整执行,则回滚事务。。。
// PS:发现Mybatis封装后,事务控制在编码实现上简单了些
}
throw e;
}finally {
MyBatisUtils.closeSession(session);
}
}
}
运行结果:
注: 临时的感觉:在异常处理的时候,相对底层的代码的异常尽量向上抛,交给上层的调用者去处理,而不是在底层就把异常给捕获;;以防止在底层出现异常后,上层调用者被蒙蔽了双眼。