Mybatis官网文档学习笔记

Mybatis是一个优秀的持久层框架,支持SQL查询、存储过程等,通过XML或注解进行映射,实现简单灵活的数据库操作。它简化了JDBC代码,提供映射标签和对象关系映射功能,但也存在SQL编写工作量大、数据库移植性差等问题。文章涵盖了Mybatis的原理、使用、优缺点以及关键知识点,包括SqlSessionFactory、Mapper接口、XML配置文件、动态SQL等。
摘要由CSDN通过智能技术生成

简单介绍

Mybatis本是apache的一个开源项目,2010年这个项目由apache software foundation迁移到了google code,并且改名为Mybatis.201311月迁移到Github.

Mybatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及抽取结果集。Mybatis使用简单的XML注解用于配置原始映射,将接口和JavaPOJOS映射成数据库中的记录。

原理

使用

使用Mybatis,只需要将mybatis-x.x.x.jar文件置于classpath即可。

如果使用Maven来构建项目,则需将下面的dependency代码置于pom.xml文件中:

长处

1.        简单易学

Mybatis本身小且简单。没有任何第三方依赖,最简单只要jar文件+配置几个sql映射文件,易于学习、易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

2.        灵活

Mybatis不会对应用程序或者数据库的现有设计强加任何影响。Sql写在xml文件中,便于统一管理和优化。通过sql基本上可以实现我们不使用数据库访问框架可以实现的所有功能。

3.        解除SQL与程序代码的耦合

通过提高DEL层,将业务逻辑和数据访问逻辑分离,使系统的涉及更清晰,更易维护,更易单元测试。Sql和代码的分离,提高了可维护性。

4.        提供映射标签,支持对象与数据库的orm字段关系映射

5.        提供对象关系映射标签,支持对象关系组建维护

6.        提供XML标签,支持编写动态sql

 

短处

1.        编写SQL语句时工作量大,尤其是字段多、关联表多时,更是如此。

2.        SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

3.        SQL写在XML中,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难。

小知识点

1.   每个基于Mybatis的应用都是以一个SqlSessionFactory的实例为中心的。可以通过SqlSessionFactoryBuilder获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。

2.   Mppper实例

映射器是创建绑定映射语句的接口。映射器接口的实例可以从SqlSession中获得。

3.   XML映射配置文件

MybatisXML配置文件包含了影响Mybatis行为甚深的设置和属性信息,XML文档的高层级结构如下:

4.   映射语句关键字标签:

查询:select  新增:insert  修改update  删除:delete

5.   映射xml需添加标签,用来解析Mybatis关键字:

<!DOCTYPEmapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

6.   命名空间(Namespaces):

在之前版本的iBatis中是可选的,但现在的命名空间则是必须的。

4.类型别名typeAliases

用于在映射XML中对POJO类进行重命名,在映射XML实际应用时可直接使用该别名,减少类完全限定名的出现次数,方便书写,便于维护。

7.   传入参数:parameterType

parameterTypeSQL映射语句入参关键字,将会传入这条语句的参数类的完全限定名或别名

8.   返回参数:resultTyperesultMap

resultType:SQL映射语句返回关键字,从这条语句返回的期望类型的类的完全限定名或别名。当返回是集合时,这里应该是集合可以包含的类型,而不能是集合本身。

resultMapSQL映射语句返回关键字,命名引用外面的resultMap.

resultTyperesultMap不能同时使用

9.   动态SQL

a.if:在动态sql中所做的最常用的事情是包含部分where字句的条件

b.choose,when,otherwise

有时我们不想应用所有的条件,相反我们想选择很多情况下的一种。与java中的switch语句相似。

10. sekectKey

当映射语句为插入语句时,如果你的数据库支持自动生成主键的字段,那么可以设置useGenneratedKeys=”true”,而且设置keyProperty到你已经做好的目标属性上。或者使用selectKey, selectKey会首先运行,这使得我们可以在数据库中来处理自动生成的主键,而不需要在Java中处理,而这时keyProperty作为selectKey语句结果应该被设置的目标属性。

11. sql

可以用来定义可重用的SQL代码片段,可以包含在其他语句中。

12. 字符串替换

默认情况下,使用#{}格式的语法会导致Mybatis创建预处理语句属性并以它为背景设置安全的值(如?)。但有时你只是想直接在SQL语句中插入一个不改变的字符串,可以使用${}.

13. resultMap

constructor –类在实例化时,用来注入结果到构造方法中

   idArg –ID参数,标记结果作为ID可以帮助提高整体效能

   arg  -注入到构造方法的一个普通结果

id –一个ID结果,标记结果作为ID可以帮助提高整体效能

result –注入到字段或JavaBean属性的普通结果

association –一个复杂的类型关联,许多结果将包成这种类型

   嵌入结果映射 结果映射自身的集,或者参考一个

Collection –复杂类型的集

   嵌入结果映射结果映射自身的集,或者参考一个

Discriminator –使用结果值来决定使用哪个结果映射

Case–基于某些值的结果映射

     嵌入结果映射 结果映射自身的集,或者参考一个

14. null值的处理

如果null值被当做值来传递,对于所有可能为空的列,JDBC type是需要的

实战

见下一篇。
注:文章部分参考:http://blog.csdn.net/jiuqiyuliang/article/details/45286191

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值