java SpringBoot(十三)MyBatis Plus 自动配置介绍以及使用MyBatis Plus

本文介绍了如何通过MyBatisPlus快速配置数据库、数据源、自动扫描Mapper接口以及创建服务层,包括Spring Boot整合、配置文件修改、Bean包装类与Dao层实现。重点展示了如何利用MyBatisPlus简化CRUD操作和分页功能的使用。

MyBatis Plus 官方

https://baomidou.com/

1、引入MyBatis Starter  引入Druid当做数据源 引入mysql驱动

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.1</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>
		</dependency>

查看引入的依赖

发现该依赖帮我们引入了 jdbc 跟  mybatis,所以我们在pom删除或者注释掉mybatis跟jdbc的相关包

2、查看MyBatis Plus的自动配置类 发现MyBatis Plus自动配置:

  • MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。mybatis-plus:xxx 就是对mybatis-plus的定制
  • SqlSessionFactory 自动配置好。底层是容器中默认的数据源
  • mapperLocations 自动配置好的。有默认值。classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。  建议以后sql映射文件,放在 mapper下
  • 容器中也自动配置好了 SqlSessionTemplate
  • @Mapper 标注的接口也会被自动扫描;建议直接 @MapperScan("com.atguigu.admin.mapper") 批量扫描就行

3、数据库创建以及数据插入

4、修改配置文件

server:
  port: 8081 #spring 启动端口
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test #mysql 地址
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver #指定驱动

    druid:
      filters: stat,wall,slf4j #指定开启的功能

      stat-view-servlet: #监控页面配置
        enabled: true #开启
        login-username: admin #账号 密码
        login-password: admin
        reset-enable: false
      web-stat-filter: #web 过滤器
        enabled: true #开启
        url-pattern: /* #监控的页面
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' #解除监控的页面
      filter:
        stat:
          slow-sql-millis: 1000 #慢sql阈值 ms
          log-slow-sql: true #日志记录慢sql
          enabled: true #开启
        wall:
          enabled: true #开启防火墙
          config:
            drop-table-allow: false #禁止删除表的操作

mybatis-plus:
  configuration:
    map-underscore-to-camel-case:  #开启驼峰字段转换

5、创建bean包装类

 

因为表中没有userName字段 所以这里加上注解

package com.example.demo.bean;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("user") //指定表名
public class User {

    @TableField(exist = false) //表示不是表中的属性
    private String userName;

    private Long id;
    private String name;
    private Integer age;
    private String email;
}

6、创建Dao层mapper

mapper继承了BaseMapper 

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.bean.User;

public interface UserMapper extends BaseMapper<User> {

}

BaseMapper中有很多基本的crud功能

7、service层实现

service层接口:

package com.example.demo.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.bean.User;

public interface UserService extends IService<User> {
}

继承了IService接口

我们看看IService接口包含了什么功能

也是一些方便的增删改查以及分页等功能,可以说很强大了!

接口实现类:

package com.example.demo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.bean.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}
ServiceImpl帮我们实现了UserService里边的接口,所以我们继承他就不需要实现接口里的所有方法了。

8、使用

package com.example.demo.controller;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.bean.User;
import com.example.demo.service.StudentService;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class SqlConTestController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Autowired
    StudentService studentService;

    @ResponseBody
    @GetMapping("/query")
    public String query(){
        Long count = jdbcTemplate.queryForObject("select count(*) from student", Long.class);
        return count.toString();
    }

    @ResponseBody
    @GetMapping("/query2")
    public String query2(@RequestParam("id") Long id){
        return studentService.getStudentById(id).toString();
    }

    @Autowired
    UserService userService;

    @ResponseBody
    @GetMapping("/query_user")
    public String queryUser(@RequestParam("id") Long id){
//        List<User> userList = userService.list(); //返回查询全部的列表
//        return JSONArray.toJSONString(userList);

//        return userService.getById(id).toString(); //返回单个查询结果
//        userService.removeById(id);//删除某条
        //---  分页需要在容器中注入分页插件
        Page<User> userPage = new Page<>(0, 2); //分页 第一页 大小为两条
        Page<User> page = userService.page(userPage); //分页查询的结果
        long pages = page.getPages();//总页码
        long current = page.getCurrent();//当前页码
        long total = page.getTotal();//总数
        List<User> records = page.getRecords();//查询结果
        Map<String, String> map = new HashMap<>();
        map.put("all pages", String.valueOf( pages));
        map.put("current page", String.valueOf(current));
        map.put("all total", String.valueOf(total));
        map.put("query result", JSONArray.toJSONString(records));
        return map.toString();
    }

}

注意 这里要开启分页功能,还需要注入相关组件:

package com.example.demo.config;


import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisConfig {


    /**
     * MybatisPlusInterceptor
     * @return
     */
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join

        //这是分页拦截器
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setOverflow(true);// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        paginationInnerInterceptor.setMaxLimit(500L);// 设置最大单页限制数量,默认 500 条,-1 不受限制
        mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);

        return mybatisPlusInterceptor;
    }
}

查看结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值