MyBatis 入门
MyBatis开山篇
1、MyBatis是什么?
MyBatis官方定义是这样描述的,MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的 XML或注解来配置和映射原始类型、接口和 Java POJO。
上面文字描述太官方了,整体读下来可能仅仅了解到MyBatis是用于解决持久层方案的一款持久层框架,那么,在我们没有使用过MyBatis之前,我们使用各种各样的持久层技术来与数据库交互,这些技术和MyBatis有什么不同呢?
2、传统的持久层技术
JDBC技术
SpringJdbcTemplate
Spring中对jdbc进行简单的封装。
Apache的DButils
它和Spring的JdbcTemplate很像,也是对jdbc进行简单的封装
上面列举的都不是框架,JDBC是一种规范,而JdbcTemplate和Dbutils都只是工具类。
既然有那么多技术用于持久层,那么我们为什么还要学MyBatis呢,我们先使用JDBC技术实现对一个数据库表的操作,看看有什么特点
JDBC编码技术
执行流程
加载数据库驱动
获取数据库连接
定义sql语句
预处理
遍历查询结果集
关闭连接
大家应该很熟悉这段代码吧,使用原生的JDBC会出现什么样的问题呢
数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能。
Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。
使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能 多也可能少,修改 sql 还要修改代码,系统不易维护
对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护。
查询一条语句那么繁琐,我们当然希望可以将我们的主要精力放在sql上,那么MyBatis是否有能力帮我们解决呢?它的执行有什么特点呢?
3、MyBatis入门
事实上,MyBatis封装了jdbc操作的很多细节,它可以使开发者更多的关注sql语句本身,而无需关注注册驱动、创建链接等繁琐的过程,它使用ORM的思想实现对结果集的封装。
ORM全称是Object Relational Mapping,即对象关系映射,即把数据库表和实体类即实体类的属性对应起来,使得我们可以操作实体类就可以实现操作数据库表。
3.1MyBatis框架结构
SqlMapConfig.xml
MyBatis的全局配置文件,配置了MyBatis的运行环境等信息。
mapper.xml
mapper.xml文件,即sql映射文件,文件中配置了操作数据库的sql语句,需要在SqlMapperConfig.xml文件中加载
SqlSessionFactory
通过MyBatis环境等配置信息构造SqlSessionFactory会话工厂
SqlSession
由会话工厂创建sqlSession,操作数据库需要通过sqlSession进行
Executor
MyBatis底层自定义了Executor执行器接口操作的数据库,Executor接口有两个实现,一个是基本执行器,一个缓存执行器。
Mappered Statement
是一个底层封装对象,包装了MyBatis配置信息及sql映射信息等。
3.2MyBatis入门案例
读取配置文件
创建SqlSessionFactory工厂
创建SqlSession
创建Dao接口的代理对象
执行dao中的方法
释放资源
基于xml配置
SqlMapConfig配置文件
mapper.xml配置文件
User实体类
dao接口
测试
基于注解
修改SqlMapConfig.xml
移除IUserDao.xml配置文件,并在dao接口的方法上加入@(select * from user)
参考:
https://mybatis.org/mybatis-3/zh/getting-started.html
https://www.cnblogs.com/benjieqiang/p/11183580.html
版权声明: 本文为 InfoQ 作者【Simon郎】的原创文章。
原文链接:【http://xie.infoq.cn/article/42e64bb80a0d15145dbffcdab】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论