Mybatis框架_part1

mybatis介绍

mybatis就是一个封装了jdbc的持久层框架,它的前身是ibatis。
Mybatis与hibernate一样都是持久层框架,但是它与hibernate不同的是,它不是一个完全的orm框架。
Mybatis只需要让程序员去关注sql本身。对于数据库的创建及关闭,statement的创建等都由mybatis进行封装。
Mybatis可以对输入的参数进行映射,可以对输出的结果进行映射。

分析原生jdbc的问题

1、创建数据库连接时存在硬编码
---配置文件
2、执行statement时存在硬编码
---配置文件
3、频繁的开启和关闭数据库连接存在性能浪费
---连接池

mybatis框架原理

Mybatis框架_part1

mybatis开发dao方式

原始dao开发方式

即开发dao接口和实现类

问题分析:

1、存在大量的模板代码
2、存在硬编码

mapper代理开发方式

即开发mapper接口即可,mapper接口,也就是dao接口。

接口开发规范:

1、mapper接口的类名的全限定名和mapper映射文件的namespace值一致。
2、mapper接口的方法名称要和mapper映射文件的statement的id一致。
3、mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致。
4、mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

mapper接口

Mybatis框架_part1

mapper映射文件

Mybatis框架_part1

全局配置文件加载mapper

Mybatis框架_part1

测试代码

Mybatis框架_part1

全局配置文件SqlMapConfig.xml

Properties(属性)

加载java的配置文件的信息到mybatis配置文件中进行使用

Mybatis框架_part1

Properties标签的加载顺序如下:
1、先加载《property》标签声明的变量
2、再加载properties标签引入的变量
3、最后加载的就是statement标签中parameterType的值

Settings(全局参数设置)

配置了mybatis的全局参数,该参数会影响整个mybatis的运行行为

typeAliases(类型别名)

类型的别名,它只对po类进行别名的定义

自定义别名

Mybatis框架_part1

mappers(映射器)

1.<mapper resource=’’/>
使用相对于类路径的资源
如:<mapper resource="sqlmap/User.xml" />
2.<mapper url=’’/>
使用完全限定路径
如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />
3.<mapper class=’’/>
使用mapper接口的全限定名
如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;
4.<package name=’’/>(推荐)
注册指定包下的所有映射文件
如:<package name="cn.itcast.mybatis.mapper"/>
注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

映射文件

输入映射

在mybatis中,输入映射使用parameterType来进行映射

映射简单类型

Mybatis框架_part1

映射pojo

Mybatis框架_part1

映射包装pojo

映射文件

Mybatis框架_part1

pojo包装类

Mybatis框架_part1

mapper接口

Mybatis框架_part1

映射mapper集合

同传递POJO对象一样,map的key相当于pojo的属性

映射文件
<!-- 传递hashmap综合查询用户信息 -->
<select id="findUserByHashmap" parameterType="hashmap" resultType="user">
select * from user where id=#{id} and username like '%${username}%'
</select>

输出映射

Mybatis在进行输出结果的映射时,有两种映射方式,一种 是使用resultType标签、一种是使用resultMap标签

resultType:需要满足查询的列名和映射对象属性名称保持一致即可。

resultMap:不需要查询的列名和映射对象的属性名称一致。但是需要定义一个resultMap标签来完成列名和属性名的映射关系。

动态sql

Mybatis提供了一些动态标签,可以让程序员再编写映射文件时,更加方便灵活、提高代码的可重用性

If、where标签:在综合查询时,查询条件由客户输入,不能固定,所以映射文件中的查询条件不能写死

Sql片段:Sql片段可以提高代码的可重用性。先定义后使用

Foreach标签:可以将集合参数传入到映射文件中,然后通过foreach标签对集合参数进行遍历映射

mybatis与hibernate的各自应用场景

Mybatis技术特点:

1、通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。

Hibernate技术特点:

1、标准的orm框架,程序员不需要编写SQL语句。
2、具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
3、学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
4、程序员不能自主的去进行SQL性能优化。

Mybatis应用场景:

需求多变的互联网项目,例如电商项目。

Hibernate应用场景:

需求明确、业务固定的项目,例如OA项目、ERP项目等。

上一篇:SQL 数据优化之不建立索引的情况


下一篇:RxJava开发精要3-向响应式世界问好