• MyBatis-Plus使用(4)-集成SpringBoot


    我这里使用的MyBatis-Plus是当前最新的3.2.0版本,

    1. 引入需要的jar,基础jar包括:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.1.6.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <!--阿里数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.14</version>
        </dependency>
        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!-- MySQL数据库 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
        </dependency>
    </dependencies>

    2. 配置application.yml文件

    spring:
      # 数据库连接池
      datasource:
        druid:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/****?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
          username: ****
          password: ****
          initialSize: 5
          minIdle: 10
          maxActive: 20
          maxWait: 60000
    
    
    # 配置MyBatis-Plus打印SQL日志
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    3. 根据数据库表生成mapper.xml,dao,service,controller,大家可以参照代码生成器文章:MyBatis-Plus使用(1)-概述+代码生成器

    4. 编写启动类

    @MapperScan("com.zh.dao")
    @ComponentScan(value = "com.zh")
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
            System.out.println(" ====== Application Start ======");
        }
    
        /**
         * MyBatisPlus的分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    
    }

    以上三个注解简单讲下作用:

      @MapperScan是mybatis.spring的注解,作用是指定扫描的dao路径,如果你的每个dao类上都有@Mapper注解,则@MapperScan就可以忽略不写了。

      @ComponentScan 是spring注解,用于扫描需要Spring自动装配的文件。

      @SpringBootApplication是启动Spring自动装配。

    5. 测试

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {Application.class})
    public class ServiceTest {
    
        @Autowired
        private UserInfoService userInfoService;
    
        @Test
        public void pageTest() {
            Page<UserInfo> page = new Page<>();
            page.setCurrent(1);
            page.setSize(10);
            page.setOrders(Lists.newArrayList(OrderItem.asc("username")));
    
            QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
            wrapper.eq("gender", 0);
    
            IPage<UserInfo> result = userInfoService.page(page, wrapper);
            System.out.println(JSON.toJSONString(result));
        }
    
    }

      上面的作用是分页查询,根据username排序,查询gender=0的用户信息,生成的SQL如下:

    ==>  Preparing: SELECT COUNT(1) FROM user_info WHERE (gender = ?) 
    ==> Parameters: 0(Integer)
    <==    Columns: COUNT(1)
    <==        Row: 2
    ==>  Preparing: SELECT id, address, gender, username FROM user_info WHERE (gender = ?) ORDER BY username LIMIT ?,? 
    ==> Parameters: 0(Integer), 0(Long), 10(Long)
    <==    Columns: id, address, gender, username
    <==        Row: 1, 花果山, 0, 孙悟空
    <==        Row: 2, 高老庄, 0, 猪八戒
    <==      Total: 2

    注意:我用的MyBatis-Plus是3.2.0版本,已经对分页做了优化,大家如果用以前的版本最好升级到3.2.0版本。

      因为之前的3.1.2版本生成的SQL语句效率是有问题的,主要问题在count语句,他是把用子查询把所有符合条件的数据都查询出来,再count,真要优化还需要重写page方法,SQL如下:

      SELECT COUNT(1) FROM (SELECT id, address, gender, username FROM user_info WHERE (gender = 0)) AS D
    @SpringBootApplication
  • 相关阅读:
    Form表单中不同的按钮进行不同的跳转
    Redis查询&JDBC查询&Hibernate查询方式的效率比较...
    JDBC批处理读取指定Excel中数据到Mysql关系型数据库
    使用JDBC-ODBC读取Excel文件
    Linux公社资料库地址
    用Shell实现俄罗斯方块代码(Tetris.sh)
    Storm累计求和中使用各种分组Grouping
    Storm累计求和Demo并且在集群上运行
    CSS中margin和padding的区别
    使用json-lib-*.jar的JSON解析工具类
  • 原文地址:https://www.cnblogs.com/huanshilang/p/11994783.html
Copyright © 2020-2023  润新知