mybatisplus 注解不属于表列
时间: 2023-08-24 15:07:43 浏览: 156
MyBatis-Plus的注解不属于表列,而是用于配置实体类与数据库表之间的映射关系。常用的注解有:
- @TableName:指定实体类对应的数据库表名。
- @TableId:指定实体类属性对应的主键列。
- @TableField:指定实体类属性对应的数据库列。
- @Version:用于乐观锁实现,指定实体类属性对应的版本号列。
- @EnumValue:用于枚举类型,指定实体类属性对应的数据库列。
这些注解可以简化开发者对于实体类与数据库表的映射配置,提高开发效率。
相关问题
mybatisplus指定实体类属性不属于数据库列
MyBatis-Plus中提供了`@TableField`注解用于指定实体类属性不属于数据库表的列。常用的属性有:
- `exist`:指定该属性是否属于数据库表的列,默认为`true`。
- `value`:指定该属性对应的数据库表的列名,如果不指定则默认使用属性名作为列名。
- `select`:指定是否在SELECT语句中包含该属性,默认为`true`。
- `insert`:指定是否在INSERT语句中包含该属性,默认为`true`。
- `update`:指定是否在UPDATE语句中包含该属性,默认为`true`。
- `where`:指定该属性是否作为查询条件,默认为`false`。
举个例子,如果一个实体类中有一个属性`createTime`,但是在数据库表中并没有对应的列,我们可以使用`@TableField(exist = false)`注解来指定该属性不属于数据库表的列,如下所示:
```java
public class User {
private Long id;
private String name;
private Date createTime;
// createTime不属于数据库表的列,使用@TableField(exist = false)注解指定
@TableField(exist = false)
private String otherInfo;
// 省略getter和setter方法
}
```
这样,在进行MyBatis-Plus的CRUD操作时,就不会把`createTime`作为数据库表的列进行处理。
mybatisplus的@select注解 连表查询
### 使用 MyBatis-Plus 的 `@Select` 注解实现连表查询
MyBatis-Plus 是一种强大的持久化框架,它简化了数据库操作并提供了灵活的 SQL 构造方式。通过 `@Select` 注解可以直接定义复杂的 SQL 查询逻辑,包括联表查询。
以下是基于提供的引用内容以及 MyBatis-Plus 官方文档的知识构建的一个具体例子:
#### 示例代码
假设存在两个表:`table1` 和 `table2`,它们之间有一对多的关系(即 `table1.id` 对应于 `table2.table1_id`)。可以通过如下方式进行联表查询:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface TableMapper {
@Select("SELECT a.id AS table1_id, a.name AS table1_name, b.age AS table2_age " +
"FROM table1 ${ew.tablesAlias('a')} " +
"INNER JOIN table2 ${ew.tablesAlias('b')} ON a.id = b.table1_id " +
"${ew.whereSql()} " +
"ORDER BY ${ew.orderByColumns()} " +
"LIMIT ${ew.limit()}")
List<Object> getJoinList(@Param(Constants.WRAPPER) QueryWrapper<?> ew);
}
```
上述代码实现了以下几个功能:
- **动态 SQL**:利用 `${ew}` 动态替换子句来支持条件过滤、分页等功能[^1]。
- **别名管理**:通过 `${ew.tablesAlias('aliasName')}` 方法为表指定别名。
- **字段映射**:在 SELECT 子句中显式指定了返回列及其对应的别名。
#### 参数说明
- `QueryWrapper<?> ew`: 这是一个通用的封装对象,用于传递动态 SQL 条件参数。
- `${ew.*}`: 表达式的占位符会根据传入的实际值被解析成具体的 SQL 片段。
---
如果需要进一步增强灵活性,比如针对特定字段使用模糊匹配而非默认的精确匹配,则可以借助 `@TableField` 注解完成定制化的字段行为配置[^2]。例如,在实体类中声明某个字段采用 LIKE 方式进行拼接:
```java
@Data
public class User {
private Long id;
@TableField(condition = SqlCondition.LIKE)
private String name;
private Integer age;
private String email;
private Long managerId;
private LocalDateTime createTime;
}
```
这样当此字段参与 WHERE 条件时,默认生成的是类似于 `"WHERE name LIKE '%value%'"` 的 SQL 语句。
---
对于更复杂的应用场景,还可以考虑引入 Hibernate 命名查询机制作为补充方案[^3]。尽管 Hibernate 并不属于 MyBatis 生态圈的一部分,但在实际项目开发过程中两者经常互为替代品或者混合使用。因此熟悉命名查询的概念有助于理解跨框架的最佳实践模式。
---
###
阅读全文
相关推荐














