• MyBatis的事务处理


        先来假设这样一个问题:如果数据库里面有一个用户表和一个作家表,那么当要添加一条数据到作家表中时,作家表的id必须是用户表中的其中一个id,因为作家一定也要是一个用户。这时就涉及到事务处理。

        在上一篇博客的基础上,同时添加一个人的信息到用户表和作家表,如果失败则需要事务回滚

        在pojo包中新建实体类 AuthorInfo.java

     1 package com.jike.book.pojo;
     2 
     3 public class AuthorInfo {
     4 
     5     private int id;
     6     private UserInfo userInfo;
     7     private String realname;
     8     private int age;
     9     public int getId() {
    10         return id;
    11     }
    12     public void setId(int id) {
    13         this.id = id;
    14     }
    15     public UserInfo getUserInfo() {
    16         return userInfo;
    17     }
    18     public void setUserInfo(UserInfo userInfo) {
    19         this.userInfo = userInfo;
    20     }
    21     public String getRealname() {
    22         return realname;
    23     }
    24     public void setRealname(String realname) {
    25         this.realname = realname;
    26     }
    27     public int getAge() {
    28         return age;
    29     }
    30     public void setAge(int age) {
    31         this.age = age;
    32     }
    33     
    34     
    35 }

    在map包中创建author.xml的映射xml文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 
     3 
     4 <!DOCTYPE mapper
     5     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     6     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     7 
     8 <mapper namespace="/">
     9   
    10     <insert id="insert_toauthor" parameterType="AuthorInfo">
    11        insert into author (id,realname,age) values(#{userInfo.id},#{realname},#{age})
    12     </insert>
    13   
    14 </mapper>

    在MyBatisConfig.xml文件中添加:

     <typeAlias alias="AuthorInfo" type="com.jike.book.pojo.AuthorInfo"/>

    以及

    <mapper resource="com/jike/book/map/author.xml"/>

    创建测试类:

     1 package com.jike.book.test;
     2 
     3 import java.io.Reader;
     4 import java.util.List;
     5 
     6 import org.apache.ibatis.io.Resources;
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 
    11 import com.jike.book.pojo.AuthorInfo;
    12 import com.jike.book.pojo.UserInfo;
    13 
    14 public class Test8 {
    15 
    16     public static void main(String[] args) {
    17         String resource = "com/jike/book/map/MyBatisConfig.xml";
    18         Reader reader = null;
    19         SqlSession session = null;
    20         try{
    21             reader = Resources.getResourceAsReader(resource);
    22         }catch(Exception e){
    23             e.printStackTrace();
    24         }
    25         SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
    26         session = sqlMapper.openSession();
    27         
    28         try{
    29             UserInfo u = new UserInfo();
    30             u.setUserName("uvi");
    31             u.setPassword("uvi");
    32             session.insert("insert", u);
    33             
    34             AuthorInfo au = new AuthorInfo();
    35             au.setAge(23);
    36             au.setUserInfo(u);
    37             au.setRealname("pol");
    38             session.insert("insert_toauthor", au);
    39             session.commit();
    40         }catch(Exception e){
    41             e.printStackTrace();
    42             session.rollback();//如果失败,则事务回滚
    43         }finally{
    44             session.close();
    45         }
    46     }
    47 
    48 }


    执行成功。

  • 相关阅读:
    省市区distpicker,从数据库里查出来回显,动态绑定
    ajax请求里面的success和error里面的layer.msg,status: "parsererror",刷新父界面,碰到的一些问题
    排序算法时间和空间算法度
    适配器模式
    守护线程
    工厂模式之简单工厂模式、工厂模式、抽象工厂
    ArrayList源码分析和缩减版手写ArrayList(jdk1.8和1.9)
    HashMap排序题
    二进制中1的个数
    anaconda指定镜像源,解决conda下载速度慢失败问题
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5754431.html
Copyright © 2020-2023  润新知