MyBatis-Plus使用

简绍

官网地址:官网直通:https://mp.baomidou.com/

  1. ==MyBatis-Plus==(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。是一个数据库访问层的组件;
  2. 特性:
  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
  • 内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击
  1. SpringBoot中使用步骤
    • POM引入(version自己指定)
  
      com.baomidou
      mybatis-plus-boot-starter
      3.4.3.1
  
  • 表实体:
@TableName(value = "users", autoResultMap = true)
@Data
public class User {
    /**
     * 用户表ID,自增长
     */
    @TableId(type = IdType.AUTO, value = "userid")
    private Long userid;

    /**
     * 用户名
     */
    private String username;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 现住址
     */
    private String address;

    /**
     * 数据创建时间
     */
    @TableField(typeHandler = MyLocalDateTimeTypeHandler.class)
    private LocalDateTime datachange_createtime;
}
  • @TableName注解:
    指定数据库中的表名;
  • @TableId注解
    value: 指定表的主键(如果属性名称和DB中表的列名称一致,可以忽略该属性)
    type: 配置主键生成策略;IdType.AUTO:表示主键为自增长;
  • @TableField主键 (不可与@TableId同时使用)
    value: 标识一个数据库字段对应关系,如果全局设置了下划线和大写的转换配置,则不用单独设置value属性的值
    exist: 默认true,设置为false的时候,表示MP在映射生成sql的时候,不加入(忽略)该字段,从而不会报什么“unkown column” in “field_list”异常;
  1. BaseMapper通用接口
    包含了默认的CRUD操作,创建表的Wrapper时,需要继承BaseMapper
public interface UserWrapper extends BaseMapper {
    /**
     *
     * @param name
     * @return
     */
     User selectByName(@Param("name") String name);

     List selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper userWrapper);
}
  1. UT测试代码:
@SpringBootTest
class MpTestApplicationTests {

    @Autowired
    private UserWrapper userWrapper;

    @Autowired
    private UserServiceImpl userService;

    @Test
    void contextLoads() {
    }

    @Test
    public void insert() {
        User user = new User();
        user.setAddress("测试地址");
        user.setAge(19);
        user.setUsername("李明博");
        user.setDatachange_createtime(LocalDateTime.now());
        int insert = userWrapper.insert(user);
        System.out.println(insert);

    }

    @Test
    public void batchInsert() {
        List list = Lists.newArrayListWithCapacity(2000);
        for (int i = 0; i < 1809; i++) {
            User user = new User();
            user.setAddress("测试地址");
            user.setAge(19);
            user.setUsername("李明博-" + i);
            user.setDatachange_createtime(LocalDateTime.now());
            list.add(user);
        }
        userService.saveBatch(list);
    }

    @Test
    public void query() {
        User user = userWrapper.selectById(12);
        Assert.isTrue(Objects.nonNull(user) && Strings.isNotBlank(user.getUsername()));
    }

    @Test
    public void queryList() {
        Map map = new HashMap<>();
        //map.putIfAbsent("username","李思");
        List users = userWrapper.selectByMap(map);
        Assert.noNullElements(users, "not null");
    }

    @Test
    public void queryListByPaging() {
        //TODO:需要配置MybatisPlusInterceptor,才能获取到总记录数,总页数;
        IPage page = new Page<>();
        page.setCurrent(1);
        page.setSize(10);
        Wrapper queryWrapper = new QueryWrapper().eq("username", "李思");
        IPage userIPage = userWrapper.selectPage(page, queryWrapper);
        long total = userIPage.getTotal();
        System.out.println(String.format("total:%d, pages:%d", total, userIPage.getPages()));

    }

    @Test
    public void testCustomSQL(){
        User user = userWrapper.selectByName("李明博-3");
        Assert.notNull(user);
    }

    @Test
    public void testCustomSQL2(){
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.like("username","李明博");
        List users = userWrapper.selectByMyWrapper(wrapper);
        Assert.isTrue(users != null && users.size() > 0);
    }
}

你可能感兴趣的:(MyBatis-Plus使用)