mybatis事务的认识
功能:从应用程序角度出发,软件具有哪些功能
业务:完成功能时的逻辑
事务:从和数据库角度出发,完成业务时需要执行的sql集合,统称一个事务
在mybatis中默认是关闭了jdbc自动提交事务的功能
事务回滚:如果在一个事务中某个sql执行事务,希望回归到事务的原点,保证数据库数据的完整性
每一个SqlSession默认都是不自动提交事务的
sessin.commit()提交事务
openSession(true)自动提交
mybatis底层时对jdbc的封装
jdbc中executeUpdate()执行新增,删除,修改的sql返回值int,表示受影响的行数
mybatis中标签没有resultType属性,认为返回值都是int
在openSession()时mybatis会创建SqlSession时同时创建一个Transaction(事务对象),同时autoCommit都为false
如果出现异常,应该session.rollback()回滚事务
package com.ning.test;
import com.ning.pojo.People;
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 java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
// session.selectList("a.b.c");
// session.selectList("a.b.d");
// session.selectList("a.j.b");
// session.selectList("a.j.c");
// People people1 = new People();
// people1.setId(1);
// People people = session.selectOne("a.b.selById",people1);
// People people = session.selectOne("a.b.selById",0);
// System.out.println(people);
//如果希望传递多个参数,可以使用对象或者Map
// Map<String,Object> map = new HashMap<>();
// map.put("id",1);
// map.put("name","张三");
// People p = session.selectOne("a.b.selById", map);
// int pageSize = 2;
// int pageNumber =3;
// Map<String,Object> map = new HashMap<>();
// //显示几个
// map.put("pageSize",pageSize);
// //第几页
// map.put("pageStart",pageSize*(pageNumber-1));
// List<People> p = session.selectList("a.b.page", map);
// System.out.println(p);
People people = new People();
people.setName("余小浩");
people.setAge(18);
int index = session.insert("a.b.insert", people);
if (index > 0) {
System.out.println("成功");
}else {
System.out.println("失败");
}
session.commit();
session.close();
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="a.b">
<!--<select id="c" resultType="com.ning.pojo.People">-->
<!--select * from people-->
<!--</select>-->
<!--<select id="d" resultType="com.ning.pojo.People">-->
<!--select * from people where id=1 or id=2-->
<!--</select>-->
<!--<select id="selById" resultType="com.ning.pojo.People" parameterType="map">-->
<!--select * from people where id=#{id} and name=#{name}-->
<!--</select>-->
<select id="page" resultType="People" parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
<select id="insert" parameterType="People">
insert into people values(default,#{name},#{age})
</select>
</mapper>