SSM框架---MyBatis初识持久层框架(一)
一、简介
进化史:iBatis1.0 --> iBatis2.0 --> iBatis3.0 --> MyBatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。---查看底层源码,你会发现好多目录是iBatis
持久层框架:jdbc --> dbutil --> Hibernate --> springDataJPA --> Mybatis
其他框架都是对jdbc的封装,那为什么不直接使用jdbc呢?
二、jdbc的缺陷
1、涉及到重复创建链接和释放链接,造成资源浪费。解决方式:使用连接池。 2、出现硬编码。体现在:数据库驱动,url、用户名密码、sql。解决方式:使用配置文件 3、结果获取不方便。解决方式:把结果放到一个POJO中 。
(POJO就是一个普通的JavaBean,只是在这个框架里用了一个新的称呼POJO)
三、框架对比
四、MyBatis架构
1、通过加载核心配置文件sqlMapConfig.xml --> (可创建)sqlSessionFactory工厂(单例模式) --> (产生)sqlSession(具有CRUD方法) --> (通过)执行器Executor(执行对象从而与数据库交互) --> (执行sql的封装对象)MapperStatement --> 数据库
2、输入映射(sql入参):parameterType
-
基础数据类型,包括string,long,double,int,boolean,float等 pojo map 包装的pojo,即封装的VO类里包含POJO类
3、输出映射(输出的结果数据类型):resultType(自动配置列和属性的映射)
-
基础数据类型 pojo list,注意的是规范规定在映射文件xxxMapper.xml中写:resultType="pojo";在java类中:List<POJO>。list可以查询多条数据并返回 map
注意:resultType和resultMap不能同时出现。
4、输出映射(输出的结果数据类型):resultMap(手动配置列和属性的映射)
-
正式开发用的比较多; 当列和属性相同时可省略,但为了看起来方便,我们还是留着吧
<resultMap type="user" id="userResult"> <!--user是pojo的别名--> <!--<id property="id" column="id" />--> <!--列名与属性相同可省略,但不省略为好--> <result property="username" column="user_name"/> <result property="sex" column="gender"/> <!--<result property="birthday" column="birthday"/> --> <!--列名与属性相同可省略,但不省略为好--> <!--<result property="address" column="address"/> --> <!--列名与属性相同可省略,但不省略为好--> </resultMap>