博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis的基本操作案列增加以及源码的分析(二)
阅读量:5241 次
发布时间:2019-06-14

本文共 3239 字,大约阅读时间需要 10 分钟。

一、构建一个框架的项目的思路

    首先我们先建立一个web项目,我们需要jar,mybatis-config.xml和studentDao.xml的配置随后就是dao、daoimpl、entity、的架构。

二、具体步骤(添加一个学生)

1、创建一个web项目

    

 

2、导入jar

    

3、创建实体entity

/** * 学生实体类 * @author Happy * */public class Student {  private Integer stuno;  private String stuname;  private Integer stuage;  private Date studate;    public String toString() {    return "Student [stuno=" + stuno + ", stuname=" + stuname + ", stuage="            + stuage + ", studate=" + studate + "]";}//省略get/set}

4、在到层创建dao接口并且小配置StudentDao.xml我也就放在这里了

public interface IStudentDAO {

  //添加

  public int addStu(Student stu) throws IOException;

}

 StudentDao.xml

insert into student(stuname,stuage,studate) values(#{stuname},#{stuage},#{studate})

5、书写daoimpl实现类的

public class StudentDAOImpl implements IStudentDAO {    SqlSession session ;//提取session在下面作为成员变量好调用    public StudentDAOImpl() throws IOException {        session= MybatisUtil.getSession();    }        //添加学生    public int addStu(Student stu) throws IOException {              int result = session.insert("insertStudent",stu);       session.commit();             session.close();        return result;    }}

6、提出一个tool工具类

/** * 工具类 * @author Happy * */public class MybatisUtil {    private static String config="mybatis-config.xml";    static Reader reader;    static{        try {            reader= Resources.getResourceAsReader(config);        } catch (IOException e) {            e.printStackTrace();        }    }    private static SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);    //提供一个可以获取到session的方法    public static SqlSession getSession() throws IOException{                System.out.println("22222"+factory);        //弊病,就是工厂是           // 1.1 openSession到底做了什么           SqlSession session = factory.openSession();           System.out.println("3333");            return session;    }}

7、大配置

 

 

 

 

 

8、进行@test添加

@Test    public void testAdd() throws IOException{        Student stu=new Student();        stu.setStuname("Y2161好人");        stu.setStuage(21);        stu.setStudate(new Date());                System.out.println("添加前======="+stu);                IStudentDAO dao=new StudentDAOImpl();        dao.addStu(stu);                System.out.println("添加后======="+stu);

三、源码分析四个问题

1.openSession做了什么?

根据openSession()方法找到DefaultSqlSessionFactory

找到这个方法你会看到OpenSeesion传过来的是autoCommit的属性

根据openSessionFromDataSource方法找到

得出结论:autoCommit=false;    dirty=false

2.insert和delete底层到底发生了什么?

insert和delete的方法都是update

 

  

 

 现在跟一遍insert代码看看底层发生了什么?

 

得出结论:update中第一行将dirty=true;

3.为什么session.commit()能引起事务提交

前提dirty = true

找到commit方法的实现类

在找到isCommitOrRollbackRequired实现类

autoCommit=false;取反为trun&&在insert为trun所以直接为trun

在找到commit方法就可以事物提交了

 

 

4.为什么session.close()不用回滚事务了

找到close的实现类

 

 

 

    

 

转载于:https://www.cnblogs.com/yejiaojiao/p/6188128.html

你可能感兴趣的文章
利用AOP写2PC框架(二)
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
Android实现静默安装与卸载
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
解决php -v查看到版本与phpinfo()版本不一致问题
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>