行业资讯

MyBatis核心类用法详解

发布时间:2026/8/2 20:18:28
MyBatis核心类用法详解 MyBatis 是一款优秀的持久层框架它支持定制化 SQL、存储过程以及高级映射。其核心类构成了 MyBatis 框架的基础理解这些核心类的用法对于掌握 MyBatis 至关重要。以下是对 MyBatis 核心类及其用法的详细介绍1.SqlSessionFactoryBuilder这是 MyBatis 的初始化类负责从配置文件或配置类构建SqlSessionFactory对象。用法示例importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importjava.io.InputStream;publicclassMyBatisUtil{privatestaticSqlSessionFactorysqlSessionFactory;static{try{// 加载 MyBatis 配置文件Stringresourcemybatis-config.xml;InputStreaminputStreamResources.getResourceAsStream(resource);// 构建 SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(inputStream);}catch(Exceptione){e.printStackTrace();}}publicstaticSqlSessionFactorygetSqlSessionFactory(){returnsqlSessionFactory;}}关键方法build(InputStream inputStream)从 XML 配置文件构建SqlSessionFactory。build(Configuration config)从自定义的Configuration对象构建SqlSessionFactory。2.SqlSessionFactorySqlSessionFactory是 MyBatis 的核心工厂类负责创建SqlSession对象。一个应用通常只需要一个SqlSessionFactory实例。用法示例// 获取 SqlSessionFactory 实例SqlSessionFactorysqlSessionFactoryMyBatisUtil.getSqlSessionFactory();// 创建 SqlSessiontry(SqlSessionsessionsqlSessionFactory.openSession()){// 执行数据库操作}关键方法openSession()创建一个非自动提交的SqlSession。openSession(boolean autoCommit)指定是否自动提交事务。openSession(ExecutorType executorType)指定执行器类型SIMPLE、REUSE、BATCH。3.SqlSessionSqlSession是 MyBatis 的核心接口它提供了执行 SQL 语句、管理事务等方法。每个线程都应该有自己独立的SqlSession实例。用法示例try(SqlSessionsessionsqlSessionFactory.openSession()){// 方式一通过全限定名获取 Mapper 方法Userusersession.selectOne(com.example.mapper.UserMapper.selectUserById,1);// 方式二通过 Mapper 接口获取代理对象UserMapperuserMappersession.getMapper(UserMapper.class);UseruseruserMapper.selectUserById(1);// 插入操作UsernewUsernewUser(John,Doe);userMapper.insertUser(newUser);// 提交事务非自动提交模式下session.commit();}关键方法selectOne(String statement, Object parameter)查询单个结果。selectList(String statement, Object parameter)查询列表结果。insert(String statement, Object parameter)插入数据。update(String statement, Object parameter)更新数据。delete(String statement, Object parameter)删除数据。getMapper(ClassT type)获取 Mapper 接口的代理对象。commit()提交事务。rollback()回滚事务。4.Mapper 接口Mapper 接口是 MyBatis 推荐的编程方式它通过接口方法和注解或 XML绑定 SQL 语句。Mapper 接口示例importorg.apache.ibatis.annotations.Mapper;importorg.apache.ibatis.annotations.Select;MapperpublicinterfaceUserMapper{// 使用注解定义 SQLSelect(SELECT * FROM users WHERE id #{id})UserselectUserById(intid);// 也可以通过 XML 文件定义 SQL只需方法签名匹配voidinsertUser(Useruser);}关键点Mapper 接口无需实现类MyBatis 会自动生成代理对象。方法名和参数需与 XML 或注解中的 SQL 定义匹配。5.ConfigurationConfiguration是 MyBatis 的全局配置对象包含了所有 MyBatis 的配置信息。用法示例// 手动创建 Configuration 对象ConfigurationconfignewConfiguration();config.setLazyLoadingEnabled(true);config.setCacheEnabled(true);// 注册映射器config.addMapper(UserMapper.class);// 构建 SqlSessionFactorySqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(config);常见配置项settings各种全局设置如延迟加载、缓存等。typeAliases类型别名注册。mappers映射器注册。environments数据库环境配置。6.ExecutorExecutor是 MyBatis 的执行器负责 SQL 语句的执行和缓存的维护。执行器类型SIMPLE默认执行器每个 SQL 都会创建新的预处理语句PreparedStatement。REUSE复用预处理语句提高性能。BATCH批量执行器适用于批量插入、更新操作。配置方式!-- mybatis-config.xml --settingssettingnamedefaultExecutorTypevalueREUSE//settings7.TypeHandlerTypeHandler用于实现 Java 类型与 JDBC 类型之间的转换MyBatis 内置了许多常用的类型处理器。自定义 TypeHandler 示例importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibatis.type.JdbcType;importjava.sql.*;importjava.time.LocalDateTime;publicclassLocalDateTimeTypeHandlerextendsBaseTypeHandlerLocalDateTime{OverridepublicvoidsetNonNullParameter(PreparedStatementps,inti,LocalDateTimeparameter,JdbcTypejdbcType)throwsSQLException{ps.setTimestamp(i,Timestamp.valueOf(parameter));}OverridepublicLocalDateTimegetNullableResult(ResultSetrs,StringcolumnName)throwsSQLException{Timestamptimestamprs.getTimestamp(columnName);returntimestamp!null?timestamp.toLocalDateTime():null;}// 其他方法实现...}注册自定义 TypeHandler!-- mybatis-config.xml --typeHandlerstypeHandlerhandlercom.example.handler.LocalDateTimeTypeHandler//typeHandlers总结MyBatis 的核心类通过工厂模式、代理模式和构建者模式协作形成了一个灵活且高效的持久层框架。