概述
推荐:MyBatis Plus汇总
MyBatis-Plus 条件构造器之实体(Entity)查询
首先创建一个数据库表,如下图所示:
然后创建一个Spring Boot项目,pom.xml和配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.kaven</groupId>
<artifactId>mybatis-plus</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
spring:
application:
name: mybatis-plus
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: ITkaven@123
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useSSL=false
server:
port: 8085
logging:
level:
root: warn
com.kaven.mybatisplus.dao: trace
pattern:
console: '%p%m%n'
mybatis-plus:
mapper-locations: classpath:mappers/*.xml
实体类User:
package com.kaven.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@TableName("user")
@Data
public class User {
@TableId
private String id;
@TableField("username")
private String username;
@TableField("password")
private String password;
@TableField("age")
private Integer age;
/**
* 使用 @TableField(exist = false) ,表示该字段在数据库中不存在 ,所以不会插入数据库中
* 使用 transient 、 static 修饰属性也不会插入数据库中
*/
@TableField(exist = false)
private String phone;
}
Mapper接口UserMapper:
package com.kaven.mybatisplus.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kaven.mybatisplus.entity.User;
import org.springframework.stereotype.Component;
@Component
public interface UserMapper extends BaseMapper<User> {}
启动类:
package com.kaven.mybatisplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "com.kaven.mybatisplus.dao")
public class AppRun {
public static void main(String[] args) {
SpringApplication.run(AppRun.class , args);
}
}
@MapperScan(basePackages = "com.kaven.mybatisplus.dao")
这个一定要加上。
我们先在数据库中添加几行数据,方便演示。
MyBatis-Plus 条件构造器还可以通过实体(Entity)进行查询。
- 查询
username
为kaven
,age
等于22
。
只需要创建一个这样的实体实例,再将它传给条件构造器的构造方法即可。
package com.kaven.mybatisplus.dao;
import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kaven.mybatisplus.entity.User;
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 org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperEntityTest {
@Autowired
private UserMapper userMapper;
@Test
public void selectList(){
User user = new User();
user.setUsername("kaven");
user.setAge(22);
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(user);
List<User> userList = userMapper.selectList(userQueryWrapper);
userList.forEach(System.out::println);
}
}
结果如下:
显然是正确的。
我们想象一下应用场景,username
的匹配方式不一定是相等,还可以是包含,age
也可以是大于、小于,当然我们可以将对象属性用于条件构造器中来实现,如:
userQueryWrapper.likeRight("username" , user.getUsername())
.or()
.ge("age" , user.getAge())
.orderByDesc("age")
.orderByAsc("id");
但这可能会很繁琐,如果对象属性比较多,需要这样的查询也很多,这会导致工作量很大;使用MyBatis-Plus可以很简单的解决掉该问题。
这里需要修改一下实体类。
package com.kaven.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.SqlCondition;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@TableName("user")
@Data
public class User {
@TableId
private String id;
@TableField(value = "username" , condition = SqlCondition.LIKE)
private String username;
@TableField("password")
private String password;
@TableField(value = "age" , condition = "%s>#{%s}")
private Integer age;
/**
* 使用 @TableField(exist = false) ,表示该字段在数据库中不存在 ,所以不会插入数据库中
* 使用 transient 、 static 修饰属性也不会插入数据库中
*/
@TableField(exist = false)
private String phone;
}
其实就是在@TableField()
注解中加了condition
参数,就是一个匹配条件,这个参数该怎么赋值,可以参考SqlCondition
这个类。
源码如下:
package com.baomidou.mybatisplus.annotation;
public class SqlCondition {
public static final String EQUAL = "%s=#{%s}";
public static final String NOT_EQUAL = "%s<>#{%s}";
public static final String LIKE = "%s LIKE CONCAT('%%',#{%s},'%%')";
public static final String LIKE_LEFT = "%s LIKE CONCAT('%%',#{%s})";
public static final String LIKE_RIGHT = "%s LIKE CONCAT(#{%s},'%%')";
public SqlCondition() {
}
}
如果这个类没有你想要的condition
参数,你可以模仿它这里面的写法来构造自己的condition
参数,像上面修改的实体类中就有condition = "%s>#{%s}
,它就是表示age
要大于传过来的参数。
package com.kaven.mybatisplus.dao;
import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kaven.mybatisplus.entity.User;
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 java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperEntityTest {
@Autowired
private UserMapper userMapper;
@Test
public void selectList(){
User user = new User();
user.setUsername("k");
user.setAge(22);
// 后面还可以加字符串,表示需要输出的列名
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(user , "username" , "age");
List<User> userList = userMapper.selectList(userQueryWrapper);
userList.forEach(System.out::println);
}
}
结果如下:
显然也是正确的。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!
最后
以上就是香蕉西装为你收集整理的MyBatis-Plus 条件构造器之实体(Entity)查询的全部内容,希望文章能够帮你解决MyBatis-Plus 条件构造器之实体(Entity)查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复