mybatis配置优化
mybatis的配置中引用外部的propertis配置文件
1. 创建外部配置文件
比如 db.properties:
jdbc.driver=com.mysql.cj.jdbc.driver jdbc.url=jdbc:mysql://localhost:3306/mydb?usessl=false jdbc.username=root jdbc.password=123456
2. 在mybatis-config.xml中引入:
<?xml version="1.0" encoding="utf-8" ?>
<!doctype configuration
public "-//mybatis.org//dtd config 3.0//en"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入外部 properties 文件 -->
<properties resource="db.properties" />
<environments default="development">
<environment id="development">
<transactionmanager type="jdbc"/>
<datasource type="pooled">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</datasource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/usermapper.xml"/>
</mappers>
</configuration>✅ resource="db.properties" 表示从 classpath 根路径加载(如 src/main/resources/db.properties)
⚠️ 注意事项
- 不要把密码明文写在代码里
生产环境应使用配置中心(如 apollo、nacos)或 k8s secret,而不是本地.properties。
mybatis 自动集成,无需手动配mybatis-config.xml。
💡 记住:配置外置 = 环境解耦 = 上线不改代码 = devops 友好
xml文件标签的顺序
在 mybatis 的 mybatis-config.xml(主配置文件)中,标签是有严格顺序要求的;而在 mapper xml(如 usermapper.xml)中,除了 <resultmap> 等定义类标签建议放前面外,sql 标签(<select>、<insert> 等)本身没有顺序限制。
[!note] 补充
很多主流框架的 xml 都有顺序要求,因为它们都基于 dtd 或 xsd 定义了严格的结构。如 spring xml 配置(applicationcontext.xml)—— 有顺序!
mybatis 别名
两种用法:
- 单个注册(适合少量类)
<typealias type="com.example.user" alias="user"/>
```
→ mapper 中可用 `resulttype="user"`
2. **包扫描(推荐)**
```xml
<package name="com.example.model"/>
```
→ 自动注册别名(默认类名首字母小写,如 `user`);加 `@alias("user")` 可自定义。
✅ 作用:省去全限定类名,简化 mapper xml。
### **最常用**的 java 类型的**默认别名(type alias)**:
|别名(小写)|对应 java 类型|
|---|---|
|`string`|`java.lang.string`|
|`int` / `_int`|`int`(基本类型)|
|`integer` / `_integer`|`java.lang.integer`|
|`long` / `_long`|`long`|
|`double` / `_double`|`double`|
|`boolean` / `_boolean`|`boolean`|
|`map`|`java.util.hashmap`|
|`list`|`java.util.arraylist`|
|`date`|`java.util.date`|
|`object`|`java.lang.object`|
> ✅ **带下划线(如 `_int`)表示基本类型,不带下划线(如 `int`)实际映射到包装类(`integer`)** —— 这是 mybatis 的约定。
### 示例:
```xml
<select id="getname" resulttype="string">
select name from user where id = #{id}
</select>
<select id="getids" resulttype="_int">
select id from user
</select>💡 记住:开发中优先用包装类别名(如 integer),避免基本类型 null 问题。这些别名全局可用,不用额外配置。
配置文件中最常用和最重要的设置
以下是必须掌握的 6 个核心配置(按优先级排序):
✅ 1.mapunderscoretocamelcase(强烈推荐开启)
<setting name="mapunderscoretocamelcase" value="true"/>
- 作用:自动将数据库下划线字段(如
user_name)映射到 java 驼峰属性(username)。 - 不设的后果:需手动写
<resultmap>,代码爆炸。
✅ 2.logimpl(开发必备)
<setting name="logimpl" value="slf4j"/>
- 作用:指定日志框架(slf4j、log4j 等),方便查看 sql 执行。
- 不设的后果:看不到执行的 sql,调试困难。
✅ 3.cacheenabled(默认 true,通常不动)
<setting name="cacheenabled" value="true"/>
- 作用:开启二级缓存(mapper 级别)。
- 注意:生产环境慎用,容易因缓存不一致引发 bug;多数团队用 redis 替代。
✅ 4.lazyloadingenabled+aggressivelazyloading
<setting name="lazyloadingenabled" value="true"/> <setting name="aggressivelazyloading" value="false"/>
- 作用:开启懒加载(关联对象按需查询)。
aggressivelazyloading=false:只在访问具体属性时才加载(推荐)。
✅ 5.usegeneratedkeys(常在 xml 中局部设,全局也可)
<setting name="usegeneratedkeys" value="true"/>
- 作用:插入后自动回填数据库自增主键(配合
keyproperty)。 - 更常见做法:在
<insert>标签里单独设置(更精准)。
✅ 6.defaultexecutortype(批量操作时注意)
<setting name="defaultexecutortype" value="reuse"/> <!-- 或 batch -->
- 默认是
simple batch:用于大批量插入/更新(配合sqlsession手动提交)。
🚫 避坑建议:
- 不要乱开二级缓存(
cacheenabled虽默认开,但实际常禁用)。 - 务必开
mapunderscoretocamelcase—— 这是 mybatis 最香的功能之一。 - 日志实现(
logimpl)要和项目日志体系一致(spring boot 默认集成好,可不设)。
💡 极简推荐配置(90% 场景够用):
<settings> <setting name="mapunderscoretocamelcase" value="true"/> <setting name="logimpl" value="slf4j"/> </settings>
其他设置按需调整,**先掌握这两个。
mapper(映射器)
三种常用方式,按推荐度排序如下:
✅ 方式一:通过 mapper 接口注册(最推荐)
<mappers> <package name="com.example.mapper"/> </mappers>
- 要求:xml 文件名和接口名一致,且在同一包下(如
usermapper.java+usermapper.xml)。 - 优点:批量注册,简洁;配合 spring boot 自动扫描更高效。
- 适用:主流开发方式(接口 + xml)。
✅ 方式二:通过 xml 文件路径注册
<mappers> <mapper resource="mappers/usermapper.xml"/> </mappers>
- 说明:
resource从 classpath 根路径开始写。 - 适用:纯 mybatis 项目,或 xml 与接口不在同包时。
✅ 方式三:通过 mapper 接口全限定类名注册(不推荐)
<mappers> <mapper class="com.example.mapper.usermapper"/> </mappers>
- 要求:sql 必须用 注解 写在接口里(如
@select),不能搭配 xml(除非 xml 路径也正确且同名)。 - 适用:简单 sql 用注解的场景。
⚠️ 注意:
- 方式一(
<package>)是大厂最常用,尤其配合 maven/gradle 标准目录结构。 - 如果同时用 xml 和接口,必须保证命名和路径匹配,否则报错“找不到 mapper”。
- 在 spring / spring boot 中,通常用
@mapperscan("com.example.mapper"),无需在mybatis-config.xml里配<mappers>。
📌 一句话总结:
优先用
<package>扫描接口包;纯 xml 用resource;注解 mapper 用class。
到此这篇关于mybatis配置文件的文章就介绍到这了,更多相关mybatis配置文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论