Mybatis 简介

mybatis

jdbc存在的问题:

1.简单的通过驱动来创建数据库会存在:数据库连接时就创建,不使用就立即释放,这样反复的创建与释放会导致资源浪费的问题。可以通过使用数据库连接池来管理数据库的连接。
2.将sql语句直接写入java代码中,耦合度极高。可以通过xml配置文件将需查询的sql语句分开存放便于维护。
3.从resultSet中获取结果时,结果集的结构与字段耦合度高。可以设想将结果集转化为java对象。

为什么要使用mybatis?

mybatis是一个持久层框架,是apache下的项目。mybatis让程序员将主要精力放在sql语句上,通过mybatis提供半自动化的映射方式生成sql。mybatis可以将jdbc的Statement输出参数自动输入映射,将查询结果集灵活的输出映射成java对象。下载地址:(https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.4.5

mybatis框架

SqlMapConfig.xml是mybatis的全局配置文件,配置了数据源、事务等mybatis的运行环境。
配置映射关系(配置sql语句):mapper.xml…

SqlSessionFactory会话工厂用来创建SqlSession。
SqlSession用于操作数据库,发出CRUD的sql语句。
Executor(执行器(基本执行器、缓存执行器))SqlSession内部通过执行器操作数据库。
mapped statement是一个低层封装对象,对操作数据库存储封装,包括sql语句,输入参数,输出结果类型。

SqlSessionFactory用单例模式来实现
SqlSession是线程不安全的,所以在方法体内使用定义为局部变量使用。

原始Dao开发与映射开发优劣

1 原始dao模版开发方法有很多重复代码。效率低。
2 调用sqlSession方法时与映射文件耦合度高。
3 调用sqlSession时因为参数类型为Object,理论上可以穿入任何类型数据,安全性差。

mapper 映射:
1 编写mapper.xml映射文件
2 编写mapper.java(UserMapper)接口
3 mybatis自动生成mapper接口实现类代理对象

开发方法:
1 mapper.xml中namespace应该是mapper.java接口的全称
2 mapper.java接口的方法名应该和mapper.xml中statement的id一致
3 mapper.java接口的方法输入参数类型应该和statement中parameterType指定类型一致
4 mapper.java接口的方法中返回值类型和statement中resultType指定类型一致
以上4步开发规范可以使得接口的方法实现自动生成。
注意事项:
1 尽量使用selectList方法调用
2 方法参数只能有一个,有局限性,解决方法是用不同类型多种包装的bean来作为参数

UserQueryVo 用于多个bean对象包装映射

resultMap:
如果你查询出来的列名和bean的属性名不一致,通过定义一个resultMap对列名和bean属性名之间做一个映射关系。
1 定义一个resultMap
2 使用resultMap作为statement和bean之间的输出映射

resultMap 可以进行延迟加载 resultType无法进行延迟加载

动态SQL

1 对查询条件进行判断是否为空
2 抽取出代码块,以便于重用
3 foreach标签 向sql中传递list可以用foreach解析

延迟加载

resultMap可以通过使用association,collection实现高级映射。association,collection具备延迟加载的功能。延迟加载表示先从单张表中查询,如果不能满足需求再去关联查询,可以提高数据库性能,因为查询单表要比关联查询多张表速度快。

spring和mybatis的整合

1 需要spring通过单例的方式管理SqlSessionFactory
2 持久层的mapper都需要spring来管理
3 spring和mybatis整合自动通过SqlSessionFactory创建SqlSession

### MyBatis框架简介 MyBatis 是一款优秀的持久层框架,其核心功能在于支持定制化的 SQL 查询、存储过程以及高级映射[^3]。它能够显著减少 JDBC 编码量,消除手动设置参数和获取结果集的过程。通过简单的 XML 配置或者注解方式,MyBatis 可以将 Java 接口和 POJO 映射为数据库中的记录。 #### 功能特点 - **SQL 定制化**:允许开发者编写自定义的 SQL 语句,满足复杂查询需求。 - **动态 SQL 支持**:提供强大的动态 SQL 构建能力,可以根据条件生成不同的 SQL 语句。 - **映射机制**:通过 XML 或者注解实现 Java 对象与数据库表之间的映射关系。 - **缓存支持**:内置一级缓存(Session 级别),并可扩展二级缓存提升性能。 - **事务管理**:集成 JDBC 的事务处理逻辑,简化开发难度。 --- ### 工作原理详解 MyBatis 的工作流程主要分为以下几个阶段: 1. **配置解析** - MyBatis 初始化时会加载全局配置文件 `mybatis-config.xml` 和 Mapper 文件。这些文件包含了数据源信息、事务管理器配置以及 SQL 映射规则等内容[^5]。 2. **构建 SqlSessionFactory** - 使用 `SqlSessionFactoryBuilder` 解析配置文件后生成 `SqlSessionFactory` 实例。该实例负责创建后续所需的 `SqlSession` 对象[^5]。 3. **创建 SqlSession** - 每次执行数据库操作前都需要打开一个新的 `SqlSession`。它是 MyBatis 提供的一个轻量级对象,封装了底层 JDBC 连接池的功能,并提供了增删改查方法接口[^4]。 4. **SQL 封装与执行** - 当调用某个 DAO 方法时,MyBatis 会根据传入的方法名匹配对应的 Mapper 中声明的 SQL 节点。随后利用反射技术提取输入参数值替换占位符位置形成完整的 SQL 文本[^1]。 - 执行完毕之后再依据返回的数据结构自动转换为目标类型的实体类列表或其他形式的结果集合[^1]。 5. **结果映射** - 数据库查询得到 ResultSet 后交由 ResultHandler 处理,按照预先设定好的字段对应关系逐一赋值给目标 Bean 属性完成最终的对象组装过程[^3]。 以下是典型的代码示例展示如何初始化 MyBatis 并执行 CRUD 操作: ```java // 加载配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try (SqlSession session = sqlSessionFactory.openSession()) { // 获取Mapper代理对象 UserMapper mapper = session.getMapper(UserMapper.class); // 插入一条新纪录 int result = mapper.insertUser(new User()); } catch(Exception e){ System.out.println(e.getMessage()); } ``` --- ### 总结 综上所述,MyBatis 不仅具备高度灵活性还拥有良好的兼容性和扩展性,在实际项目中被广泛应用于中小型系统的快速搭建当中[^4]。通过对原生 JDBC API 的抽象封装极大地方便了程序猿们日常编码作业的同时也保留了一定程度上的自由度去应对各种特殊场景下的业务诉求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值