给“小白”漫画 + 图示讲解 MyBatis 原理,就问香不香!
MyBatis一款后起之秀的持久层框架ORM,支持自定义SQL、存储过程和高级映射,相对于Hibernate算是半自动化的框架,在国内行业内非常流行。
常规的JDBC操作,配置相应的数据库连接的信息,比如账户密码等,应用加载数据库驱动并手动创建数据库连接,编写业务sql并设置其入参生成Statement对象用于执行,获取结果数据集,及时释放持有资源,再对结果集进行数据处理。
加载驱动、创建连接、返回结果、释放资源等等都是重复的体力活,为了不把自己忙碌成代码的搬运工,这些都可以封装由框架去做,而自己关注最核心的业务层,也就是sql相关的逻辑。
把业务相关的sql逻辑配置在mapper.xml文件中,包括入参和返回的结果集,这其中会涉及到数据库中的字段和Java对象的字段之间的映射,一般如果字段名和类型相同可以通过MyBatis的自动映射即可,如果差别较大,则需要手动映射,甚至自定义类型处理typeHandlers。
每个MyBatis的应用都会以一个SqlSessionFacotry的实例为核心的,SqlSessionFacotryBuilder通过build加载核心配置文件mybatis-config.xml,从而创建SqlSessionFacotry,再由SqlSessionFacotry创建SqlSession。
核心配置文件mybatis-config.xml包含mapper.xml文件,在SqlSessionFacotryBuilder加载核心配置文件时一同加载进来,形成Configuration实例,其中mapper.xml的每个select/update/insert/delete节点都会最终生成MappedStatement对象,简单理解就是对应的完整sql语句,类似JDBC的Statement角色。
实际上核心配置文件除了包含mapper.xml,还包含数据库连接、事务、类型别名、类型处理器、插件、环境配置等等。
1. 准备工作:创建数据库和项目
创建数据库脚本
创建maven项目,并在pom中添加mybatis和mysql驱动依赖包
2.添加核心配置文件mybatis-config.xml
3. UserMapper.xml的配置
包含了插入数据的insert和查询数据的select,其中插入式通过设置useGeneratedKeys为true,返回自增id。
4. UserMapper.xml相对应Dao
UserMapper.java的代码如下,包含了相应插入和查询接口
5. 创建SqlSession并验证
一切都准备好之后,开始创建SqlSession并执行
此时的项目结构是这样的
运行main之后打印
获取自增id:1
刚刚入库的user对象User(id=1, name=chris)
查看数据库
优化
由于本例中的数据库表字段和Java对象的字段名一致,所以在UserMapper.xml中的resultMap可以省略,直接用resultType,mybatis会悄悄自动映射生成resultMap,省略后如
还可以再简化,比如使用别名替换权限定名(com.zhaiqianfeng.user.User)等。
PS:本篇文章主要是通过漫画和图并结合对比常规JDBC来讲解MyBatis的原理和设计目标,比较适合新手阅读,感谢阅读。
源码地址:https://github.com/zhaiqianfeng/codeceo-demo/tree/master/mybatis/mybatis-demo-1
(完)
最新、更多漫画请关注微信公众号:码农神说。转载开白可联系助手,微信号:codeceo-01
相关阅读
版权声明: 本文为 InfoQ 作者【码农神说】的原创文章。
原文链接:【http://xie.infoq.cn/article/b8c67ad20a1aa039c8312e0e8】。文章转载请联系作者。
评论