insert into tb_students(stu_num, stu_name, stu_mybatis 设">
当前位置:   article > 正文

MyBatis2_mybatis 设置手动提交

mybatis 设置手动提交

目录

主键回填

在utils文件夹下创建mybatisUtils工具类

三.事务管理

1.第一种手动提交事务,适用于操作复杂关联操作比较多

2.第二种自动提交事务,适用于简单操作(仅一个增加删除等)


主键回填

mapper中在添加数据时返回id值,useGeneratedKeys="true"表示需要回填生成的主键(即返回数据),keyProperty="stuID"表示回填的字段赋值给的属性

<insert id="insertStudent" parameterType="entity.Student" useGeneratedKeys="true" keyProperty="stuID">
    insert into tb_students(stu_num, stu_name, stu_gender, stu_age)
    values (#{stuNum}, #{stuName}, #{stuGender}, #{stuAge})
</insert>

测试: 虽然添加时id=0,但是添加后自动将生成的主键赋值给stuID属性,而不是0

  1. public void insertStudent() {
  2. try {
  3. //加载mybatis配置文件
  4. InputStream is = Resources.getResourceAsStream("mybatis_config.xml");
  5. SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  6. //会话工厂
  7. SqlSessionFactory factory = builder.build(is);
  8. //与数据库的连接即mybatis的操作对象,会话
  9. SqlSession sqlSession = factory.openSession();
  10. StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);
  11. Student student=new Student(0,"Y8025","悟空","女",20);
  12. int i=studentDAO.insertStudent(student);
  13. // 手动提交事务
  14. sqlSession.commit();
  15. if (i==1){
  16. System.out.println("添加成功");
  17. System.out.println(student);
  18. }else {
  19. System.out.println("添加失败");
  20. }
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }

在utils文件夹下创建mybatisUtils工具类

  1. public class mybatisUtils {
  2. private static SqlSessionFactory factory;
  3. private static final ThreadLocal<SqlSession> local=new ThreadLocal<>();
  4. static {
  5. try {
  6. //加载mybatis配置文件
  7. InputStream is = Resources.getResourceAsStream("mybatis_config.xml");
  8. SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  9. //会话工厂
  10. factory = builder.build(is);
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. public static SqlSessionFactory getFactory(){
  16. return factory;
  17. }
  18. public static SqlSession getSqlSession(boolean isAutoCommit){
  19. SqlSession sqlSession=local.get();
  20. if (sqlSession==null){
  21. sqlSession= factory.openSession(isAutoCommit);
  22. local.set(sqlSession);
  23. }
  24. return sqlSession;
  25. }
  26. public static <T>T getMapper(Class<T> c){
  27. SqlSession sqlSession=getSqlSession(true);
  28. return sqlSession.getMapper(c);
  29. }
  30. }

三.事务管理

SqlSession对象

  • 通过getMapper(DAO.class)方法获取mapper(DAO接口的实例)
  • 事务管理

1.第一种手动提交事务,适用于操作复杂关联操作比较多

SqlSession sqlSession = factory.openSession();创建SqlSession对象如果不声明默认为false非自动提交

  1. 每获取SqlSession对象时,就默认开启了事务,然后进行操作
  2. 操作完成后需要手动提交sqlSession.commit();
  3. 在catch中添加sqlSession.rollback();,出现异常回滚
  1. public void insertStudent() {
  2. //与数据库的连接即mybatis的操作对象,会话
  3. SqlSession sqlSession = mybatisUtils.getSqlSession();
  4. try {
  5. StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);
  6. Student student=new Student(0,"Y8025","悟空","女",20);
  7. int i=studentDAO.insertStudent(student);
  8. //手动提交事务
  9. sqlSession.commit();
  10. if (i==1){
  11. System.out.println("添加成功");
  12. System.out.println(student);
  13. }else {
  14. System.out.println("添加失败");
  15. }
  16. } catch (Exception e) {
  17. sqlSession.rollback();
  18. e.printStackTrace();
  19. }
  20. }

2.第二种自动提交事务,适用于简单操作(仅一个增加删除等)

SqlSession sqlSession = factory.openSession(true);创建SqlSession对象声明为true自动提交

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/216121
推荐阅读
相关标签
  

闽ICP备14008679号