mybatis_Plus

1.先了解一下Mybatis_Plus:

Mybatis_plus(MP):是一个Mybatis的增强工具,在Mybatis的基础上只做增强不改变,为简化开发,提高效率。(是一个插件)
官网:https://baomidou.com/
作者:Mybatis-Plus是由baomidou组织开发并且开源的,目前组织大约有30万人左右

1.2特性:

    1. 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
  • 等,详细请看mybatis-Plus官网

    支持数据库

    MySQL,Oracle等,目前只用到这两个数据库
    架构
    mybatis_Plus_第1张图片

    2快速开始

    2.1:创建工程

    打开idea
    第一步
    mybatis_Plus_第2张图片
    创建完了点NEXT
    第二步
    mybatis_Plus_第3张图片
    第三步
    mybatis_Plus_第4张图片
    第四步
    mybatis_Plus_第5张图片
    注意:创建springboot工程需要联网,不联网创建不成功,
    创建完了后是这个界面
    mybatis_Plus_第6张图片

    2.2.标准数据层crud功能

    该工程需要使用mysql,在pom.xml文件导入一下依赖包


        
         org.springframework.boot
            spring-boot-starter
        
        
            mysql
            mysql-connector-java
            8.0.30
        
        
            org.projectlombok
            lombok
        
        
            com.alibaba
            druid
            1.1.6
        
        
            junit
            junit
            4.12
            test
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.2
        

导入依赖后:
配置文件application.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp
    username: root
    password: root

再进行写实体类和mapper类
实体:

//getset方法可以使用@Data注解  
  private int id;
//该注解映射数据库的字段
@TableField(value = "user_name")
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
//比如在实体类中有一个属性为remark,但是在数据库中没有这个字段,但是在执行插入操作时给实体类的remark属性赋值了,那么可以通过在实体类的remark属性上添加。false表示存在,true表示存在
@TableField(exist = false)
private Integer remark

mapper:

@Mapper
public interface UserMapper extends BaseMapper {
}
//这里继承了BaseMapper里面的方法

再进行测试:

@Autowired
private UserMapper usermapper;
//查询全部
@Test
void  text01(){
List  userList =usermapper.selectList(null);//这里为空是因为没有条件。
System.out.println(userList);
}
//根据id查询
@Test
void text02(){
User userById =usermapper.selectById(1);
}
//增加数据
@Test
void text03(){
User user =new User();
user.setId(1);
user.setUserName("zhangsan");
user.setpassword("zhangsan");
user.setName("张三");
user.setAge(18);
user.setEmail("[email protected]");
System.out.println(usermapper.insert(user));
}
//修改
@Test
void text04(){
User user = new User();
user.setId(1);
user.setUserName("lisi");
user.setpassword("lisi");
user.setName("李四");
user.setAge(20);
user.setEmail("[email protected]");
System.our.println(usermapper.updateById);
}
//删除
@Test
void text05(){
System.out.println(usermapper.deleteById(1))
}
//分页查询
@Test
void text06(){
Ipage page =new Page(1,2);
usermapper.selectPage(page,null);
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);
}
//新建一个类myconfig
//测试之前需要添加拦截器,不添加拦截器则是查询全部的sql语句,分页查询是原有的基础时上加了一个功能
@Configuration//需要添加一个注解,不然加载不到
public class myconfig{
@Bean
public MybatisPlusInterceptor mp(){
//定义拦截器
    MybatisPlusInterceptor mp =new MybatisPlusInterceptor();
//分页的拦截器是PageinationInnerInterceptor,
    mp.addInnerInterceptor (new PageinationInnerInterceptor());
//将分页拦截器封装到大的拦截器里面
return mp;
    }
}
如果你想看执行的sql语句需要在配置文件配置日志
敲个log就能显示出来了
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.3:DQL查询

2.3.1条件查询

Mybatis-Plus条件查询有三种写法:
建议使用第三种

//第一种:QueryWrapper格式条件查询。是以字符串形式容易出错。
@Test
void text(){
QueryWrapper qw=new QueryWrapper();
//lt是小于。字段,条件
qw.lt("age",18);
System.out.println(userMapper.selectList(qw));
}
//第二种:
lambda格式条件查询
@Test
void text(){
//需要添加泛型
QueryWrapper qw =new QueryWrapper();
qw.lambda().lt(User::getAge,18);
System.out.println(userMapper.selectList(qw));
}
//第三种:
@Test 
void text(){
LambdaQueryWrapper qw = new LambdaQueryWrapper();
//这是查询小于18岁的,
qw.lt(User::getAge,18);
//这是查询并且的关系
qw.lt(User::getAge,18).gt(User::getAge,1);
qw.between(1,18);
//或者关系
qw.lt(User::getAge,18).or().gt(User::getAge,1);
System.out.println(userMapper.selectList(qw))
}
//条件查询null判定
如果第一个条件为空时该怎么办呢?
//新建一个实体类继承User
public class UserQuery extends User{
private Integger age2;
}
//测试
@test
void text(){
UserQuery uq =new UserQuery(){
uq.setAge(10);
uq.setAge2(30);
LambdaQueryWrapper qw = new LambdaQueryWrapper();
//意思:当uq.getAge2为空时不执行“逗号”后面条件
qw.lt(null != uq.getAge2(),User::getAge,uq.getAge2());
qw.gt(null != uq.getAge(),User::getAge,uq.getAge());
System.out.println(userMapper.selectList(qw))
    }
}
//查询投影:指指定的字段
//比如只想看到id和姓名和年龄
@Test
void text(){
LambdaQueryWrapper qw =new LambdaQueryWrapper();
qw.select(User::getid,User::getusername,User::getage);
System.out,println(userMapper.selectList(qw))
}
//显示该字段的重复值的总数
@Test
void text(){
QueryWrapper qw = new QueryWrapper;
        qw.select("count(*) as count,age");
        qw.groupBy("age");
        System.out.println(userMapper.selectMaps(qw));
}

id生成策略

实体:

//AUTO:使用数据库自动生成的id
//NONE:不设置id
//INPUT:需要手动写id
//ASSIGN_ID:雪花算法
@TableId(type =IdType.AUTO)
     private int id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;

你可能感兴趣的:(java)