版本
jdk1.8.0_171
Mybatis-3.5.4
IDE:Eclipse
Mybatis能够流行的原因:
(1)消除了大量的JDBC冗余代码,包括参数设置,结果集封装等;
(2)SQL语句可控制,方便查询优化,使用更加灵活;
(3)学习成本低比较低,对于新用户能够快速学习使用;
(4)提供了与主流IOC框架Spring的集成支持;
(5)引入缓存机制,提供了与第三方缓存类库的集成支持;
JDBC(Java Database Connectivity)是Java语言中提供的访问关系型数据的接口,而Mybatis框架是对JDBC做了轻量级的封装,学习Mybatis源码前要对JDBC做一个了解。
JDBC有一个规范JSR-000221,官方JSR规范下载地址:https://jcp.org/aboutJava/communityprocess/mrel/jsr221/index3.html,JDK中有两个关于JDBC的包:java.sql包和javax.sql包。
一、java.sql包
#数据类型
java.sql.Array
java.sql.Blob
java.sql.Clob
java.sql.Date
java.sql.NClob
java.sql.Struct
java.sql.Time
java.sql.Timestamp
java.sql.SQLXML
java.sql.Ref
java.sql.RowId
java.sql.SQLInput
java.sql.SQLOutput
java.sql.SQLData
java类型和JDBC类型的对应关系:
#枚举 java.sql.Types java.sql.SQLType java.sql.JDBCType java.sql.RowIdLifetime java.sql.PseudoColumnUsage java.sql.ClientInfoStatus #API相关 java.sql.Wrapper //为应用程序访问原始数据类型的功能,从而使用JDBC中的一些非标准特性 java.sql.Connection //数据库连接 java.sql.Statement //定义执行SQL语句的方法 java.sql.CallableStatement //用于执行存储过程 java.sql.PreparedStatement //可以设置SQL参数 java.sql.DatabaseMetaData //获取数据源信息;确定数据源是否支持某一特性;获取数据源限制;确定数据源包含哪些SQL对象以及这些对象的属性;获取数据源对事务的支持; java.sql.ParameterMetaData //参数元数据信息 java.sql.ResultSet //提供检索和操作SQL执行结果相关的方法:3种类型、2种并行性、2种可保持性 java.sql.ResultSetMetaData //结果集元数据 #驱动相关 java.sql.Driver java.sql.DriverAction java.sql.DriverManager java.sql.DriverPropertyInfo java.sql.SQLPermission java.sql.Savepoint #异常 java.sql.BatchUpdateException java.sql.DataTruncation //Data Truncat异常 java.sql.SQLClientInfoException java.sql.SQLDataException java.sql.SQLException java.sql.SQLFeatureNotSupportedException java.sql.SQLIntegrityConstraintViolationException java.sql.SQLInvalidAuthorizationSpecException java.sql.SQLNonTransientConnectionException java.sql.SQLNonTransientException java.sql.SQLRecoverableException java.sql.SQLSyntaxErrorException java.sql.SQLTimeoutException java.sql.SQLTransactionRollbackException java.sql.SQLTransientConnectionException java.sql.SQLTransientException java.sql.SQLWarning
二、javax.sql包
#数据源 javax.sql.DataSource //数据源 用于获取Connection实例 javax.sql.CommonDataSource #连接池相关 javax.sql.ConnectionPoolDataSource javax.sql.PooledConnection javax.sql.ConnectionEvent javax.sql.ConnectionEventListener javax.sql.StatementEvent javax.sql.StatementEventListener #ResultSet扩展 javax.sql.rowset.* //里面含有JAVA SPI机制 javax.sql.RowSet //为数据源和应用程序内容之间建立一个映射 javax.sql.RowSetEvent javax.sql.RowSetInternal javax.sql.RowSetListener javax.sql.RowSetMetaData javax.sql.RowSetReader javax.sql.RowSetWriter #分布式扩展 javax.sql.XAConnection javax.sql.XADataSource
参考:
书籍:<<Mybatis3源码深度解析>>
资料:mybatis3源码深度解析与最佳实践