学习 MyBatis-Plus 笔记

本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括添加依赖、实体类注解、DAO层配置、YML文件设置、Controller层操作以及XML自定义SQL。还涉及到逻辑删除、自动填充、分页查询等功能的实现,提供了完整的步骤和示例代码。
摘要由CSDN通过智能技术生成

SpringBoot整合MyBatis-Plus

一、 依赖

 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.5.1</version>
</dependency>

二、 实体类注解

        实体类对应表名:@TableName("表名")或@TableName(value = "表名")

​         主键自增字段ID:@TableId(type = IdType.AUTO) 放在id上

        ​ 非主键id字段@TableeField("字段名")

三、dao层

//Mapper接口继承 
extends BaseMapper<实体类>

四、配置application.yml文件

        配置输出完整SQL日志

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

五、controller层

// 查询
	1.根据id查询.selectById
 	2.根据ids查询多条  List<Integer> ids = Arrays.asList(1,2); return classinfoMapper.selectBatchIds(ids);
	3.多参数查询.selectByMap(map); 使用map进行传参
	4.模糊查询
        // 创建条件构造器
         QueryWrapper<Classinfo> queryWrapper = new QueryWrapper<Classinfo>();
		queryWrapper.eq("列名", 值).like("列名", "值");
		// 只能返回一条数据,否则报错
	5.时间区间查询
         // 创建条件构造器
         QueryWrapper<Classinfo> queryWrapper = new QueryWrapper<Classinfo>();
		queryWrapper.gt("起始时间列名","值").lt("起始时间列名","值");
		Map<String,Object> results = new HashMap<String,Object>();
		// 如果传null则查询所有
		List<对象> data = xxxMapper.selectList(queryWrapper);
		// 查询数据条数
		Long count = xxxMapper.selectCount(queryWrapper);
		results.put("data",data);
		results.put("count",count);
		return results;
	6.子查询
         // 创建条件构造器
         QueryWrapper<Classinfo> queryWrapper = new QueryWrapper<Classinfo>();
		queryWrapper.inSql("子查询需要查询出的字段","SQL语句,查询出的是想要的字段,而不是 * ")
         return xxxMapper.selectMaps(queryWrapper);
	7.排序---倒序
         // 创建条件构造器
         QueryWrapper<Classinfo> queryWrapper = new QueryWrapper<Classinfo>();
		queryWrapper.orderByDesc("倒序列名");
		return xxxMapper.selectObjs(wrapper);
	8.分页  使用时间区间进行查询分页 先引入 八、分页查询的类,放在config包下
         // 创建条件构造器
         QueryWrapper<Classinfo> queryWrapper = new QueryWrapper<Classinfo>();
		// 传入区间参数(列,值)
		queryWrapper.gt("起始时间列名","值").lt("起始时间列名","值");
		// 创建 分页对象
		Page<Classinfo> page = new Page<Classinfo>(起始页数,起始条数);
		// 传参调用查分页方法
		xxxMapper.selectPage(page, queryWrapper);
		// 分页的数据
        List<实体类> data = page.getRecords();
		// 条数
        long total = page.getTotal();
		// 页数
        long pages = page.getPages();
        // 当前页数
        long current = page.getCurrent();
		Map<String,Object> map = new HashMap<>();
            map.put("data",data);
            map.put("total",total);
            map.put("pages",pages);
            map.put("current",current);
        return map;
// 新增
	1.插入一条数据.insert
// 删除
	1.根据id删除一条数据delete
	2.批量删除deleteByIds  List<Integer> ids = 	Arrays.asList(4,5,6);  int i = classinfoMapper.deleteBatchIds(ids);
	3.根据条件删除deleteByMap  传参@RequestParam 	Map<String,Object> map
// 修改
	1.根据id更新一条数据 .updateById

六、XML自定义SQL操作

        操作步骤

                第一步、在控制层调用mapper接口方法,传入分页和多条件查询参数。

​                第二步、在持久层mapper接口中创建方法,传入分页工具Page和多条件查询参数。

​                第三步、在 src/main/resources/mapper 中创建mapper.xml文件,编写SQL。

// 第一步:
// 模拟查询参数 controller层
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("列名","值");
        // 创建Page 分页工具类
        Page<实体类> page = new Page<实体类>(页数,条数);
        // 调用mapper的方法,返回值是Page分页工具类
        Page<实体类> pageData = classinfoMapper.XMLSQLAndPage(page,map);
		// 分页的数据
        List<Classinfo> data = pageData.getRecords();
        // 总条数
        long total = pageData.getTotal();
        // 页数
        long pages = pageData.getPages();
        // 当前页数
        long current = pageData.getCurrent();
        // Map<String,Object> map = new HashMap<>();
        map.put("data",data);
        map.put("total",total);
        map.put("pages",pages);
        map.put("current",current);
        return map;
// 第二步:
// dao层   点击报红的XMLSQLAndPage去dao层的mapper接口创建方法
	Page<实体类> XMLSQLAndPage(Page<实体类> page, @Param("map") Map<String, Object> map);
// 第三步:
// 1.在 resources 文件夹下创建 mapper 文件夹
// 2.在文件夹中创建 xxxMapper.xml 文件
// 3.编写多表联查SQL语句
<!-- mapper头部文件 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="">

</mapper>

七、逻辑删除和自动填充

        逻辑删除

    // 逻辑删除操作步骤
    // 第一步:修改表结构添加 deleted 字段 默认值 0 表示未删除
    // 第二步:在实体类中添加deleted属性
    // 第三步:给实体类设 @TableLogic 注解
    // 第四步:测试删除和查询操作
    // 在yml文件中修改默认值
# 可配置自定义配置文件 global-config
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-field: 字段
      logic-delete-value: 删除
      logic-not-delete-value: 未删除

        自动填充

// 第一步:使用注解,标记需要填充的字段
    @TableField(fill = FieldFill.标记)
    // 标记分为:DEFAULT:默认不处理
    // INSERT:插入填充字段
    // UPDATE:更新填充字段
    // INSERT_UPDATE:插入和更新填充字段
// 第二步:自定义策略实现类MyMetaObjectHandler
	// 1.实现MetaObjectHandler
	// 2.重写方法
	// 类上注解
		@Slf4j
		@Component
	// 方法内填充
	this.setFieldValByName("字段",填充数据,metaObject);
// 第三步、测试新增和修改

八、分页查询,放在config包下

@Configuration
@MapperScan("扫描你的mapper接口包")
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }

    // @Bean
    // public ConfigurationCustomizer configurationCustomizer() {
    //    return configuration -> configuration.setUseDeprecatedExecutor(false);
    // }
}

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦逝忘尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值