MyBatisplus集成步骤
技术集:MySQL Driver
1、数据库
2、引入pom依赖:mysql-connector-java、lombok(非必须)、mybatis-plus-boot-starter
3、application文件配置spring.datasource 数据源(如果需要使用Druid数据源,导入对应坐标)
4、可选:application.yml文件配置 mybatis-plus 参数:如主键自增、表前缀、打印sql日志
# dataSource
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springtest_db?serverTimezone=UTC
username: root
password: root
#禁用banner
main:
banner-mode: off
# mp日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#禁用banner
global-config:
banner: false
db-config:
#id策略
# 1)、 AUTO:自增(代码和数据库都需要指定)
# 2)、 INPUT :用户自己输入
# 3)、 ASSIGN_ID:64位雪花算法(默认)
# 4)、 ASSIGN_UUID:UUID
id-type: assign_id
#表前缀
table-prefix: tbl_
# 逻辑删除字段名
logic-delete-field: deleted
# 逻辑删除字面值:未删除为0
logic-not-delete-value: 0
# 逻辑删除字面值:删除为1
logic-delete-value: 1
5、集成代码生成:引入pom依赖 mybatis-plus-generator、velocity或freemarker
6、自动生成代码,将代码拷贝至相应位置
7、启动类增加 @MapperScan(“com.adolesce.common.mapper”) 注解,扫描mapper接口
8、编写MybatisPlusPageConfig配置类,加载mybatis_plus分页插件(加载这个插件了分页才有效果)
9、测试使用
2.0版本与3.0版本 API不一样
Mybatis概述
- 针对mybatis的增强的工具,特点是:无侵入、轻量级,原则是只做增强,不做修改。
- 针对于单表的CRUD,我们不用自己写SQL,它已经为我们提供好了一切单表所需的API
- 支持 Lambda:编写查询条件无需担心字段写错
- 支持主键自动生成
- 内置分页插件
相关操作

-
根据ID批量删:
int deleteBatchIds(@Param(“coll”) Collection<? extends Serializable> idList); -
根据条件删
int deleteByMap(@Param(“cm”) Map<String, Object> columnMap);
int delete(@Param(“ew”) Wrapper queryWrapper); -
根据ID修改
int updateById(@Param(“et”) T entity); -
根据条件修改
int update(@Param(“et”) T entity, @Param(“ew”) Wrapper updateWrapper); -
根据ID批量查
List selectBatchIds(@Param(“coll”) Collection<? extends Serializable> idList); -
查询结果集条数
Integer selectCount(@Param(“ew”) Wrapper queryWrapper); -
根据条件查
T selectOne(@Param(“ew”) Wrapper queryWrapper);
List selectByMap(@Param(“cm”) Map<String, Object> columnMap);
List selectList(@Param(“ew”) Wrapper queryWrapper);
List<Map<String, Object>> selectMaps(@Param(“ew”) Wrapper queryWrapper);
List selectObjs(@Param(“ew”) Wrapper queryWrapper);
Lombok插件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
- 生成getter和setter方法:@Getter、@Setter
生成toString方法:@ToString
生成equals和hashcode方法:@EqualsAndHashCode - 统一成以上所有:@Data
- 生成空参构造: @NoArgsConstructor
生成全参构造: @AllArgsConstructor
分页功能
原理:在发起SQL查询前,通过mybatis拦截器,对SQL进行增强,根据分页的设置,自动拼接上limit语句。
//设置分页拦截器作为Spring管理的bean
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {}
//3.4.0以前这么配
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
// 3.4.0以后这么配
@Bean
public MybatisPlusInterceptor mpInterceptor(){
//1.定义Mp拦截器
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
//2.添加具体的拦截器
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mpInterceptor;
}
page对象作为查询条件传进去以后,查询结束后会将结果集也封装到page对象中,最后返回这个对象。参数和返回值是同一个对象。
//分页查询
@Test
void testSelectPage(){
//1 创建IPage分页对象,设置分页参数
IPage<User> page=new Page<>(1,3);
//2 执行分页查询
userDao.selectPage(page,null);
//3 获取分页结果
System.out.println("当前页码值:"+page.getCurrent());
System.out.println("每页显示数:"+page.getSize());
System.out.println("总页数:"+page.getPages());
System.out.println("总条数:"+page.getTotal());
System.out.println("当前页数据:"+page.getRecords());
}
DQL编程控制

- 按条件查询
//方式一:按条件查询
QueryWrapper<User> qw=new QueryWrapper<>();
qw.lt("age", 18);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
//方式二:lambda格式按条件查询
QueryWrapper<User> qw = new QueryWrapper<User>();
qw.lambda().lt(User::getAge, 10);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
//方式三:lambda格式按条件查询
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.lt(User::getAge, 10);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
//方式四:lambda格式按条件查询
LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery().lt(User::getAge, 10);
List<User> userList = userDao.selectList(wrapper);
System.out.println(userList);
//方式五:service 进行查询
userService.lambdaQuery().lt(User::getAge, 30).gt(User::getAge, 10).list();
- 组合条件
//并且关系
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//并且关系:10到30岁之间
lqw.lt(User::getAge, 30).gt(User::getAge, 10);
List<User> userList = userDao.selectList(lqw);
//或者关系
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//或者关系:小于10岁或者大于30岁
lqw.lt(User::getAge, 10).or().gt(User::getAge, 30);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
- NULL值处理
多条件查询中,有条件的值为空,通过设置查询条件的第一个参数condition决定是否追加该查询条件
//1、if
//(略)
//2、条件参数控制
Integer minAge=10; //将来有用户传递进来,此处简化成直接定义变量了
Integer maxAge=null; //将来有用户传递进来,此处简化成直接定义变量了
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//参数1:如果表达式为true,那么查询才使用该条件
lqw.gt(minAge!=null,User::getAge, minAge);
lqw.lt(maxAge!=null,User::getAge, maxAge);
List<User> userList = userDao.selectList(lqw);
userList.forEach(System.out::println);
//3、2的链式编程
//参数1:如果表达式为true,那么查询才使用该条件
lqw.gt(minAge!=null,User::getAge, minAge)
.lt(maxAge!=null,User::getAge, maxAge);
查询投影
设置需要进行查询的列,列需要进行聚合
查询结果包含模型类中部分属性
- lqw.select(User::getId, User::getName, User::getAge);
- lqw.select(“id”, “name”, “age”, “tel”);
查询结果包含模型类中未定义的属性
- lqw.select(“count(*) as count, tel”);
lqw.groupBy(“tel”);
本文介绍了MyBatisPlus的集成步骤,包括数据库配置、依赖引入、MapperScan注解等,并详细讲解了其核心功能,如DQL编程控制、分页功能、Lombok插件的使用。MyBatisPlus提供了丰富的操作API,简化了单表的CRUD操作,并支持Lambda表达式和主键自增。同时,通过拦截器实现分页查询,使用Page对象方便地获取查询结果及分页信息。
3466

被折叠的 条评论
为什么被折叠?



