- JDBC方式
确保12行是
另一个值是MANAGED,是交由容器管理,如weblogic等,不在本知识点讨论。<transactionManager type="JDBC"/>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <package name="com.how2java.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/how2java/pojo/Category.xml"/> <mapper class="com.how2java.mapper.CategoryMapper"/> </mappers> </configuration>
- 测试代码
38行的代码提交事务。
插入第二个数据会因为长度超过32,而导致无法插入到数据库。session.commit();
因为在同一个事务里,所以第一个数据,也无法插入成功。
package com.how2java; import java.io.IOException; import java.io.InputStream; import java.sql.SQLException; import java.util.List; 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.apache.ibatis.transaction.Transaction; import org.apache.ibatis.transaction.TransactionFactory; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import com.how2java.mapper.CategoryMapper; import com.how2java.pojo.Category; public class TestMybatis { public static void main(String[] args) throws IOException, SQLException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); CategoryMapper mapper = session.getMapper(CategoryMapper.class); Category c1 = new Category(); c1.setName("长度够短的名称"); mapper.add(c1); Category c2 = new Category(); c2.setName("超过最大长度30的名称超过最大长度30的名称超过最大长度30的名称超过最大长度30的名称超过最大长度30的名称超过最大长度30的名称"); mapper.add(c2); listAll(mapper); session.commit(); session.close(); } private static void listAll(CategoryMapper mapper) { List<Category> cs = mapper.list(); for (Category c : cs) { System.out.println(c.getName()); } } }
- MYSQL 表的类型必须是INNODB
在Mysql中,只有当表的类型是INNODB的时候,才支持事务,所以需要把表category_的类型设置为INNODB,否则无法观察到事务.
修改表的类型为INNODB的SQL:
alter table category_ ENGINE = innodb;
查看表的类型的SQL
不过有个前提,就是当前的MYSQL服务器本身要支持INNODB,如果不支持,请看 开启MYSQL INNODB的办法show table status from how2java;
Mybatis其他-事务管理
最新推荐文章于 2023-01-09 13:38:34 发布