MyBatis Plus的非主流用法

一句话:MyBatis Plus很好用!
基本的使用就不赘述了,移至官网(https://mp.baomidou.com/),在这里我分享点非主流的,颠覆你对MP的认知。

1. 多表关联

思路:多表关联查询类似于对一个视图(View)进行检索,如果数据库中没有定义这个视图的话,可以在Model类中进行定义。
下面的例子定义了2个实体表,1个关联表:

字段名称
id主键ID
group_id组ID
group_name组名

用户

字段名称
id主键ID
user_id用户ID
user_name用户名

组-用户

字段名称
id主键ID
group_id组ID
user_id用户ID

现在如果想生成一个带有组名称和带有用户名称的实体信息的话, 可以这么定义:

/**
 * 定义组和用户的关联关系
 */
@TableName("t_gourp_user_relation r inner join t_group g on r.group_id = g.group_id inner join t_user u on r.user_id = u.user_id")
public class GourpUserRelation {
    /**
     * ID
     */
    @TableId(value = "r.id")
    private String id;
    
    /**
     * 组ID
     */
    @TableField(value = "r.group_id")
    private String groupId;
    
    /**
     * 组名
     */
    @TableField(value = "g.group_name")
    private String groupName;
    
    /**
     * 用户ID
     */
    @TableField(value = "r.user_id")
    private String userId;
    
    /**
     * 用户名
     */
    @TableField(value = "u.user_name")
    private String userName;

这样,再查询的时候就可以对待普通实体一样,利用MP的LambdaQuery进行方便的查询了。

2. 构造自动查询模型

还在写这种Lambda查询么?太LOW了。

public class UserModel {
	
	/**
     * 用户ID
     */
    @TableId(value = "user_id"`在这里插入代码片`)
    private String userId;
   
    /**
     * 用户名
     */
    @TableField(value = "user_name")
    private String userName;
}
Wrappers.<User>lambdaQuery()
  .eq(userId != null, User::getUserId, userId)
  .like(userNameLike != null, User::getUserName, userNameLike)
  .in(userIds != null && !userIds.isEmpty(), User::getUserId, userIds)

改进后的写法:
全局配置查询策略

mybatis-plus:
  global-config:
  	db-config:
  	  selectStrategy: NOT_EMPTY

扩展条件SQL类型

public class SqlConditionEx {
	public static final String IN = "true <foreach open="AND %s in (" separator="," close=")" collection="%s" item="item"> #{item} </foreach>"
}

注:前面加 true是因为当集合为空时,也会返回一个空字符串的查询条件,这样的话这个查询条件的前面就会拼一个AND 进去,所以加个true变成这个样子: ... AND true ...

每个字段固定的查询类型封装到实体扩展类里

public class UserQueryModel extends UserModel {
    
    /**
     * 用户名模糊查询
     */
    @TableField(value = "user_name", select = false, condition = SqlCondition.LIKE)
	private String userNameLike;

    /**
     * 用户ID列表
     */
    @TableField(value = "user_id", select = false, condition = SqlConditionEx.IN)
	private String[] userIds;
}

根据实体扩展类对象自动构造Lambda Query

UserQueryModel userQueryModel = new UserQueryModel(userId, userIds, userNameLike)
Wrappers.<User>lambdaQuery(userQueryModel);

这样的话可以根据Entity自动生成Where SQL语句了,改进前后的写法生成的SQL是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上添加了许多实用的功能,可以极大地提高 MyBatis 的开发效率。 MyBatis Plus 的基本使用方法如下: 1. 引入 MyBatis Plus 的依赖 Maven 依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> ``` 2. 配置 MyBatis Plus 在 Spring Boot 的配置文件中添加 MyBatis Plus 的配置,如下: ```yaml mybatis-plus: # 实体扫描,多个用逗号分隔 typeAliasesPackage: com.example.demo.entity # mapper 扫描,多个用逗号分隔 mapperLocations: classpath:/mapper/*.xml # 配置数据库驱动、连接地址、用户名和密码 global-config: db-config: id-type: auto table-prefix: t_ ``` 3. 编写实体类 ```java @Data @AllArgsConstructor @NoArgsConstructor public class User { private Long id; private String name; private Integer age; private String email; } ``` 4. 编写 Mapper ```java @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 5. 使用 MyBatis Plus 提供的 API ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> getUserList() { return userMapper.selectList(null); } @Override public User getUserById(Long id) { return userMapper.selectById(id); } @Override public boolean addUser(User user) { return userMapper.insert(user) > 0; } @Override public boolean updateUser(User user) { return userMapper.updateById(user) > 0; } @Override public boolean deleteUser(Long id) { return userMapper.deleteById(id) > 0; } } ``` 以上就是 MyBatis Plus 的基本使用方法,通过 MyBatis Plus 提供的 API,我们可以很方便地进行 CRUD 操作。同时,MyBatis Plus 还提供了很多其他的实用功能,例如分页查询、条件查询、乐观锁、自动填充等等,可以根据具体需求进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值