MyBatis 配置一篇详解
本文详细讲解MyBatis 的配置文件通常是mybatis-config.xml是核心配置入口用于全局配置数据库连接、插件、映射器等。以下是主要配置项及其用法1. 配置文件结构概览?xml version1.0 encodingUTF-8 ?!DOCTYPEconfigurationPUBLIC-//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtdconfiguration!-- 环境配置 --environmentsdefaultdevelopmentenvironmentiddevelopmenttransactionManagertypeJDBC/dataSourcetypePOOLEDpropertynamedrivervalue${driver}/propertynameurlvalue${url}/propertynameusernamevalue${username}/propertynamepasswordvalue${password}//dataSource/environment/environments!-- 类型别名 --typeAliasestypeAliastypecom.example.UseraliasUser//typeAliases!-- 插件 --pluginsplugininterceptorcom.example.MyInterceptor//plugins!-- 对象工厂 --objectFactorytypecom.example.MyObjectFactory/!-- 映射器 --mappersmapperresourcecom/example/UserMapper.xml/mapperclasscom.example.BlogMapper//mappers/configuration2. 核心配置项详解2.1properties标签作用外部化配置如数据库连接信息支持 properties 文件或 Java 属性。用法propertiesresourcedb.propertiespropertynameusernamevaluedev_user/propertynamepasswordvaluedev_password//properties说明resource/url引入外部 properties 文件。优先使用外部文件的属性重复属性以配置文件中的为准。2.2settings标签作用全局参数配置控制 MyBatis 行为。常用配置settingssettingnamecacheEnabledvaluetrue/!-- 开启二级缓存 --settingnamelazyLoadingEnabledvaluetrue/!-- 开启延迟加载 --settingnamemultipleResultSetsEnabledvaluetrue/!-- 允许多结果集 --settingnameuseColumnLabelvaluetrue/!-- 使用列标签而非列名 --settingnamelogImplvalueSLF4J/!-- 日志实现 --settingnamemapUnderscoreToCamelCasevaluetrue/!-- 开启驼峰命名映射 --/settings2.3typeAliases标签作用简化类名引用避免全限定名。用法!-- 单个别名 --typeAliastypecom.example.UseraliasUser/!-- 包扫描自动取类名小写作为别名 --packagenamecom.example.entity/内置别名int→java.lang.Integerstring→java.lang.Stringdate→java.util.Date2.4typeHandlers标签作用自定义类型与 JDBC 类型的转换逻辑。用法!-- 注册自定义类型处理器 --typeHandlerstypeHandlerhandlercom.example.DateTypeHandler/packagenamecom.example.handler/!-- 包扫描 --/typeHandlers2.5objectFactory标签作用自定义对象创建逻辑如注入依赖。用法objectFactorytypecom.example.MyObjectFactorypropertynamesomePropertyvalue100//objectFactory2.6plugins标签作用拦截执行器的方法如 SQL 执行、参数处理。用法pluginsplugininterceptorcom.example.ExamplePluginpropertynamesomePropertyvalue100//plugin/plugins可拦截的方法Executor如update、queryParameterHandler如getParameterObjectResultSetHandler如handleResultSetsStatementHandler如prepare2.7environments标签作用配置多环境开发、测试、生产的数据库连接。用法environmentsdefaultdevelopmentenvironmentiddevelopmenttransactionManagertypeJDBC/dataSourcetypePOOLEDpropertynamedrivervalue${driver}/propertynameurlvalue${url}/propertynameusernamevalue${username}/propertynamepasswordvalue${password}//dataSource/environment/environments说明transactionManager类型JDBC原生、MANAGED容器管理。dataSource类型UNPOOLED非池化、POOLED池化、JNDI容器资源。2.8databaseIdProvider标签作用支持多数据库方言如 MySQL、Oracle。用法databaseIdProvidertypeDB_VENDORpropertynameMySQLvaluemysql/propertynameOraclevalueoracle//databaseIdProviderSQL 映射中使用selectidselectUserresultTypeUserdatabaseIdmysqlSELECT * FROM user WHERE id #{id}/select2.9mappers标签作用注册 SQL 映射文件或接口。注册方式!-- 资源路径 --mapperresourcecom/example/UserMapper.xml/!-- 接口类路径 --mapperclasscom.example.UserMapper/!-- 包扫描 --packagenamecom.example.mapper/3. 配置加载方式3.1 Java 代码加载配置文件InputStreaminputStreamResources.getResourceAsStream(mybatis-config.xml);SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder().build(inputStream);3.2 Spring 集成配置ConfigurationpublicclassMyBatisConfig{BeanpublicSqlSessionFactorysqlSessionFactory(DataSourcedataSource)throwsException{SqlSessionFactoryBeanfactoryBeannewSqlSessionFactoryBean();factoryBean.setDataSource(dataSource);factoryBean.setConfigLocation(newClassPathResource(mybatis-config.xml));returnfactoryBean.getObject();}}4. 注意事项配置优先级Java 代码参数 配置文件参数 默认值。SQL 映射文件路径XML 文件需与接口类在相同包路径或通过package扫描。插件顺序plugins中配置的拦截器按顺序执行。数据源配置生产环境建议使用第三方连接池如 HikariCP、Druid。5. 高级配置示例5.1 自定义插件分页插件Intercepts({Signature(typeExecutor.class,methodquery,args{MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class})})publicclassPageInterceptorimplementsInterceptor{OverridepublicObjectintercept(Invocationinvocation)throwsThrowable{// 分页逻辑实现returninvocation.proceed();}}5.2 多环境配置environmentsdefaultprodenvironmentiddevtransactionManagertypeJDBC/dataSourcetypePOOLEDpropertynamedrivervaluecom.mysql.cj.jdbc.Driver/propertynameurlvaluejdbc:mysql://localhost:3306/dev_db/propertynameusernamevaluedev/propertynamepasswordvaluedev123//dataSource/environmentenvironmentidprodtransactionManagertypeJDBC/dataSourcetypePOOLEDpropertynamedrivervaluecom.mysql.cj.jdbc.Driver/propertynameurlvaluejdbc:mysql://prod-server:3306/prod_db/propertynameusernamevalueprod/propertynamepasswordvalueprod123//dataSource/environment/environments