mybatis 小于_Mybatis-plus常见用法总结一

环境搭建

  1. 创建表结构如下
CREATE TABLE `sys_user` (  `id` varchar(64) NOT NULL COMMENT '主键',  `sys_name` varchar(64) DEFAULT NULL COMMENT '姓名',  `age` int(11) DEFAULT NULL COMMENT '年龄',  `email` varchar(64) DEFAULT NULL COMMENT '邮箱',  `manage_id` varchar(64) DEFAULT NULL COMMENT '上级',  `create_time` datetime DEFAULT NULL COMMENT '创建时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户';

常用注解

@TableName:实体类和表名不一样,通过注解指定数据库名指定表名

@TableName("sys_user")public class User {}

@TableId:在mybatis-plus默认主键为id,可以通过该注解指定

@TableName("sys_user")public class User {    /** 主键 */    @TableId    private String user_id;}

@TableField:实体类与数据库中列不一样,指定在数据库中的列

@TableName("sys_user")public class User {    /** 主键 */    @TableId    private String user_id;    /** 姓名 */    @TableField("sys_name")    private String name;}

排除非表字段

如果实体类中封装了不是数据库列字段,使用mybatis-plus操作会报错

@SpringBootTestclass SpringMybatisplusApplicationTests {    @Autowired    private UserMapper userMapper;    @Test    void add() {        User user = new User();        user.setName("王三");        user.setAge(11);        user.setCreateTime(new Date());        user.setEmail("1111@qq.com");        user.setManageId("1");        user.setRemark("王三");        userMapper.insert(user);    }}
e59a36aaa188d8f6f92687b56b099113.png

从结果可以看出,因为remark不是数据字段,当实体类中remark被赋值,在插入时导致报错,解决办法有三种:

  1. 属性上增加为transient(缺点不参与序列化)
private transient String remark;
  1. 属性上定义为static变量
private static String remark;
  1. 在属性上增加@TableField(exist = false)属性
@TableField(exist = false)private String remark;

条件构造器

Mybatis-plus为我们提供了三中条件构造器

  1. QueryWrapper
@Autowiredprivate UserMapper userMapper;@Testpublic void select() {  //    查询姓名为王姓,年龄小于40   QueryWrapper queryWrapper = new QueryWrapper();    queryWrapper.likeRight("name", "王").lt("age", 40);    User user = userMapper.selectOne(queryWrapper);    log.info("查询姓名为王姓,年龄小于40:{}",user);}
  1. LambdaQueryWrapper:可以通过 new QueryWrapper().lambda() 方法获取
@Autowiredprivate UserMapper userMapper;@Testpublic void select2() {    // 查询姓名为王姓,年龄小于40    LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();    queryWrapper.likeRight(User::getName, "王").lt(User::getAge, 40);    User user = userMapper.selectOne(queryWrapper);    log.info("查询姓名为王姓,年龄小于40:{}",user);}
  1. LambdaQueryChainWrapper:链式调用
@Autowiredprivate UserMapper userMapper;@Testpublic void select3() {    // 查询姓名为王姓,年龄小于40    User user = new LambdaQueryChainWrapper(userMapper).likeRight(User::getName, "王").lt(User::getAge, 40).one();    log.info("查询姓名为王姓,年龄小于40:{}",user);}

三者的类关系

176ed8624f684e4a9ca9edfdb9531282.png

但是在项目开发中我们通常用Wrappers,封装了所有所有条件查询器

@Testpublic void select4() {     // 查询姓名为王姓,年龄小于40     User user = userMapper.selectOne(Wrappers.lambdaQuery().likeRight(User::getName, "王").lt(User::getAge, 40));     log.info("查询姓名为王姓,年龄小于40:{}",user);}

不查询出所有列

可以通过select来限定查询哪些列,select提供了三种方法

  1. select(String... sqlSelect)
  2. select(Predicate predicate)
  3. select(Class entityClass, Predicate predicate)

主要分两类

  1. 通过在select方法中添加列名
  2. 通过Predicate判断过滤查询字段,条件构造入参如果不包含 class ,调用时需要wrapper内的entity属性有值

下面我们将分别介绍用法

通过在select方法中添加列名

@Testpublic void select5() {    // 查询姓名为王姓,年龄小于40,只展示id和用户姓名    User user = userMapper.selectOne(Wrappers.lambdaQuery().likeRight(User::getName, "王").lt(User::getAge, 40).select(User::getId,User::getName));    log.info("查询姓名为王姓,年龄小于40,只展示id和用户姓名:{}",user);}
32c5fc0884967c699196b1e023ae0371.png

从结果可以看出获取id和name列数据

通过Predicate判断过滤查询字段

@Testpublic void select6() {    // 查询姓名为王姓,年龄小于40,只展示id和用户姓名    User user = userMapper.selectOne(Wrappers.lambdaQuery().likeRight(User::getName, "王").lt(User::getAge, 40)            .select(User.class, info ->  info.getColumn().equals("age")));    log.info("查询姓名为王姓,年龄小于40,只展示id和用户姓名:{}",user);}
235a9a5671bdba9e6e8c1aa14930dafd.png

从结果可以看出,获取id和age列的数据

是否将条件增加到查询条件中

通过condition条件判断是否将条件增加到查询条件中

@Testpublic void select8() {    // 查询姓名为王姓,如果年龄不为空时年龄小于40的数据    String firstName = "王";    Integer age = null;    User user = userMapper.selectOne(Wrappers.lambdaQuery().likeRight(User::getName, firstName).lt(age != null, User::getAge, age));    log.info("查询姓名为王姓,如果年龄不为空时年龄小于40的数据:{}",user);}
fd37f66ae801dc378321a1774f1c9de8.png

从结果可以看出age为null并没有加入到查询条件中

条件构造器传入对象

@Testpublic void select9() {    // 查询姓名为王五的数据    User user = new User();    user.setName("王五");    User repUser = userMapper.selectOne(Wrappers.lambdaQuery(user));    log.info("查询姓名为王五的数据:{}",repUser);}
5716085725750e7c564f2ff30941e128.png

创建对象User,设置name为王五,从结果看该属性作为查询条件

当我们查询条件不是等号,是其他可以通过在实体类属性上增加@TableField,在注解中增加具体操作,如下所示,采用like查询条件

@TableField(value = "name",condition = SqlCondition.LIKE)private String name;

如果有哪里写得不对的,还请各位小友指正,只有不断试错,才能慢慢提高。如果你觉得对你有帮助,请点赞+关注,谢谢!!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-PlusMyBatis的增强工具,提供了很多实用的功能,其中包括对关联查询的支持。MyBatis-Plus的关联查询主要通过Wrapper对象来实现,下面就来详细介绍一下MyBatis-Plus的关联查询的使用方法。 1. 基本概念 在使用MyBatis-Plus的关联查询之前,我们需要先了解一些基本概念。 1.1. 实体类 实体类是指与数据库表对应的Java类。在使用MyBatis-Plus的关联查询时,我们需要定义实体类,并在实体类中定义与其他表关联的属性。 1.2. Wrapper对象 Wrapper对象是MyBatis-Plus中用于构建SQL语句的查询条件对象,可以通过Wrapper对象实现关联查询。 1.3. QueryWrapper QueryWrapperWrapper的一种实现,用于构建查询条件。它可以通过链式调用的方式来构建查询条件,支持多种查询方式,包括等于、不等于、大于、小于、模糊查询等。 1.4. LambdaQueryWrapper LambdaQueryWrapperQueryWrapper的一种升级版,它支持使用Lambda表达式来构建查询条件,使用起来更加简单、方便。 2. 关联查询的使用方法 了解了基本概念之后,下面就来介绍一下MyBatis-Plus的关联查询的使用方法。 2.1. 一对一关联查询 一对一关联查询是指两张表之间的关联关系是一对一的,例如用户表和身份证表之间的关联关系。 在MyBatis-Plus中,一对一关联查询可以通过selectJoin方法来实现。例如,查询用户表和身份证表中的所有数据,可以使用如下代码: ``` List<User> userList = userMapper.selectJoin(null); ``` 其中,userMapper是MyBatis的Mapper接口,User是用户表对应的实体类。在selectJoin方法中传入的参数为null,表示查询所有数据。 如果需要在查询时指定查询条件,可以通过QueryWrapper或LambdaQueryWrapper来构建查询条件,例如: ``` QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("user_name", "张三"); List<User> userList = userMapper.selectJoin(wrapper); ``` 上述代码中,使用QueryWrapper构建了一个查询条件,查询条件为用户名为“张三”,然后调用selectJoin方法来查询数据。 2.2. 一对多关联查询 一对多关联查询是指两张表之间的关联关系是一对多的,例如用户表和订单表之间的关联关系。 在MyBatis-Plus中,一对多关联查询可以通过selectList方法来实现。例如,查询用户表和订单表中的所有数据,可以使用如下代码: ``` List<User> userList = userMapper.selectList(null); for (User user : userList) { List<Order> orderList = user.getOrderList(); // 处理订单数据 } ``` 在查询用户表数据时,通过getUserList方法获取到了用户对应的订单数据,然后可以对订单数据进行处理。 如果需要在查询时指定查询条件,可以通过QueryWrapper或LambdaQueryWrapper来构建查询条件,例如: ``` QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("user_name", "张三"); List<User> userList = userMapper.selectList(wrapper); ``` 上述代码中,使用QueryWrapper构建了一个查询条件,查询条件为用户名为“张三”,然后调用selectList方法来查询数据。 2.3. 多对多关联查询 多对多关联查询是指两张表之间的关联关系是多对多的,例如学生表和课程表之间的关联关系。 在MyBatis-Plus中,多对多关联查询需要通过中间表来实现。假设学生表和课程表之间的关联关系是通过中间表“学生课程表”来实现的,那么学生表和课程表中的所有数据可以使用如下代码: ``` List<Student> studentList = studentMapper.selectList(null); for (Student student : studentList) { List<Course> courseList = student.getCourseList(); // 处理课程数据 } ``` 在查询学生表数据时,通过getCourseList方法获取到了学生所选的课程数据,然后可以对课程数据进行处理。 如果需要在查询时指定查询条件,可以通过QueryWrapper或LambdaQueryWrapper来构建查询条件,例如: ``` QueryWrapper<Student> wrapper = new QueryWrapper<>(); wrapper.eq("student_name", "张三"); List<Student> studentList = studentMapper.selectList(wrapper); ``` 上述代码中,使用QueryWrapper构建了一个查询条件,查询条件为学生名为“张三”,然后调用selectList方法来查询数据。 3. 总结 MyBatis-Plus的关联查询主要通过Wrapper对象来实现,支持一对一、一对多和多对多关联查询。在使用关联查询时,需要定义实体类,并在实体类中定义与其他表关联的属性。同时,可以通过QueryWrapper或LambdaQueryWrapper来构建查询条件,在查询时指定查询条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值