Mybatis框架相关知识讲解
JAVAEE开发的三剑客:三大框架
Mybatis:封装jdbc访问代码的一个框架 (hibernate) ORM对象关系映射
Spring MVC:用来封装servlet编程的一个框架(struts2)
Spring:体系整合框架,其他框架的粘合剂;
什么是框架:
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法; 另一种定义认为,框架是可被应用开发者定制的应用骨架。是用框架可以提高程序复用性和系统的可扩充性,以缩短大型应用软件系统的开发周期,提高开发质量。
框架的优点(总结)
- 灵活可配置:将程序中写死的代码(硬编码)可以写到配置文件中
- 代码复用性高:将程序中反复要写的代码(套路代码)进行抽取封装,提高代码的复用性
- 简化开发:框架将底层复杂的细节进行了封装,并提供了方便调用的API,使得开发人员将工作的重点转移到实际业务中,大大提高了项目的开发效率
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
Mybatis架构
- mybatis配置
- SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
- mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
- 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂(单例)
- 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
- mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
- Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
- Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
- Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
SqlMapConfig.xml配置文件
SqlMapConfig.xml中配置的内容和顺序如下:
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
SqlMapConfig.xml可以引用java属性文件中的配置信息如下:
在classpath下定义db.properties文件,
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
SqlMapConfig.xml引用如下:
<properties resource="db.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments>
注意: MyBatis 将按照下面的顺序来加载属性:
- 在 properties 元素体内定义的属性首先被读取。
- 然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
Mybatis解决jdbc编程的问题
- 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
- Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
- 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
- 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
Mybatis框架相关知识讲解相关推荐
- 软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
文章目录 软件危机 软件的定义 软件危机典型表现 产生软件危机的原因 消除软件危机的方法 软件工程 什么是软件工程 软件工程的本质特征 软件工程的基本原理 软件工程方法学 传统方法学 面向对象方法学 ...
- MyBatis框架的详细讲解(优点与缺点)
文章目录 前言 一.Mybatis是什么? 核心思想 二.ORM Mybatis的基本要素 二.resultMap和resultType的区别: resultMap自动映射区别: 使用@param注解 ...
- 【HDR学习】HDR视频相关知识讲解(一)
[背景] 由来:HDR首先作为静态摄影的一种技术而闻名于世.在静态摄影中,这种进行多次曝光并堆栈成一张暗部和亮部都有细节的图像的方法就是HDR摄影. 随着科技的进步,人们观看影视的体验越来越好,这不仅 ...
- JDK8新特性相关知识讲解汇总
以下是博主本人对jdk8相关新知识的学习以及讲解的汇总,如果对你帮助可以多多点赞和关注我哦~ (1)JDK8新特性-Lambda表达式详细介绍以及应用 (2)JDK8 关于中断线程的总结 (3)JDK ...
- yii框架相关知识(转)
2019独角兽企业重金招聘Python工程师标准>>> db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示s ...
- 二、python框架相关知识体系
Django框架 1.django框架.flask框架和Tornado框架的区别? django框架,内置组件多,自身功能强大,是一个大而全的框架,ORM.Admin.中间件.Form.ModelFr ...
- 如何对.NET远程处理框架相关知识简介
第1章 系统总体结构 1.1 总体结构 系统实现需要部署服务器端的远程对象(即一个DbServerLibrary.dll),服务器端要注册通道和该远程对象.客户端要实现一个本地查询的服务器,同时根据S ...
- 十八道海量数据处理面试题与相关知识讲解
转载自:http://blog.sina.com.cn/s/blog_6002b97001014mu1.html 第一部分.十五道海量数据处理面试题 1. 给定a.b两个文件,各存放50亿个url,每 ...
- 全网最全、最新MyBatis框架核心知识,这篇文章包你这辈子也忘不掉MyBatis!!
最新文章
- C++11中std::tuple的使用
- seaborn使用violinplot函数可视化水平小提琴图(Make Horizontal Violin Plot with violinplot in Seaborn)
- 爬取jd商城手机类商品图片
- Jquery判断单选框是否选中和获取选中的值
- Python爬虫(十一)_案例:使用XPath的爬虫
- MySQL - Explain深度剖析
- puppet 基础篇
- RocketMQ 消息持久化机制
- [vue] 组件和插件有什么区别?
- Bootstrap3 警告框插件的事件
- 驱动等待队列,poll和select编程
- 三维重建笔记_SLAM简介
- adb工具下载及安装
- fedora14命令行界面自动root权限登录
- Spring Cloud Netflix框架最基础的五大组件介绍
- 编程之美1 哈利波特买书问题
- 为什么我的cairo画出的直线不同角度宽度不同???
- linux java 缓存服务器,linux服务器缓存环境memcached筹建及应用(java)
- 实战 | 如何利用 Scrapy 编写一个完整的爬虫!
- DNS内网欺骗(仅供参考)
热门文章
- PoolTogether本周Loot Box奖金组合中新增加入ESSAY代币
- 跨链项目Cosmos主网升级提案已开启投票 目前投票率为19.10%
- 【LOJ】 #2521. 「FJOI2018」领导集团问题
- 微信小程序想通过场景化缩短路径
- 一般处理程序页ashx 序列化 Json数组
- [POJ3928 Ping pong]
- 图解硬盘分区调整/硬盘分区重新调整的好软件/Norton PartitionMagic 版本 8.05 硬盘分区调整/想把硬盘空间调整一下...
- 从petshop中一实例谈using 的三种用法
- 高效算法之时间复杂度介绍
- 数据库开发这点事 中文PDF下载