本篇文章是我学习Mybatis的总结
1.概述
1.1 定义:
Mybatis是是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。它通过SQL Map将Java对象映射成SQL语句,再将结果集转换成Java对象。
1.2 它可以:
1)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。
2)MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。
2.Mybatis执行流程
2.1要使用Mybatis,你需要3件东西:
1)一个数据库和一张表:
因为Mybatis就是操作数据库的,所以我们使用Mybatis当然要用到数据库,数据库是mysql,我用的测试数据库名称叫test.有几张表,我会导出sql语句,放到工程中。
如下图:
2)jar包:mybatis的和mysql的核心包
3)一个java web项目:
大概是长这个样子。大概需要的东西就是这三件,然后我们开始使用Mybatis来操作数据库吧。
2.2.Mybatis执行流程
执行Mybatis需要
1)一个实体类:建立一个对应于数据库的一张表的实体类,需要有空构造方法,sqlSession的selectone方法查询一条信息时,会调用空构造方法去实例化一个domain.
2)一个conf.xml:配置sql的运行环境。
conf.xml 配置需要遵守以下顺序,不然会报错:
- properties:可以引用一些properties文件,例如jdbc的配置文件
- settings
- typeAliases:可以给Java类型命名一个较短的名字,用来减少类完全限定名的多余部分,可以用在mapper中。
- typeHandlers
- objectFactory
- objectWrapperFactory
- reflectorFactory
- plugins
- environments:将SQL映射用于多种数据库中,可以配置多种环境,但只能为每一个SqlSessionFactory选择一个
- databaseIdProvider
- mappers:定义SQL映射语句。告诉Mybatis去哪找映射文件。
3)一个mapper.xml文件:核心sql映射。
为实体类写mapper文件,就是写sql语句,需要什么写什么。包括DDL,DML语句等。
4)一个执行类:
Mybatis的执行步骤是:
- 使用类加载器或者MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
- 构建sqlSession的工厂
- 创建能执行映射文件中sql的sqlSession
- 执行查询
运行这个执行类就可以看到操作了。
3.mapper里的Sql语句
这一章专门总结一下mapper里面的语法。mapper其实就是一个sql语句的xml形式,mybatis利用这个xml反射生成Java代码从而面向接口编程。主要总结标签:
1)常用标签:
select:查询语句,有多个属性,重要的是下面两个
parameterType:参数的类型,可以是基本类型也可以是Java类
resultType/resultMap:返回的结果,当Java实体类和数据库的表的列对应时,就可以直接写列名,当不对应时,就需要用resultMap来对应了。
insert:
parameterType:同上
update:
parameterType:同上
delete
parameterType:同上
2)动态sql
动态sql元素和使用JSTL或其他相似的基本XML的文本处理器相似,mybatis采用基于OGNL表达式来消除其他元素。
if:条件语句
<if test="colName != null">
and ....
</if>
choose、when、otherwise:选择跳转
<choose>
<when test="cloName!=null">
and...
</when>
<when test="....">
and...
</when>
<otherwise>
or 1=1;
</otherwise>
</choose>
注:两个when只能满足一个,都不满足则会用otherwise
trim、where、set:将where作为判断条件
set元素可以用于动态,包含更新的列
foreach:迭代一个集合,通常是构建在条件上的。
4.Mybatis缓存:见链接,写得很好。
5.Mybatis基本原理
反射,就是反射,还是反射
注:代码我会传到github上,链接是:https://github.com/Gabby007/frameworkDemo
参考资料:
《深入分析Java Web 技术内幕(修订版)》 许令波著