Mybatis|Mybatis Plus 中的LambdaQueryWrapper示例详解
前言
之前写过 Mybatis Plus
的基本配置和使用。
Mybatis-Plus 看这一篇就够了当初在进行查询时,虽然没有写硬SQL进行查询数据库操作,但是也不是太友好!
QueryWrapper 为什么说不够友好,客官大姥爷们先看一个例子,假设数据库中,存在一个
user表
,表结构呢相对简单,如下所示:CREATE TABLE user1( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id));
在使用mybatis-plus查询时,只需要编写pojo类,关联映射,如下所示:
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; @Data@NoArgsConstructor@AllArgsConstructor@TableName(value = "https://www.it610.com/article/user1")public class User1 implements Serializable {@TableId(value = "https://www.it610.com/article/id")private Long id; @TableField(value = "https://www.it610.com/article/name")private String userName; @TableField(value = "https://www.it610.com/article/age")private Integer userAge; @TableField(value = "https://www.it610.com/article/email")private String userEmail; }
再编写一个持久层的mapper接口:
import cn.linkpower.pojo.User1; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Repository; @Repositorypublic interface User1Mapper extends BaseMapper{}
就能进行查询操作,如下所示:
import cn.linkpower.mapper.User1Mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; @RunWith(SpringRunner.class)@SpringBootTest@Slf4jpublic class LombokQueryTest {@Autowiredprivate User1Mapper user1Mapper; @Testpublic void test(){QueryWrapperuser1QueryWrapper = new QueryWrapper<>(); user1QueryWrapper.eq("age",20); user1Mapper.selectOne(user1QueryWrapper); }}
文章图片
虽然很方便,但是这里需要注意一个问题:
文章图片
QueryWrapper
中的eq
、in
等操作,第一个参数往往是列名
!
【问题:】
这里就引申出一个问题:如果实际开发中表结构经常改变,岂不是涉及到变动的列名相关代码都需要改!!!!针对上面问题的出现,可以考虑使用
LambdaQueryWrapper
解决!LambdaQueryWrapper 那么现在就
变更表
的列名。新建一个类似的表。表结构如下所示:
CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主键ID', user_name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', user_age INT(11) NULL DEFAULT NULL COMMENT '年龄', user_email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id)); INSERT INTO user (id, user_name, user_age, user_email) VALUE(1, 'Jone', 18, 'test1@baomidou.com'),(2, 'Jack', 20, 'test2@baomidou.com'),(3, 'Tom', 28, 'test3@baomidou.com'),(4, 'Sandy', 21, 'test4@baomidou.com'),(5, 'Billie', 24, 'test5@baomidou.com');
依旧还是编写pojo类,实现映射对应关系:
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; @Data@NoArgsConstructor@AllArgsConstructor@TableName(value = "https://www.it610.com/article/user")public class User2 implements Serializable {@TableId(value = "https://www.it610.com/article/id")private Long id; @TableField(value = "https://www.it610.com/article/user_name")private String userName; @TableField(value = "https://www.it610.com/article/user_age")private Integer userAge; @TableField(value = "https://www.it610.com/article/user_email")private String userEmail; }
编写一个持久层的接口:
import cn.linkpower.pojo.User2; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Repository; @Repositorypublic interface User2Mapper extends BaseMapper{}
编写测试类:
@Autowiredprivate User2Mapper user2Mapper; @Testpublic void test1(){LambdaQueryWrapperqueryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(User2::getUserName,"Jack"); User2 users = user2Mapper.selectOne(queryWrapper); }
测试运行:
文章图片
总结 从上面的
QueryWrapper
和LambdaQueryWrapper
,传递参数信息很容易发现:【Mybatis|Mybatis Plus 中的LambdaQueryWrapper示例详解】这么做的好处就是:LambdaQueryWrapper
的传参支持User2::getUserName
语法!
当表结构发生改变时,如到此这篇关于Mybatis Plus 中的LambdaQueryWrapper的文章就介绍到这了,更多相关Mybatis PlusLambdaQueryWrapper内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!@TableField(value = "https://www.it610.com/article/user_name")
更改为@TableField(value = "https://www.it610.com/article/name")
只要类的成员变量别名不变,就不会影响到程序结果的获取!
推荐阅读
- 程序人生|远程办公中的IT女性(工作量增加3倍,离职率却下降近50%)
- Java毕业设计项目实战篇|Java项目:在线点餐系统(java+Springboot+Maven+mybatis+Vue+mysql+Redis)
- 算法|PyTorch中的squeeze()和unsqueeze()详解与应用案例
- 557.反转字符串中的单词III(JS)——leetCode
- Leetcode|【lc刷题】557 反转字符串中的单词 III_Day04 + 反转小结
- 计算机视觉|论文笔记(第一人称视角视频中的行人轨迹预测)
- springboot+mybatis报错找不到实体类的问题
- react|react 递归遍历四层树结构 遍历分支中的最后一个节点_图解(数据结构中的 6 种树,你心中有数吗(...))
- JavaScript中的observables|JavaScript中的observables 操作符创建实例
- mybatis源码解读-Java中executor包的语句处理功能