关于Mybatis

86 阅读2分钟

什么是Mybatis?

MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于 2013年11月迁移到Github。

iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架 包括SQL Maps和Data Access Objects(DAO)

MyBatis的主要目标是提供更直接、灵活的数据库访问方法,以及更好地控制SQL查询和结果映射。相较于其他ORM框架,MyBatis更接近SQL,开发者可以使用原生SQL语句,这为性能优化提供了更大的灵活性。

MyBytis的特性:

• MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架

• MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

• MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录

• MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架

Mybbatis与其他持久化层技术的对比:

•JDBC

SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
代码冗长,开发效率低

•Hibernate 和 JPA

操作简便,开发效率高
程序中的长难复杂 SQL 需要绕过框架
内部自动生产的 SQL,不容易做特殊优化
基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。
反射操作太多,导致数据库性能下降

•MyBatis

轻量级,性能出色
SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
开发效率稍逊于HIbernate,但是完全能够接受

简单说一下关于Mybatis获取参数的两种方式

MyBatis获取参数值的两种方式:${}和#{}

${}的本质就是字符串拼接,#{}的本质就是占位符赋值

${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引

号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自

动添加单引号

•单个字面量类型的参数

若mapper接口中的方法参数为单个的字面量类型
此时可以使用${}#{}以任意的名称获取参数的值,注意${}需要手动加单引号

•多个字面量类型的参数

若mapper接口中的方法参数为多个时
此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1...为键,以参数为值;以param1,param2...为键,以参数为值;因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

•map集合类型的参数

若mapper接口中的方法需要的参数为多个时,
此时可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

•实体类类型的参数

若mapper接口中的方法参数为实体类对象时
此时可以使用${}#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

•使用@Param标识参数

可以通过@Param注解标识mapper接口中的方法参数
此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以param1,param2...为键,以参数为值;只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

总结:

作为一个萌新,文章有什么描述不对或不足的地方还请大家多多指正