mybatis获取mysql源数据类型_mybatis源码解读(三)——数据源的配置

在mybatis-configuration.xml 文件中,我们进行了如下的配置:

其中  是对事务的配置,下篇博客我们会详细介绍。

本篇博客我们介绍   对于数据源的配置。

1、解析 environments 标签

在 XMLConfigBuilder.java 的  parseConfiguration(XNode root) 中:

dc6b647b61ff0d9a2e1fbf8f104f311b.png

进入 environmentsElement(root.evalNode("environments")) 方法:

1 private void environmentsElement(XNode context) throwsException {2 //如果标签不为null

3 if (context != null) {4 //如果 environment 值为 null

5 if (environment == null) {6 //获取中的default属性值

7 environment = context.getStringAttribute("default");8 }9 //遍历标签中的子标签

10 for(XNode child : context.getChildren()) {11 //获取中的id属性值

12 String id = child.getStringAttribute("id");13 //遍历所有的时候一次判断相应的id是否是default设置的值

14 if(isSpecifiedEnvironment(id)) {15 //获取配置的事务管理器

16 TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager"));17 //获取配置的数据源信息

18 DataSourceFactory dsFactory = dataSourceElement(child.evalNode("dataSource"));19 DataSource dataSource =dsFactory.getDataSource();20 Environment.Builder environmentBuilder = newEnvironment.Builder(id)21 .transactionFactory(txFactory)22 .dataSource(dataSource);23 configuration.setEnvironment(environmentBuilder.build());24 }25 }26 }27 }28

29 private booleanisSpecifiedEnvironment(String id) {30 if (environment == null) {31 throw new BuilderException("No environment specified.");32 } else if (id == null) {33 throw new BuilderException("Environment requires an id attribute.");34 } else if(environment.equals(id)) {35 return true;36 }37 return false;38 }

①、第 3 行代码:if (context != null)  也就是说我们可以不在 mybatis-configuration.xml 文件中配置标签,这是为了和spring整合时,在spring容器中进行配置。

②、第 5 行——第 8 行代码:获取中的default属性值,注意第 5 行 首先判断 environment == null 。因为我们可以配置多个环境,也就是连接多个数据库。

不过需要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一,也就是说每个数据库对应一个 SqlSessionFactory 实例。

可以用如下方法进行区别:

1 SqlSessionFactory factory = newSqlSessionFactoryBuilder().build(reader, environment);2 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);

③、第 10 行代码:遍历标签中的子标签,可以配置多个标签。

④、第 14 行代码:遍历所有的时候判断相应的id是否是default设置的值,选择相等的 标签进行数据源的配置。

⑤、第 16 行代码:进行事务的配置(下篇博客进行详解)。

⑥、第 18 行代码:进行数据源的配置,下面我们详细讲解。

2、mybatis 的数据源类图

mybatis 对于数据源的所有类都在如下包中:

f7f801236d0e32620dcd8a5152387109.png

e2883b59440dccfba1050cc8f0439ad9.png

注意:DataSource 接口不是mybatis包下的,是JDK的 javax.sql 包下的。

3、mybatis 三种数据源类型

前面我们在 mybatis-configuration.xml 文件中配置了数据源的类型:

205768b460061259608827007955023e.png

mybatis 支持三种数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):

①、UNPOOLED:(不使用连接池)这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。 不同的数据库在性能方面的表现也是不一样的,对于某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。

②、POOLED:(使用连接池)这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。

③、JNDI : 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

ps:关于连接池的概念请看下面详细介绍。

这三种数据源的类型在 mybatis 在上面所讲的类图中正好对应。那么 mybatis 是如何产生数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值