MyBatis组件的生命周期——MyBatis学习笔记

生命周期

Mybatis的主要组件的生命周期:

SqlSessionFactoryBuilder

SqlSeesionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFactory。它的作用就是一个构建器,一旦我们构建了SqlSessionFactory,它的作用就已经完结,失去了存在的意义,这时我们就毫不犹豫的废弃它,将它回收。所以它的生命周期只存在于方法的局部,它的作用就是生成SqlSessionFactory对象。

SqlSessionFactory

SqlSessionFactory的作用就是创建SqlSession,而SqlSession就是一个会话,相当于JDBC中的Connection对象。每次应用程序需要访问数据库,我们就要同股哟SQLSessionFactory创建SqlSession,所以SQLSessionFactory应该在Mybatis应用的整体生命周期中。而如果我们多次创建同一个数据库的SQLSessionFactory,则每次创建SQLSessionFactory会打开更多的数据库链接(Connection)资源,那么连接资源很快就会耗尽。因此SQLSessionFactory的责任是唯一的,它的责任就是创建SqlSession,所以我们果断采用单例模式。如果我们采用多例,那么它对数据库连接的消耗会很大的,不利于我们统一的管理。所以正确的做法应该是使得每一个数据库对应一个SQLSessionFactory,管理好数据库资源的分配,避免过多的Connection被消耗。

SqlSession

SQLSession是一个会话,相当于JDBC的一个Connection对象,它的生命周期应该是在请求数据库处理事务的过程中。它是一个线程不安全的对象,在设计多线程的时候我们需要特别小心,操作数据库需要注意隔离级别,数据库锁等高级特征。此外,每次创建SQLSession都必须及时关闭,它长期存在就会使数据库连接池的活动资源减少,对系统性能的影响很大。我们往往通过finally语句块保证我们正确的关闭SQLSession。它存活于一个应用请求和操作,可以执行多条SQL,保证事务的一致性。

Mapper

Mapper是一个接口,没有任何实现类,它的作用是发送SQL,然后返回我们需要的结果,或者执行SQL从而修改数据库的数据,因此它应该在一个SQLSession事务方法之内,是一个方法级别的东西。它就如同一条SQL语句的执行,它最大的范围和SQLSession是相同的。尽管我们想一直保存着Mapper,但是不会发现它很难控制,所以尽量在一个SQLSession事务的方法中使用它,然后废弃掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用到的技术:redis、amcharts、maven、html5、ajax、js、jquery以及css,关系型数据库采用的是mysql。 文件夹中有可以直接导入使用的数据库,以及可以导入试卷的excel表格格式. 该项目分为学生模块,和教师模块。 教师模块:教师可以通过导入Excel表格的方式进行添加试卷,如果Excel表中有不合法的数据,会在前台提醒哪一行哪一列出了什么问题,添加试卷后,教师可以发布试卷,试卷发布后,学生就可以答题,每张试卷都有作答时长,作答时间结束,将会自动提交试卷。考试结束后,教师可以发布答案。对于修改试卷,教师可以先选择所要修改的试卷,对于试卷可以修改试卷的名称以及考试时长,要想修改试题可以点击编辑试题,进行批量修改。 学生模块:注册登录进入学生考试平台,选择考卷,进行作答,试卷分为单选题、多选题以及判断题,分值各不相同,对于多选题错答不得分,漏答得一半的分。在作答期间,学生可以先保存,保存的内容存储在Redis中。若点击提交,提交后直接显示成绩。提交后就不能再进入考试。要想看正确答案,得等到考试结束,教师发布成绩后,才可以看到。 学生可以看到自己的作答历史,每道题之前学生的答案以及该题正确的答案都很清晰的标注出来。为了方便学生统计自己的成绩,本系统采用了amcharts技术根据学生的历次成绩制作了柱状图和折线图结合的图表。学生可以很直观地看到自己成绩的波动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值