2.springboot整合MyBatis-Plus及其原理

目录:

1. springboot自动装配原理

2. springboot整合mbatis-plus


1. springboot自动装配原理

1.1 springboot包扫描原理

     包建议大家放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。

     主函数在运行时会加载一个使用@SpringBootApplication标记的类。而该注解是一个复合注解,包含@EnableAutoConfiguration,这个注解开启了自动配置功能。 该注解也是一个复合注解,包含@AutoConfigurationPackage。 该注解中包含@Import({Registrar.class}),这个注解引入Registrar类。该类中存在registerBeanDefinitions,可以获取扫描的包名。

     如果需要人为修改扫描包的名称则需要在主类上@ComponentScan(basepackage={"包名"})

1.2 springboot自动装配原理

    主函数在运行会执行一个使用@SpringbootApplication注解的类,该注解是一个复合注解,包含@EnableAutoConfiguration, 该注解开启自动配置功能,该注解也是一个复合注解,包含@Import() 该注解需要导入AutoConfigurationImportSelector类。 该类会加载很多自动装配类,而这些自动装配类完成相应的自动装配原理。

2. springboot整合mybatis-plus

2.1 mybatis-plus概述

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

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

   注意:不能替代mybatis ,以后对于单表操作的所有功能,都可以使用mp完成。但是链表操作的功能还得要校验mybatis.  


2.2 如何使用mp

1.创建表并加入数据

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

2.创建一个springboot工程并引入相关的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ykq</groupId>
    <artifactId>qy163-springboot03</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>qy163-springboot03</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.配置数据源

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql:///company

4.创建实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

5.创建一个dao接口

public interface UserMapper extends BaseMapper<User> {
}

6.为接口生成代理实现类

@SpringBootApplication
@MapperScan(basePackages = "com.ykq.dao")
public class Qy163Springboot03Application {
    public static void main(String[] args) {
        SpringApplication.run(Qy163Springboot03Application.class, args);
    }

}

7.测试

@SpringBootTest
class Qy163Springboot03ApplicationTests {

    @Autowired
    private UserMapper userMapper;
    @Test
    void testFindById() {
        User user = userMapper.selectById(6);
        System.out.println(user);
    }

}

总结: 1.引入mp依赖 2. 创建数据源 3. 实体类 4.dao并继承BaseMapper<>接口 5.接口扫描


2.3 使用mp完成条件查询

@Test
    public void testFind(){
        //select * from user where uname like '%乔%' or age 19 and 25;
        //Wrapper<T> queryWrapper:查询对象。 条件接口。QUeryWrapper 查询条件类  UpdateWrapper更新条件类  LambdaWrapper 使用lambda表达式
        QueryWrapper<User> wrapper=new QueryWrapper<>(); //
        wrapper.likeRight("uname","_乔");
        wrapper.or();
        wrapper.between("age",19,25);
        wrapper.orderByDesc("age");
        wrapper.select("uname","age");
        List<User> list = userMapper.selectList(wrapper);
        list.forEach(System.out::println);
    }

分页查询:

注意:mp分页需要加分页拦截器,如下图

@Configuration
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }


}
    @Test
    public void testPage(){
        Page<User> page=new Page<>(1,3); //current:当前第几页  size:每页显示条数
        userMapper.selectPage(page,null); //把查询分页的结果封装到page对象中
        System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
        System.out.println("获取总页数"+page.getPages());//获取当前页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
    }

2.4 联表使用mp的分页对象

//联表操作--使用mp中自动的分页。
    @Autowired
    private EmpMapper empMapper;
    @Test
    public void testPage2(){
        Page<Emp> page=new Page<>(1,3);
        QueryWrapper<Emp> wrapper=new QueryWrapper<>();
        wrapper.gt("sal",1000);
         empMapper.findPage(page,wrapper);
        System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
        System.out.println("获取总页数"+page.getPages());//获取当前页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值