MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下:
1、如何使用Mybatis整合GBase8s数据库
2、Mapper接口和映射文件是如何进行绑定的
3、MyBatis中SQL语句的执行流程
4、自定义MyBatis中的参数设置处理器typeHandler
5、自定义MyBatis中结果集处理器typeHandler
PS:本文基于MyBatis3.5.5版本源码
1.Mybatis整合GBase8s数据库
Mybatis是一款在持久层使用的SQL映射框架,可以将SQL语句单独写在XML配置文件中,或者使用带有注解的Mapper映射类来完成数据库记录到Java实体的映射。它支持定制化SQL、存储过程及高级映射。MyBatis框架是对JDBC轻量级的封装,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
下面通过实例介绍如何通过mybatis中间件实现连接GBase8s数据库,实现数据查询与添加过程。
1.1GBase8s数据库驱动引用
首先,在POM文件中引用GBase8s驱动程序
cn.gbase.jdbc
gbase8s
system
E:\gbasedbtjdbc.jar
1.2配置mybatis-config.xml文件
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml" />
</mappers>
【配置dataSource数据源】
url属性,配置为GBase8s连接地址。
格式如:
jdbc:gbasedbt-sqli://ip:port/test:GBASEDBTSERVER=实例名;
其中jdbc:gbasedbt-sqli:为协议名称,
IP:数据库服务器ip地址
port:数据库服务器 端口地址
GBASEDBTSERVER字段表示内容为GBase8s实例名称。
username属性,为GBase8s数据库用户名
password属性,为GBase8s数据库密码
【配置Mapping文件】
mapper/UserMapper.xml文件如下:
1.3配置实体类
1.4执行用例
1)查询GBase8s数据表–获取指定用户信息
2)插入GBase8s数据表–新建用户
2.获取Mapper接口(getMapper)
通过SqlSession对象是获取一个Mapper接口,这个流程还是相对简单的,下面就是我们调用session.getMapper方法之后的运行时序图:
1、在调用getMapper之后,会去Configuration对象中获取Mapper对象,因为在项目启动的时候就会把Mapper接口加载并解析存储到Configuration对象
2、通过Configuration对象中的MapperRegistry对象属性,继续调用getMapper方法
3、根据type类型,从MapperRegistry对象中的knownMappers获取到当前类型对应的代理工厂类,然后通过代理工厂类生成对应Mapper的代理类
4、最终获取到我们接口对应的代理类MapperProxy对象
而MapperProxy可以看到实现了InvocationHandler,使用的就是JDK动态代理。