mybatis的使用体验总结————4
来源:互联网 发布:数据库导论 编辑:程序博客网 时间:2024/05/21 03:25
一:Mybatis解决jdbc编程的问题
1、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
2、 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决: Mybatis自动将java对象映射至sql语句。
3、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象。
二:与hibernate主要不同
Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。
Mybatis简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,但是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。
Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。
三:mybatis的重要接口或者类
1. SqlSession
SqlSession中封装了对数据库的sql操作,如:查询、插入、更新、删除等。
通过SqlSessionFactory创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。
SqlSessionFactoryBuilder
SqlSessionFacoty是通过SqlSessionFactoryBuilder进行创建,SqlSessionFactoryBuilder只用于创建SqlSessionFactory,可以当成一个工具类,在使用时随时拿来使用不需要特殊处理为共享对象。
2:SqlSessionFactory
SqlSessionFactory是一个接口,接口中定义了openSession的不同方式,SqlSessionFactory一但创建后可以重复使用,实际应用时通常设计为单例模式。
SqlSession
SqlSession是一个接口,默认使用DefaultSqlSession实现类,sqlSession中定义了数据库操作。
执行过程如下:
1、 加载数据源等配置信息
Environment environment = configuration.getEnvironment();
2、 创建数据库链接
3、 创建事务对象
4、 创建Executor,SqlSession所有操作都是通过Executor完成,mybatis源码如下:
if (ExecutorType.BATCH == executorType) { executor = new BatchExecutor(this, transaction); } else if (ExecutorType.REUSE == executorType) { executor = new ReuseExecutor(this, transaction); } else { executor = new SimpleExecutor(this, transaction); } if (cacheEnabled) { executor = new CachingExecutor(executor, autoCommit); }
- mybatis的使用体验总结————4
- mybatis之初体验——helloworld
- MyBatis学习总结(二)——使用MyBatis…
- MyBatis学习总结一 —— MyBatis的使用步骤及配置
- MyBatis学习总结(16)——Mybatis使用的几个建议
- MyBatis学习总结(三)——mybatis 代码生成工具的使用
- MyBatis学习总结——Mybatis缓存
- MyBatis学习总结(14)——Mybatis使用技巧总结
- mybatis—简单的sql总结
- mybatis学习总结(—)
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- MyBatis学习总结(9)——使用MyBatis Generator自动创建代码
- HDU 5551 Huatuo's Medicine(宇宙无敌炒鸡大水题)
- Python 中的range()函数与array()函数
- XMLHttpRequest对象
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 C coconut
- Jzoj1307 Jail
- mybatis的使用体验总结————4
- 购物车
- poj 2823 Sliding Window 线段树
- 场景分类MATLAB代码实现
- 触摸屏驱动程序设计 之 输入子系统原理分析
- sift匹配描述子距离判断选择更好的匹配点
- Python小程序分享03——温度转换(魔法方法)
- 表达式求值(河南省第九届省赛)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A banana