学习 MyBatis-Plus 笔记

SpringBoot整合MyBatis-Plus

一、 依赖

 
     com.baomidou
     mybatis-plus-boot-starter
     3.5.1

二、 实体类注解

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

六、XML自定义SQL操作

        操作步骤

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

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

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

// 第一步:
// 模拟查询参数 controller层
        Map map = new HashMap();
        map.put("列名","值");
        // 创建Page 分页工具类
        Page<实体类> page = new Page<实体类>(页数,条数);
        // 调用mapper的方法,返回值是Page分页工具类
        Page<实体类> pageData = classinfoMapper.XMLSQLAndPage(page,map);
		// 分页的数据
        List data = pageData.getRecords();
        // 总条数
        long total = pageData.getTotal();
        // 页数
        long pages = pageData.getPages();
        // 当前页数
        long current = pageData.getCurrent();
        // Map 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 map);
// 第三步:
// 1.在 resources 文件夹下创建 mapper 文件夹
// 2.在文件夹中创建 xxxMapper.xml 文件
// 3.编写多表联查SQL语句






七、逻辑删除和自动填充

        逻辑删除

    // 逻辑删除操作步骤
    // 第一步:修改表结构添加 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.

你可能感兴趣的:(Java,SpringBoot,java,架构)