本篇博客内容是:向表中插入数据。
注: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) 不要忘了事务的提交和回滚控制;
运行结果: