mybatis原理及介绍

mybatis介绍

    MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。

    MyBatis是一个持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

    Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

jdbc问题总结如下:

1.数据库连接创建、释放频繁造成系统资源浪费

2.Sql语句在代码中硬编码

3.占位符号传参数存在硬编码,当条件变更,或者占位符顺序发生改变

4.对结果集解析存在硬编码(查询列名)

Mybatis架构


                                   

SqlMapConfig.xml是mybatis 的核心配置文件

mapper.xml文件即sql映射文件,此文件需要在SqlMapConfig.xml中加载。

通过以上的两个配置文件会产生一个SqlSessionFactory即会话工厂

会话工厂创建sqlSession即会话,sqlSession来操作数据库

在sqlsession对象中有Executor和Mapped Statement

Executor它是sqlsession对象中SQL语句的执行者,Executor对象中放着mapped statement

sql语句放在mapped statement里的pojo对象中(sql语句的字段拆开放在pojo的字段中),最后由executor执行

MappedStatement中还有一个输入与输出映射,就是给sql语句占位符中入参塞入对象(这些对象可以是pojo、map、基础数据类型)

 Mybatis解决jdbc编程的问题

1、  数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

2、  Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:sql语句是写在配置文件中,将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、  向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4、  对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

mybatis与hibernate不同

Mybatis和hibernate不同,它不完全是一个ORM框架(不用自己编写sql语句,面向对象方式进行映射),因为MyBatis需要程序员自己编写Sql语句

 Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

 Hibernate对象/关系映射能力强,数据库无关性好,自动生成sql语句。对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。

总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

Mapper动态代理方式  

 开发规范

       Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。

Mapper接口开发需要遵循以下规范:

1、  Mapper.xml文件中的namespace与mapper接口的类路径相同。

2、  Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

3、  Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

4、  Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同


1、输入映射和输出映射

a)      输入参数映射

b)      返回值映射

2、动态sql

a)      If标签

b)      Where标签

c)       Sql片段

d)      Foreach标签

3、关联查询

a)      一对一关联

b)      一对多关联

4、Mybatis整合spring

a)      如何整合spring

b)      使用原始的方式开发dao

c)       使用Mapper接口动态代理

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值