mybatis学习笔记

匿名 (未验证) 提交于 2019-12-03 00:32:02
1、<environment id="development">, 只有enviroment节点有id属性,那么这个属性有何作用?

     environments 节点下可以拥有多个 environment子节点,类似于这样: 

<environments default="development">

     <environment id="development">...</environment>

     <environment id="test">...</environment>

</environments>

 意思就是我们可以对应多个环境,比如开发环境,测试环境等, 由environments的default属性去选择对应的enviroment

注:

1:开发环境:项目尚且在编码阶段,我们的代码一般在开发环境中 不会在生产环境中,生产环境组成:操作系统 ,web服务器 ,语言环境。  php 。 数据库 。 等等
2:测试环境:项目完成测试,修改bug阶段
3:生产环境:项目数据前端后台已经跑通,部署在阿里云上之后,有客户使用,访问,就是网站正式运行了


2、<transactionManager type="JDBC"></transactionManager>

transactionManager:事务管理器

type用于设置mybatis采用什么方式管理事务,JDBC表示采用和JDBC一样的事务管理方式。

注:

数据库事务:主要用于处理操作量大,复杂度高的数据。比如说:在人员管理系统中,删除一个人员,既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等。这样,这些数据库操作语句就构成了一个事务。

事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 
例如:A向B转账100元,对应于如下两条sql语句:

update from account set money=money+100 where name='b'; update from account set money=money-100 where name='a';

Mybatis管理事务是分为两种方式:

(1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交
(2)使用MANAGED的事务管理机制,这种机制mybatis自身不会去实现事务管理,而是让程序的容器(JBOSS,WebLogic)来实现对事务的管理

Java JDBC事务机制

  首先,我们来看看现有JDBC操作会给我们打来什么重大问题,比如有一个业务:当我们修改一个信息后再去查询这个信息,看是这是一个简单的业务,实现起来也非常容易,但当这个业务放在多线程高并发的平台下,问题自然就出现了,比如当我们执行了一个修改后,在执行查询之前有一个线程也执行了修改语句,这是我们再执行查询,看到的信息就有可能与我们修改的不同,为了解决这一问题,我们必须引入JDBC事务机制,其实代码实现上很简单,一下给出一个原理实现例子供大家参考:

private Connection conn = null;    private PreparedStatement ps = null;    try {        conn.setAutoCommit(false);  //将自动提交设置为false                    ps.executeUpdate("修改SQL"); //执行修改操作        ps.executeQuery("查询SQL");  //执行查询操作                       conn.commit();      //当两个操作成功后手动提交                  } catch (Exception e) {        conn.rollback();    //一旦其中一个操作出错都将回滚,使两个操作都不成功        e.printStackTrace();    }  

3、<dataSource type="POOLED"></dataSource>

dataSource 元素使用基本的 JDBC 数据源接口来配置 JDBC 连接对象的资源。 

数据源/连接池:用于配置连接池和数据库连接的参数

type:用于设置mybatis是否采用连接池技术,POOLED表示mybatis采用连接池技术


<dataSource type="POOLED">的type属性、其有三种取值:

  • POOLED:使用Mybatis自带的数据库连接池来管理数据库连接
  • UNPOOLED:不使用任何数据库连接池来管理数据库连接
  • JNDI:jndi形式使用数据库连接、主要用于项目正常使用的时候

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

转载请标明出处:mybatis学习笔记
文章来源: mybatis学习笔记
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!