本篇博客内容是:向表中插入数据。

注:JDBC是java提供的一个操作数据库的API;Mybatis是一个持久层ORM框架,底层是对JDBC的封装。 Mybatis对JDBC操作数据库做了一系列优化。即为了实现某个功能,JDBC和Mybatis在实际编码上是不同的,但是Mybatis的背后都是JDBC在做支撑啦。(详细内容可以参考:Mybatis是什么以及Mybatis和JDBC的关系?,能够帮助梳理清楚Mybatis和JDBC的关系)

PS:一旦设计数据的写(插入、修改、删除),就必须要涉及到数据库的事务:Mybatis封装了JDBC的事务控制机制,操作起来十分方便。

(1)java程序,Navicat都是客户端;

(2)数据库事务可以参考MySQL综合应用二:事务机制一:事务的基本介绍等文章;


目录

(0)本篇博客主要内容是,插入数据:插入数据方法的简介

(1)先在goods.xml中编写【插入的SQL标签】

(2)然后,测试 & 运行结果


(0)本篇博客主要内容是,插入数据:插入数据方法的简介

(1)先在goods.xml中编写【插入的SQL标签】

发现,向t_goods表中插入数据,insert标签的paremeterType(即参数类型)就是Goods实体类类型;

(2)然后,测试 & 运行结果

package com.imooc.mybatis;

import com.imooc.mybatis.dto.GoodsDTO;
import com.imooc.mybatis.entity.Goods;
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 testInsert() throws Exception {
        SqlSession session = null;
        try {
            session = MyBatisUtils.openSession();
            Goods goods = new Goods();
            goods.setTitle("测试商品");goods.setSubTitle("测试子标题");goods.setOriginalCost(150f);
            goods.setCurrentPrice(100f);goods.setDiscount(0.67f);goods.setIsFreeDelivery(1);
            goods.setCategoryId(43);
            // insert()方法返回一个int类型的返回值:代表本次成功插入的记录总数;
            // (因为这儿我们不是批量插入,所以如果插入成功,num=1)
            int num = session.insert("goods.insert",goods);
            session.commit();// commit()方法:提交事务数据。
            System.out.println(goods.getGoodsId());
        } catch (Exception e) {
            if (session != null){
                session.rollback();   // 如果程序出错,未能完整执行,则回滚事务。。。
                // PS:发现Mybatis封装后,事务控制在编码实现上简单了些
            }
            throw e;
        }finally {
            MyBatisUtils.closeSession(session);
        }
    }
}

说明:

(1) session的insert方法说明

(2) 发现,Mybatis封装了JDBC的事务,编写起来更加的方便;

(3) 子标签中的【select last_insert_id()】自动将新插入数据的id号回填到Goods类对象中,这十分有利于后续的操作。

(4) 不要忘了事务的提交和回滚控制;

运行结果: