初识Mybatis-plus

Mybatis愿景:

我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

与Mybatis的区别

        自定义mapper接口,继承BaseMapper<T>

        明确指定泛型:当前操作类的实体对象

        不需要我们编写mapper.xml,sql 语句的拼接,MyBatis-plus框架帮我们写。

使用(基于Spring boot)

  1. 建库建表
  2. 引入依赖 :Spring boot 相关依赖 ,MySQL驱动,连接池,集成Mybatis-plus
     <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <!--SpringBoot版本-->
            <version>2.4.3</version>
            <relativePath/>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.17</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.22</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.16</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
  3. 编写application.properties
  4. 创建实体类
    @Setter
    @Getter
    @ToString
    public class Employee {
        private Long id;
        private String name;
        private String password;
        private String email;
        private int age;
        private int admin;
        private Long deptId;
    }
  5. 创建mapper接口并继承BaseMapper
    public interface EmployeeMapper extends BaseMapper<Employee> {
    }
  6. 编写测试类
    @SpringBootTest
    public class CRUDTest {
        @Autowired
        private EmployeeMapper employeeMapper;
        @Test
        public void testSave(){
            Employee employee = new Employee();
            employee.setAdmin(1);
            employee.setAge(18);
            employee.setDeptId(1L);
            employee.setEmail("rjylf@126.com");
            employee.setName("rjylf");
            employee.setPassword("111");
            employeeMapper.insert(employee);
        }
        @Test
        public void testUpdate(){
            Employee employee = new Employee();
            employee.setId(1327139013313564673L);
            employee.setAdmin(1);
            employee.setAge(18);
            employee.setDeptId(1L);
            employee.setEmail("rjylf@126.com");
            employee.setName("rjlyf");
            employee.setPassword("111");
            employeeMapper.updateById(employee);
        }
        @Test
        public void testDelete(){
            employeeMapper.deleteById(1327139013313564673L);
        }
        @Test
        public void testGet(){
            System.out.println(employeeMapper.selectById(1327139013313564673L));
        }
        @Test
        public void testList(){
            System.out.println(employeeMapper.selectList(null));
        }
    }

思考

(一)EmployeeMapper接口中没有定义CRUD方法,为什么测试类中就可以使用CRUD方法

        原因:EmployeeMapper接口继承BaseMapper父接口

(二)源码中没有编写CRUD SQL ,为什么可以通过Mapper接口执行 CRUD 逻辑呢?

        原因:mysql执行必须编写sql语句,但源码中没有sql语句 -> SQL语句已经帮写好了

(三)mybatis-plus 框架,怎么知道执行sql,怎么拼写sql

        解析:SELECT  id,name,email,age FROM employee

                SQL语句的核心数据是什么:

                表名:employee     列名:id,name,email,age

        分析:结合ORM思想

                O:对象 ----- 实体类 :employee

                R:关系 ----- 表:employee

                M:映射 ----- 一 一对应: 实体类----->表

                                                        属性---------->列名

        关键所在:只需要获取到当前接口操作的实体类对象,通过内省(反射)解析出类名,属性名来获取操作。

        mybatis 会对属性值不为null的属性进行拼接

new Employee(1L,"人间一两风",null,null)
UPDATE employee  SET name=? WHERE id=?

 mybatis-plus 只是对 mybatis 进行增强,底层最终的操作还是用 mybatis 来完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值