environments 标签必须配置 default 属性且与某个 environment 的 id 完全一致(区分大小写),environment 内需完整定义 transactionmanager 和 datasource(type 必须为 pooled/unpooled/jndi,pooled 时 driver/url/username/password 缺一不可,jdbc url 中 & 要写成 &);typealiases 推荐用 批量注册,生成全小写别名(user→user),避免大小写混用导致不一致;spring 环境下 environments 会被忽略,应交由 spring 管理数据源和事务。

怎么写 environments 标签才不会连不上数据库
MyBatis 的 environments 不是可有可无的容器,它直接决定用哪个 DataSource 和事务管理器。漏掉 default 属性、写错环境 ID、或在 environment 里漏掉 transactionManager,都会导致启动时报 org.apache.ibatis.exceptions.PersistenceException: Error building SqlSession.
-
default必须和某个environment id="xxx"完全一致,区分大小写 - 别把
dataSource的type写成POOLED(正确是POOLED或UNPOOLED或JNDI),小写会报Unknown DataSourceFactory - 使用
POOLED时,driver、url、username、password四个属性缺一不可;JDBC URL 中如果含&,记得在 XML 里写成&
typeAliases 怎么配才能让 Mapper.xml 里少写一长串包名
别以为只加 <typealias></typealias> 就完事了——MyBatis 默认只识别类名(不带包),但你写 <select resulttype="User"></select> 时,它得知道这个 User 指的是 com.example.model.User。否则就会报 org.apache.ibatis.type.TypeException: The alias 'User' is not mapped.
- 单个别名:用
<typealias alias="User" type="com.example.model.User"></typealias>,alias值就是你在 XML 里写的类型名 - 批量扫包:用
<package name="com.example.model"></package>,它会把该包下所有类以**简单类名小写**作为别名(User→user),注意不是首字母小写而是全小写 - 想保留首字母大写?只能手动逐个
<typealias></typealias>,或者改用注解@Alias("User")在类上声明
开发/测试/生产环境切换时,environments 和 Spring 怎么共存不打架
如果你用 Spring + MyBatis,mybatis-config.xml 里的 environments 实际上会被 Spring 的 SqlSessionFactoryBean 忽略——Spring 自己管数据源和事务。硬要在 XML 里配多套 environment,反而容易让人误以为能靠改 default 切环境。
- 纯 MyBatis(无 Spring):靠
environments+ 启动时指定环境 ID 切换 - Spring Boot:删掉
mybatis-config.xml中的environments,把数据源配置全交给application.yml;MyBatis 配置项如configuration.map-underscore-to-camel-case=true放在mybatis.configuration下 - 老 Spring(XML 配置):别在
mybatis-config.xml里写environments,让SqlSessionFactoryBean的dataSource属性指向 Spring 管理的DataSourceBean
别名冲突和大小写问题,为什么 resultType="user" 有时行有时不行
MyBatis 对别名默认不区分大小写,但底层映射逻辑依赖 ClassLoader 加载顺序和注册时机。如果你同时用了 <package></package> 扫包(生成小写别名)和手动 <typealias alias="User"></typealias>(大写),就可能因加载顺序不同,在某些 JVM 上表现不一致。
- 最稳的做法:统一用小写别名,即扫包后全部写
resultType="user";或全部手动 alias,且保持大小写风格一致 - 检查是否真注册成功:启动时加日志级别
org.apache.ibatis.type.TypeAliasRegistry=DEBUG,能看到所有已注册别名 - 别在
typeAliases里配接口或抽象类——MyBatis 只认具体类,配了也没用
environments 和 Spring 的职责边界,以及 typeAliases 扫包后自动转小写的隐式规则。这两点不厘清,配置看着对,运行时却总差一口气。










