loading...

SpringBoot集成mybatis-plus

myBatis-plus文档: https://mp.baomidou.com/guide/annotation.html#tablefield

1、创建数据库表

DROP TABLE IF EXISTS test_user;

CREATE TABLE test_user
(
	id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);
INSERT INTO test_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、引入mybatis-plus依赖包

<dependencies>
  <!--druid数据源-->
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.8</version>
  </dependency>
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.51</version>
  </dependency>
  <!--mysql-->
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
  </dependency>

  <!--mybatis-plus 依赖-->
  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.2.0</version>
  </dependency>
  <!-- mybatis plus 代码生成器依赖 -->
  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generator</artifactId>
      <version>3.2.0</version>
  </dependency>
  <!-- 代码生成器模板 -->
  <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.29</version>
  </dependency>

  <!-- 工具包 -->
  <!-- lombok -->
  <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
  </dependency>
  <!-- 日志 -->
  <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
  </dependency>
  <!-- junit -->
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
  </dependency>
</dependencies>

3、创建一个实体类

package com.example.mybatisplus.bean;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.*;
import lombok.experimental.Accessors;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) //lombok的实验类特性
@Builder
@TableName("test_user") //指定对应的数据库表
public class User {
    @TableId(value = "id", type = IdType.AUTO) //id自增
    private Integer id;
    @TableField(value = "name") //指定对应的数据库表字段
    private String name;

    private Integer age;

    private String email;
    @TableField(exist = false) //不映射数据库表中的任何字段
    private String like;
}

4、创建一个继承BaseMapper的mapper

  • BaseMapper提供了各种CRUD方法,传入一个泛型
package com.example.mybatisplus.mapper;

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

//使用mybatis-plus增强接口
public interface UserMapper extends BaseMapper<User> {

}

5、在Application入口引入mapper

package com.example.mybatisplus;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan(value = "com.example.mybatisplus.mapper")
@SpringBootApplication
public class MybatisplusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisplusApplication.class, args);
    }
}

6、controller控制器

package com.example.mybatisplus.controller;

import com.example.mybatisplus.bean.User;
import com.example.mybatisplus.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
public class UserController {
    @Autowired
    UserService userService;

    //增加
    @PostMapping("/insertUser")
    public Integer insertUser(@RequestBody User user){
        return userService.insertUser(user);
    }
    //删除
    @GetMapping("/delUser/{id}")
    public Integer delUser(@PathVariable("id") Integer id){
        return userService.delUser(id);
    }
    //修改一条
    @PostMapping("/updateUserById")
    public Integer updateUser(@RequestBody User user){
        return userService.updateUser(user);
    }
    //批量修改
    @PostMapping("/updateUserAll")
    public Integer updateUser2(@RequestBody User user){
        return userService.updateUser2(user);
    }
    //查询所有
    @GetMapping("/getUsers")
    public void findAllUser(){
        List<User> users = userService.getUsers();
        users.forEach(user -> System.out.println(user));
    }
    //查询一条
    @GetMapping("/getUser/{id}")
    public User getUser(@PathVariable("id") Integer id){
        return userService.getUser(id);
    }
    //分页查询
    @GetMapping("selectUserPage")
    public UserVo selectUserPage(UserVo userVo){
        return userService.selectUserPage(userVo.getCurrent(), userVo.getSize());
    }
}

7、service层

package com.example.mybatisplus.service;

import com.example.mybatisplus.bean.User;
import java.util.List;

public interface UserService {
    
    public Integer insertUser(User user);

    public Integer delUser(Integer id);

    public Integer updateUser(User user);

    public Integer updateUser2(User user);

    public User getUser(Integer id);

    public List<User> getUsers();

    public UserVo selectUserPage(Integer current, Integer size);
}

8、service/impl层

package com.example.mybatisplus.service.impl;

import com.example.mybatisplus.bean.User;
import com.example.mybatisplus.mapper.UserMapper;
import com.example.mybatisplus.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    protected UserMapper userMapper;

    @Override
    public Integer updateUser(User user) {
        return userMapper.updateById(user);
    }
    @Override
    public Integer updateUser2(User user) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.eq("age",20);
        return userMapper.update(user,queryWrapper);
    }
    @Override
    public Integer insertUser(User user) {
        return userMapper.insert(user);
    }
    @Override
    public User getUser(Integer id) {
        return userMapper.selectById(id);
    }

    @Override
    public Integer delUser(Integer id) {
        return userMapper.deleteById(id);
    }

    @Override
    public List<User> getUsers() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("age",20); //设置等值查询
//        queryWrapper.lt("age",20); //设置小于查询
//        queryWrapper.le("age",20); //设置小于等于查询
//        queryWrapper.gt("age",20); //设置大于查询
//        queryWrapper.ge("age",20); //设置大于等于查询
//        queryWrapper.like("name","J"); //模糊查询 like %?%
//        queryWrapper.likeLeft("name","e"); //模糊查询 like %?
        queryWrapper.likeRight("name","e"); //模糊查询 like ?%
        List<User> users = userMapper.selectList(queryWrapper);
        return users;
    }
    @Override
    public UserVo selectUserPage(Integer current, Integer size) {
        UserVo userVo = new UserVo();
        IPage<User> page = new Page<>(current, size);
        userMapper.selectPage(page, null);
        userVo.setCurrent(current);
        userVo.setSize(size);
        userVo.setTotal(page.getTotal());
        userVo.setUserList(page.getRecords());
        return userVo;
    }
}

9、使用分页查询

  • 新建MyBatisPlusConfig文件注册分页插件
package com.example.mybatisplus.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@Configuration
@MapperScan("com.example.mybatisplus.mapper")
public class MyBatisPlusConfig {
    private final static Logger logger = LoggerFactory.getLogger(MyBatisPlusConfig.class);

    /**
     * @description: 配置分页插件
     * @author: gradual
     * @date: 2019/1/15 10:17
     * @param: []
     * @return: com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        logger.debug("注册分页插件");
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}
  • 创建分页实体类
package com.example.mybatisplus.vo;

import com.example.mybatisplus.bean.User;
import lombok.Data;
import java.util.List;

@Data
public class UserVo {
    private Integer current;
    private Integer size;
    private Long total;
    private List<User> userList;
}
  • 分页测试
posted @ 2020-06-04 15:45  浮生若梦~  阅读(232)  评论(0编辑  收藏  举报