1.1 常用结构
1.1.1 三层架构
学习MyBatis前我们先了解以下web开发的三层架构
- 界面层:和用户打交道,接收用户请求参数,显示处理结果;对应controller包(servlet),对应springmvc框架
- 业务逻辑层:接收页面层传递的数据,处理逻辑,调用数据库并获取数据;对应service包(XXXService类),对应spring框架
- 数据访问层(也叫持久层):负责访问数据库,对数据进行增删改查等等操作;对应dao包(XXXDao类),对应mybatis框架
1.1.2 框架
可以把框架理解成一个半成品的单车(软件),我们作为驾驶者(开发者),可以使用这个单车自带的功能,如乘坐、骑行、转向等等;当然我们也可以对单车进行加工,加入新的功能,如后视镜,车喇叭等等;要注意的是,这个单词不是全能的,它只在一个大的方面(领域)有效,我们可以骑行,可以走小道等等,但是我们不能让他开到海上,飞到天上,开到高速公路。
1.2 为什么是MyBatis?
过去我们访问数据库使用JDBC(可以回头看看JDBC的代码内容),我们可以发现使用JDBC来访问数据库有以下缺陷:
- 代码量大,重复量大,开发效率低
- 要关注Connection,Statement和ResultSet对象的创建和销毁
- 对于ResultSet查询的结果需要自己封装成List
- 业务代码和数据库的操作混在一起
困于此,MyBatis便孕育而生了
1.2.1 什么是MyBatis?
MyBatis乳名ibatis,是一个sql映射框架(SQL Mapper Framework for Java),提供操作数据库的能力,是一个打了鸡血的JDBC
关于MyBatis
- sql mapper:sql映射:
可以把数据库表中一行数据映射为一个java对象(一行数据=一个java对象),操作这个对象=操作表中数据 - Data AccessObjects(DAOs):
数据访问,即对数据库进行增删改查
MyBatis提供了什么功能
- 提供创建Connection,Satatement和ResultSet的能力,我们就不用去创建了
- 提供执行sql语句的能力,也无需我们去执行
- 提供循环sql的能力,会将sql的结果转换为java对象(List集合的能力,如下)
while(rs.next()){ student stu=new student(); stu.setId(rs.getInt("id")); stu.setName(rs.getstring("name")); stu.setAge(rs.getInt("age")); //从数据库取出数据转为student对象,封装到List集合 stuList.add(stu);
- 提供关闭资源(C,S,R)的能力
那我们要做什么? ——提供sql语句
整体的流程便是:
我们提供sql语句-->mybatis处理sql-->得到List集合或java对象(表中数据)