Mybatis的概念
Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动.创建连接.创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以使用 XML 或注解来配置和映射原生信息,将 POJO (Plain Ordinary Java Object)映射成数据库中的记录。通过 xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
通俗的理解,假如你是一位厨师,需要根据菜谱来准备菜肴。在传统的编程方式中,你需要手动编写 SQL 语句(就像是按照菜谱一步步做菜)来从数据库中获取或存储数据。这可能会很繁琐,因为你需要处理很多细节,比如连接数据库、执行 SQL 语句、处理结果集等。MyBatis 就像是一个厨房助手,它帮你处理这些繁琐的工作,让你能够更加专注于核心的业务逻辑。
ORM全称Object Relation Mapping,对象关系映射,java中的一个实体类对应数据库中的一个表,一个对象对应一个数据行,一个属性对应一个字段。
MyBatis的优点
1. SQL 语句与 Java 代码分离:
相当于你可以把复杂的 SQL 语句写在一个单独的地方(XML 文件或者注解中),而你的 Java 代码只需要调用这些 SQL 语句。
2. 自动映射结果集到 Java 对象:
就像你只需要告诉助手需要哪些材料和调料,助手会帮你准备好一切,最后你拿到的就是一份完整的菜肴。在 MyBatis 中,你可以定义如何将查询结果映射到 Java 对象上,这样就不用手动一行行去处理结果集了。
3. 动态 SQL:
如果你的菜谱需要根据不同的情况做一些调整(比如加不加辣椒),MyBatis 提供了动态 SQL 的功能,可以根据条件生成不同的 SQL 语句。
4. 提供缓存机制:
厨师助手还会记得你之前做过的菜肴,如果再次需要同样的菜肴,就不需要重新准备材料,直接从缓存里拿出就可以了。MyBatis 也有类似的缓存机制,可以提高数据访问效率。
5. 易于集成:
MyBatis 可以很容易地与其他框架(如 Spring)集成在一起使用,就像是厨房里的各种工具可以很好地协同工作一样。
Mybatis的缺点
1. SQL 语句的编写工作量较大: MyBatis 要求开发者手动编写 SQL 语句,这可能导致较大的工作量,特别是在涉及多个表的复杂查询时。如果应用中的业务逻辑较为复杂,那么编写和维护这些 SQL 语句将会变得更加困难。
2. 技能要求高:由于需要手动编写 SQL 语句,因此对开发人员的 SQL 技能有较高的要求。如果团队成员对 SQL 不够熟练,那么可能会出现性能问题或者错误的查询结果。
3. SQL 语句依赖于数据库,移植性差:MyBatis 中的 SQL 语句通常是针对特定类型的数据库编写的,这意味着如果需要更换数据库类型(例如从 MySQL 切换到 PostgreSQL 或 Oracle),可能需要修改大量的 SQL 语句以适应新数据库的特点和语法。 这种依赖性限制了应用的灵活性,因为不同的数据库系统有不同的特性、函数和语法,这使得在不同的数据库之间迁移变得困难。