Mybatis-plus快速搭建项目(SpringBoot)


Mybatis-plus快速搭建项目(SpringBoot)

项目结构

配置测试数据库

DROP TABLE IF EXISTS user;
 
CREATE TABLE user
(
	id BIGINT(20) NOT NULL 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)
);
 
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');

配置依赖

<?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.6.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>zwq</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>zwq</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.1</version>
        </dependency>

        <!-- jdbc驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.3.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

编写BaseController 和 BaseEntity 类

/**
 * description: TODO
 *
 * @author zwq
 * @date 2022/1/4 16:19
 */
public class BaseController {
}

/**
 * description: TODO
 *
 * @author zwq
 * @date 2022/1/4 16:19
 */
public class BaseEntity {
}

编写代码生成器类

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * description: TODO
 *
 * @author zwq
 * @date 2022/1/4 16:20
 */
public class MysqlGenerator {

	public static void main(String[] args) {
		AutoGenerator mpg = new AutoGenerator();
		// 1、全局配置
		GlobalConfig gc = new GlobalConfig();
		String projectPath = System.getProperty("user.dir");
		gc.setOutputDir(projectPath + "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
		gc.setAuthor("zwq"); //设置作者
		gc.setOpen(false);
		gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
		gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
		gc.setBaseResultMap(true); //生成resultMap
		mpg.setGlobalConfig(gc);

		// 2、数据源配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mybatis-plus-demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&autoReconnect=true&failOverReadOnly=false");

		dsc.setDriverName("com.mysql.cj.jdbc.Driver");
		dsc.setUsername("root");
		dsc.setPassword("root");
		mpg.setDataSource(dsc);

		// 3、包配置
		PackageConfig pc = new PackageConfig();
		pc.setModuleName("sys");
		pc.setParent("com.example.zwq");
		mpg.setPackageInfo(pc);

		// 4、策略配置
		StrategyConfig strategy = new StrategyConfig();
		strategy.setNaming(NamingStrategy.underline_to_camel);
		strategy.setColumnNaming(NamingStrategy.underline_to_camel);
		strategy.setSuperControllerClass("com.example.zwq.controller.BaseController");
		strategy.setSuperEntityClass("com.example.zwq.entity.BaseEntity");
		// strategy.setTablePrefix("t_"); // 表名前缀
		strategy.setEntityLombokModel(true); //使用lombok
		// String[] strings = {"user","role"};
		strategy.setInclude("user");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
		// strategy.setInclude(strings);
		mpg.setStrategy(strategy);

		// 5、执行
		mpg.execute();
	}
}

运行,生成代码;

配置yml

server:
  port: 8081

spring:
  application:
    name: test
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/mybatis-plus-demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&autoReconnect=true&failOverReadOnly=false
    username: root
    password: root

添加分页配置

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
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;

/**
 * description: TODO
 *
 * @author zwq
 * @date 2022/1/4 17:25
 */
@Configuration
public class MybatisPlusConfig {

	// 最新版
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
		return interceptor;
	}
}

编写service

服务类:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.zwq.sys.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zwq
 * @since 2022-01-04
 */
public interface UserService extends IService<User> {

	List<User> selectAll();

	List<User> selectByExample(QueryWrapper<User> qw);

	List<User> selectPageByExample(int current, int size, QueryWrapper<User> qw);

}


服务实现类:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.zwq.sys.entity.User;
import com.example.zwq.sys.mapper.UserMapper;
import com.example.zwq.sys.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zwq
 * @since 2022-01-04
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

	@Resource
	private UserMapper userMapper;

	@Override
	public List<User> selectAll() {
		return userMapper.selectList(new QueryWrapper<>());
	}

	@Override
	public List<User> selectByExample(QueryWrapper<User> qw) {
		return userMapper.selectList(qw);
	}

	@Override
	public List<User> selectPageByExample(int current, int size, QueryWrapper<User> qw) {
		Page<User> userPage = new Page<>(current , size);
		IPage<User> userIPage = userMapper.selectPage(userPage,qw);
		System.out.println("总页数: "+userIPage.getPages());
		System.out.println("总记录数: "+userIPage.getTotal());
		userIPage.getRecords().forEach(System.out::println);
		return userIPage.getRecords();
	}
}

编写controller

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.zwq.sys.entity.User;
import com.example.zwq.sys.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

import com.example.zwq.controller.BaseController;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zwq
 * @since 2022-01-04
 */
@RestController
@RequestMapping("/sys/user")
public class UserController extends BaseController {

	@Autowired
	private UserService userService;

	/* 查询所有 */
	@RequestMapping(value = "/all", method = RequestMethod.GET)
	public Object selectUserAll() {
		return userService.selectAll();
	}

	/* 按姓名模糊查询 */
	@RequestMapping(value = "/example", method = RequestMethod.GET)
	public Object selectUserByExample(String username) {
		QueryWrapper<User> qw = new QueryWrapper<>();
		qw.like("name", username);
		return userService.selectByExample(qw);
	}

	/* 分页查询 */
	@RequestMapping(value = "/page", method = RequestMethod.GET)
	public Object selectUserByExamplePage(int current, int size, String name) {
		QueryWrapper<User> qw = new QueryWrapper<>();
		if(name != null && !"".equals(name)) {
			qw.like("name", name);
		}
		return userService.selectPageByExample(current, size, qw);
	}
}

测试

  • 查询所有:
  • 按字段查询:
  • 分页查询