MyBatis 的通用 Mapper 支持使用 @Column
注解进行字段映射,但需要满足以下条件:
- 项目中已集成 MyBatis 的通用 Mapper(例如 Mapper 插件)。
- 在通用 Mapper 的配置中启用了
@Column
注解支持。
通用 Mapper 会根据实体类中字段的 @Column
注解值来映射数据库表的列名。
使用 @Column
注解进行字段映射的配置和示例
1. 通用 Mapper 配置支持 @Column
注解
确保通用 Mapper 的依赖已经正确引入,并在项目的配置文件中启用 @Column
注解解析。
-
添加 Maven 依赖(以
tk.mybatis
的通用 Mapper 为例):<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>最新版本号</version> </dependency>
-
配置文件中开启
@Column
支持:
通用 Mapper 默认支持@Column
注解,无需额外配置,但确保项目的Mapper
接口已经继承了通用 Mapper 提供的基础接口(如Mapper<T>
或MyMapper<T>
)。
2. 实体类中使用 @Column
注解
在实体类中,使用 @Column
注解指定字段与数据库列的映射关系:
- 示例代码:
假设数据库表user
的字段为id_no
和user_name
,实体类的字段命名为驼峰格式:import jakarta.persistence.Column; // 或 javax.persistence.Column import jakarta.persistence.Table; @Table(name = "user") // 指定表名 public class User { @Column(name = "id_no") // 指定映射到数据库的列名 private String idNo; @Column(name = "user_name") private String userName; // Getter 和 Setter public String getIdNo() { return idNo; } public void setIdNo(String idNo) { this.idNo = idNo; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
3. 使用 Example
动态查询
在通用 Mapper 中,结合 Example
模式,查询时会自动使用 @Column
注解定义的字段映射。
-
示例:
Example example = new Example(User.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("idNo", "12345"); List<User> users = userMapper.selectByExample(example);
-
生成的 SQL:
SELECT id_no, user_name FROM user WHERE id_no = '12345';
4. 结合其他通用 Mapper 方法
使用通用 Mapper 的其他方法(如 select
, update
, delete
等)时,也会自动解析 @Column
注解。
- 示例:
// 根据主键查询 User user = userMapper.selectByPrimaryKey(1); // 插入数据 User newUser = new User(); newUser.setIdNo("67890"); newUser.setUserName("John Doe"); userMapper.insert(newUser); // 更新数据 User updateUser = new User(); updateUser.setIdNo("12345"); updateUser.setUserName("Updated Name"); userMapper.updateByPrimaryKey(updateUser);
注意事项
-
依赖 JPA 注解:
@Column
和@Table
是 JPA 规范中的注解(通常来自javax.persistence
或jakarta.persistence
包),在通用 Mapper 中被支持。- 如果项目中没有 JPA 依赖,需要手动引入对应的 JPA 注解库(例如
jakarta.persistence
)。
-
优先级:
- 如果实体类中同时使用了
@Column
和 MyBatis 的resultMap
/@Results
注解,MyBatis 通常优先解析resultMap
或@Results
的映射规则。 - 如果字段命名规则明确,优先考虑全局驼峰映射(
mapUnderscoreToCamelCase
)。
- 如果实体类中同时使用了
-
与通用 Mapper 结合:
@Column
注解适用于使用通用 Mapper 提供的方法(如selectByExample
、selectByPrimaryKey
等),手写 SQL 则需要手动处理映射。
-
通用 Mapper 版本兼容性:
- 确保使用的通用 Mapper 版本支持
@Column
注解(目前绝大多数版本都已支持)。
- 确保使用的通用 Mapper 版本支持
总结
在 MyBatis 的通用 Mapper 中,可以使用 @Column
注解来实现字段与数据库列的映射。这种方式非常适合以下场景:
- 数据库列名和实体类字段名不一致。
- 希望在实体类中清晰定义映射规则。
- 项目中不使用 JPA 持久化框架,但想利用其注解特性。
通过配置通用 Mapper 并结合 Example
模式,可以高效地管理字段映射关系并完成数据库操作。