浅谈MyBatis连接数据库

   首先简单介绍一下MyBatis:MyBtis前身是iBatis,本是Apche的一个开源项目,2010年这个项目由Apache Software Foundation 迁移到了Google Code,并改名为MyBatis.2013年迁移到Github。MyBtis是一个开源的数据持久层框架。MyBatis内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置,这样实现了SQL与程序代码的分离,可以在不修改程序代码的情况下直接在配置文件中修改SQL。

  既然我们要用MyBaits链接数据库,所以需要一个数据库的驱动包,以及一个MyBatis源码包,(通过idea创建Maven项目)在pom.xml文件中引入需要的依赖。其中引入junit是便于后面的测试,而log4j则能看到一些日志信息,有时能为找bug提供帮助。

浅谈MyBatis连接数据库_第1张图片

    接下来创建MyBatis核心配置文件。MyBatis核心配置文件主要用于配置数据库连接和Mybatis运行时所需要的各种特性,包含了行为的设置(setting)和属性(properties)信息。命为为"mybatis-config.xml"以区分各个配置文件。

浅谈MyBatis连接数据库_第2张图片浅谈MyBatis连接数据库_第3张图片

    PS:datasource type设置为POOLED,MyBatis会创建一个数据库连接池,连接池中的一个连接将会被用作数据库操作,一旦数据库操作完成,MyBatis会将此连接返回给连接池,在开发或测试环境中,经常使用此方式。

    1.数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。

数据库连接池的主要操作如下:
(1)建立数据库连接池对象(服务器启动)。
(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。

2,使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等,MyBatis事务的创建是交给TransactionFactory 事务工厂来创建的,如果我们将的type 配置为"JDBC",那么,在MyBatis初始化解析节点时,会根据type="JDBC"创建一个JdbcTransactionFactory工厂。

  1. private TransactionFactory transactionManagerElement(XNode context) throws Exception {  
  2.   if (context != null) {  
  3.     String type = context.getStringAttribute("type");  
  4.     Properties props = context.getChildrenAsProperties();  
  5.     /* 
  6.           在Configuration初始化的时候,会通过以下语句,给JDBC和MANAGED对应的工厂类 
  7.           typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class); 
  8.           typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class); 
  9.           下述的resolveClass(type).newInstance()会创建对应的工厂实例 
  10.      */  
  11.     TransactionFactory factory = (TransactionFactory) resolveClass(type).newInstance();  
  12.     factory.setProperties(props);  
  13.     return factory;  
  14.   }  
  15.   throw new BuilderException("Environment declaration requires a TransactionFactory.");  
  16. }   
  17. 如上述代码所示,如果type = "JDBC",则MyBatis会创建一个JdbcTransactionFactory.class 实例;

最后创建测试类:

浅谈MyBatis连接数据库_第4张图片

    SqlSessionFactory可以理解为创建SqlSession实例的工厂,所有MyBatis应用都是以SqlSessionFactory实例为中心,而SqlSessionFactory可通过SqlSessionFactoryBuilder对象来获取。然后运用SqlSessionFactory提供的openSession()方法来获取SqlSession实例。因为SqlSessionFactory一旦创建会一直存在,所以没必要重复创建或者销毁它,因此我们最好使用单例模式来优化我们的测试类,把它放在静态块中来实现。

浅谈MyBatis连接数据库_第5张图片

浅谈MyBatis连接数据库_第6张图片

运行时控制台打印连接成功,代表MyBatis连接数据库成功,然后就可以进行其他的相关操作了,后续再做研究


你可能感兴趣的:(浅谈MyBatis连接数据库)