Springboot集成Mybatis-Plus

Mybatis-Plus简介

MyBatis-Plus 简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MyBatis Plus特性

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

集成SpringBoot的yml文件的基本配置

mybatis-plus:
    # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
    # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:/mapper/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  #typeAliasesPackage: com.*.entity
  global-config:
      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
      id-type: 3
      db-column-underline: true
      #逻辑删除配置
      logic-delete-value: 1
      logic-not-delete-value: 0
      sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
      #是否动态刷新mapper
      refresh-mapper: true
  configuration:
    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
    map-underscore-to-camel-case: true
    #日志打印
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

创建实体类

@Data
@TableName(value = "tbl_user") 
public class User {
	@TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private String managerId;
    private LocalDateTime createTime;
    @TableField(
        exist = false
    )
    public String endTime;
    @TableLogic
    private int isDelete;
}
  1. 注解@TableName: 表名注解 实体类与数据库表对应,若表名与实体类名相同,则value不需要书写,若不一致,则需要写进表名
  2. 注解@TableId:主键注解 value指定主键名,type指主键生成策略,若实体类的属性名与表中相同,则可以省略
  3. 注解@TableField:字段注解(非主键) value指定字段名,若实体类属性与表名相同,或符合驼峰规则都可省略,当exist = false时,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错
  4. 注解@TableLogic:逻辑删除注解

Mybatis-Plus的CRUD

@Mapper
public interface userMapper extends BaseMapper<User> {
}
1、插入
public void testCommonInsert() {
        User user= new User();
        user.setName("黄药师");
        user.setEmail("hys@qq.com");
        user.setAge(10);
        int result = userMapper.insert(user);
    }
2、更新
public void testCommonUpdate() {
        User user= new User();
        user.setId(1);
        user.setName("wang");
        user.setEmail("wang@qq.com");
        user.setAge(100);
        int result = userMapper.updateById(user);
    }
3、查询
public void testQuery() {
	//1.根据id查询
        User user = userMapper.selectById(1);
        //2.查询(根据ID 批量查询)
        List<Integer> idList = new ArrayList<>();
        for (int i = 1; i < 5; i++) {
            idList.add(i);
        }
        List<User> userlist = userMapper.selectBatchIds(idList);
        //3.查询(根据 columnMap 条件)
        HashMap<String, Object> columnMap = new HashMap<>();
        columnMap.put("age", "10");
        List<User> userLists= userMapper.selectByMap(columnMap);
        //4、查询全部
        List<Employee> users = userMapper.selectList(null);
}
4、删除
	public void testDelete() {
        //1.根据id批量删除
        List<Integer> ids = new ArrayList<>();
        for (int i = 8; i < 31; i++) {
            ids.add(i);
        }
        int result = userMapper.deleteBatchIds(ids);
        
        //2.根据id删除
        int result = userMapper.deleteById(1);

        //3.根据 columnMap 条件,删除记录
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("email", "ouyangfeng@.com");
        columnMap.put("age", "10");
        int result = userMapper.deleteByMap(columnMap);
    }
5、分页查询

分页查询配置:

@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
	public void selectPage(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.ge("age",20);

        //设置当前页和页容量
        Page<User> page = new Page<>(1, 2);

        IPage<User> userIPage = userMapper.selectPage(page, queryWrapper);

        System.out.println("总页数:"+userIPage.getPages());
        System.out.println("总记录数:"+userIPage.getTotal());
        userIPage.getRecords().forEach(System.out::println);
    }
6、模糊查询,in查询,指定列查询
	public void selectByWrapper(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name","雨").lt("age",40);
        // in查询
        // queryWrapper.in("age", Arrays.asList(30,31,34,35));

		// 指定列查询
		// queryWrapper.select("name","age").likeRight("name","王");
        List<User> userList = userMapper.selectList(queryWrapper);
    }
7、实体作为条件构造方法的参数
public void selectWrapper10(){
        User user = new User();
        user.setName("wang");
        user.setAge(32);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

条件构造器 :

setSqlSelect设置 SELECT 查询字段
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
andNewAND 语句,拼接 + AND (字段=值)
orOR 语句,拼接 + OR 字段=值
eq等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
inIN 查询
groupBy分组 GROUP BY
havingHAVING 关键词
existsEXISTS 条件语句
orderBy排序 ORDER BY
isNotNullisNotNull 查询不为空
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
betweenBETWEEN 条件语句
last拼接在最后,例如:last(“LIMIT 1”)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值