您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# MyBatis-Plus如何实现普通查询
## 一、MyBatis-Plus简介
### 1.1 MyBatis-Plus概述
MyBatis-Plus(简称MP)是MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,简化开发、提高效率。它提供了通用的Mapper和Service封装,通过少量配置即可实现单表大部分CRUD操作。
### 1.2 核心特性
- **无侵入**:只做增强不做改变
- **损耗小**:启动即会自动注入基本CRUD
- **强大的CRUD操作**:内置通用Mapper、通用Service
- **支持Lambda形式调用**:通过Lambda表达式编写查询条件
- **支持主键自动生成**:支持多种主键策略
- **内置分页插件**:无需额外配置
- **内置性能分析插件**:可输出SQL语句及其执行时间
## 二、环境准备
### 2.1 添加依赖
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
@Data
@TableName("user") // 指定表名
public class User {
@TableId(type = IdType.AUTO) // 主键自增
private Long id;
private String name;
private Integer age;
private String email;
}
public interface UserMapper extends BaseMapper<User> {
// 继承BaseMapper即拥有基本CRUD方法
}
// 通过主键查询
User user = userMapper.selectById(1L);
// 批量主键查询
List<User> users = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 3L));
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三") // name = '张三'
.gt("age", 20) // age > 20
.isNotNull("email"); // email is not null
List<User> users = userMapper.selectList(wrapper);
方法名 | 说明 | 示例 |
---|---|---|
eq | 等于 = | eq(“name”, “张三”) |
ne | 不等于 <> | ne(“name”, “张三”) |
gt | 大于 > | gt(“age”, 18) |
ge | 大于等于 >= | ge(“age”, 18) |
lt | 小于 < | lt(“age”, 65) |
le | 小于等于 <= | le(“age”, 65) |
between | BETWEEN 值1 AND 值2 | between(“age”, 18, 30) |
like | LIKE ‘%值%’ | like(“name”, “张”) |
notLike | NOT LIKE ‘%值%’ | notLike(“name”, “张”) |
in | 字段 IN (值1, 值2…) | in(“age”, Arrays.asList(18,20)) |
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getName, "张三")
.gt(User::getAge, 20);
List<User> users = userMapper.selectList(lambdaWrapper);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("age") // 按年龄升序
.orderByDesc("create_time"); // 按创建时间降序
// 配置分页插件
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
// 分页查询
Page<User> page = new Page<>(1, 10); // 当前页,每页大小
Page<User> result = userMapper.selectPage(page, null);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("avg(age) as avgAge", "max(age) as maxAge");
Map<String, Object> map = userMapper.selectMaps(wrapper).get(0);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("age, count(*) as userCount")
.groupBy("age")
.having("count(*) > 1");
List<Map<String, Object>> list = userMapper.selectMaps(wrapper);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.nested(i -> i.eq("name", "张三").or().eq("name", "李四"))
.and(i -> i.gt("age", 20).lt("age", 30));
public List<User> queryUsers(String name, Integer minAge, Integer maxAge) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(name)) {
wrapper.like("name", name);
}
if (minAge != null) {
wrapper.ge("age", minAge);
}
if (maxAge != null) {
wrapper.le("age", maxAge);
}
return userMapper.selectList(wrapper);
}
@Select("select * from user where age > #{age}")
List<User> selectByAge(@Param("age") Integer age);
<!-- UserMapper.xml -->
<select id="selectByName" resultType="User">
SELECT * FROM user WHERE name LIKE CONCAT('%',#{name},'%')
</select>
List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("id", "name", "email");
@Data
public class UserVO {
private Long userId;
private String userName;
}
@Select("select id as userId, name as userName from user")
List<UserVO> selectUserVOs();
# application.properties
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
@TableField(value = "db_column") // 指定数据库字段名
private String myField;
// 实体类添加注解
@TableLogic
private Integer deleted;
// 全局配置
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
MyBatis-Plus提供了丰富而强大的查询功能,从简单的ID查询到复杂的动态条件组合,都能通过简洁的API实现。通过合理使用条件构造器、Lambda表达式和自定义SQL,可以满足绝大多数业务场景的查询需求。同时,MyBatis-Plus的性能优化建议也能帮助开发者编写更高效的查询语句。
在实际开发中,建议: 1. 优先使用Lambda表达式保证类型安全 2. 复杂查询考虑使用自定义SQL 3. 注意SQL注入风险,避免拼接SQL 4. 合理使用缓存提高查询性能
通过掌握MyBatis-Plus的查询功能,可以显著提高开发效率,减少样板代码,让开发者更专注于业务逻辑的实现。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。