关于insert返回值
package com.imooc.mybatis;
import com.imooc.dto.GoodsDTO;
import com.imooc.entity.Goods;
import com.imooc.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 javax.xml.ws.RequestWrapper;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.util.*;
public class MyBatisTestor {
private Object Goods;
@Test
public void testSqlSessionFactory() throws IOException {
//利用Reader加载classpath下的mybatis-config.xml核心配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//初始化SqlSessionFactory对象,同时解析mybatis-config.xml文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
System.out.println("SessionFactory加载成功");
}
@Test
public void testMyBatisUtils(){
SqlSession sqlSession = null;
try{
sqlSession=MyBatisUtils.openSession();
Connection connection=sqlSession.getConnection();
System.out.println(connection);
}catch(Exception e){
e.printStackTrace();
}finally{
MyBatisUtils.closeSession(sqlSession);
}
}
@Test
public void testSelectAll(){
SqlSession session=null;
try{
session=MyBatisUtils.openSession();
List<Goods> list=session.selectList("goods.selectAll");
for (Goods g:list
) {
System.out.println(g);
}
}catch(Exception e){
e.printStackTrace();
}finally{
MyBatisUtils.closeSession(session);
}
}
@Test
public void testSelectAllStudent(){
SqlSession session=null;
try{
session=MyBatisUtils.openSession();
List<Student> list=session.selectList("student.selectAll");
for (Student s:list
) {
System.out.println(s);
}
}catch(Exception e){
e.printStackTrace();
}finally{
MyBatisUtils.closeSession(session);
}
}
@Test
public void testSelectById(){
SqlSession session=null;
try{
session = MyBatisUtils.openSession();
Goods = session.selectOne("goods.selectById", 1602);
System.out.println(Goods);
}catch(
Exception e){
e.printStackTrace();
}finally {
MyBatisUtils.closeSession(session);
}
}
@Test
public void selectGoodsMap(){
SqlSession session=null;
try{
session = MyBatisUtils.openSession();
List<Map> list = session.selectList("goods.selectGoodsMap");
for (Map map : list
) {
System.out.println(map);
}
// System.out.println(Goods);
}catch(Exception e){
e.printStackTrace();
}finally {
MyBatisUtils.closeSession(session);
}
}
@Test
public void selectGoodsDTO(){
SqlSession session=null;
try{
session = MyBatisUtils.openSession();
List<GoodsDTO> list = session.selectList("goods.selectGoodsDTO");
for (GoodsDTO g : list
) {
System.out.println(g);
}
// System.out.println(Goods);
}catch(Exception e){
e.printStackTrace();
}finally {
MyBatisUtils.closeSession(session);
}
}
@Test
public void insert(){
SqlSession session=null;
try{
session = MyBatisUtils.openSession();
Goods goods = new Goods();
goods.setTitle("test");
goods.setSubTitle("test123");
goods.setOriginalCost(200f);
goods.setCurrentPrice(100f);
goods.setDiscount(0.5f);
goods.setIsFreeDelivery(1);
goods.setCategoryId(43);
int num=session.insert("goods.insert",goods);
System.out.println(num);
System.out.println(goods.getGoodsId());
session.commit();
}catch(Exception e){
e.printStackTrace();
if(session!=null){
session.rollback();
}
}finally {
MyBatisUtils.closeSession(session);
}
}
@Test
public void insertStudent(){
SqlSession session = null;
try {
session=MyBatisUtils.openSession();
Student student = new Student();
student.setName("楠楠");
student.setRegNo(20171208);
student.setAge(26);
student.setGrade("2013");
student.setMajor("哲学系");
student.setSex("男");
int num = session.insert("goods.insertstudent", student);
System.out.println(num);
session.commit();
} catch (Exception e) {
e.printStackTrace();
if (session != null) {
session.rollback();
}
}finally {
session.close();
}
}
}int num = session.insert("goods.insertstudent", student);
我想问一下怎么判断除了在数据表里面查看,还有什么方法可以知道是否插入成功,上面这个方法的返回值1可以证明插入成功吗,如果可以的话,不是要运行session.commit()才提交吗?
32
收起
正在回答 回答被采纳积分+1
2回答
芝芝兰兰
2019-12-05 18:12:23
同学你好。先要弄明白,执行和真正的提交数据库是两个过程。
1、即便是执行到commit才提交事务,也不是说直到commit执行数据库才执行插入操作。在commit之前,插入实际上可以看做是已经执行了。
commit前的数据操作,同学可以想象是在内存的一块缓冲区域中进行的。在真正的提交后,才会把这个更改存储到数据库中。
2、也就是说,在提交事务时,会检查这个插入是否成功,并且保证它成功插入一条。事务提交可以理解是一个核对的过程。
num是在内存中执行完sql返回,而事务提交之后才会将执行后的数据写在数据库中。但事务回滚是由捕获异常触发的,所以可以根据是否发生异常和num的值两点来判断是否成功插入。
如果解答了同学的疑问,望采纳~
祝学习愉快~
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星