【学习】SprinBoot 2 + MyBatis-Plus 3 简化 CURD 开发

在昨天的交流会上,进行交流的架构师展示了他开发的 CURD 代码生成工具,随即被同事问,为啥不用 Mybatis-Plus ,好奇之下来学习一波。

在平时开发中,有很多 CURD 代码要写,MP(Mybatis-Plus)大大简化了这个工作,官网列举了 15 种特性,先从第三个特性,也是最关注的特性——强大的 CRUD 操作,开始学习。

使用框架:SpringBoot,Mybatis-Plus

根据 MP 官网完成测试

首先创建该项目库,并创建表User

CREATE TABLE USER(
	id VARCHAR(20),
	NAME VARCHAR(10)
);

插入几条数据

INSERT INTO USER (id,NAME) VALUES("1","一号");
INSERT INTO USER (id,NAME) VALUES("2","二号");
INSERT INTO USER (id,NAME) VALUES("3","三号");

SpringBoot项目的基本使用不再赘述,网上许多 demo

该项目使用 IDEA 开发工具完成,然后配置pom.xml,项目使用 Mysql 数据库,注意添加 Mysql 的驱动

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- Mybatis增强工具,简化开发 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- Mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- alibaba数据库连接池,可以监控扩展 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <!-- 热启动 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <!-- FastJson解析JSON格式数据 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
    </dependencies>

然后配置application.properties连接数据库及设置项目属性,使用 alibaba 的 Druid 连接池,基本配置如下

server.port=8081
#使用Mysql
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/olresume?useSSL=false&characterEncoding=utf-8
spring.datasource.username=damionew
spring.datasource.password=2018$mysql
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#连接池的配置信息
spring.datasource.initialSize=5  
spring.datasource.minIdle=5  
spring.datasource.maxActive=20  
spring.datasource.maxWait=60000  
spring.datasource.timeBetweenEvictionRunsMillis=60000  
spring.datasource.minEvictableIdleTimeMillis=300000  
spring.datasource.validationQuery=SELECT 1 FROM DUAL  
spring.datasource.testWhileIdle=true  
spring.datasource.testOnBorrow=false  
spring.datasource.testOnReturn=false  
spring.datasource.poolPreparedStatements=true  
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
spring.datasource.filters=stat,wall,log4j  
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000  

基本配置完成后添加 entity、Controller 、Mapper ,项目结构如下

首先为了使用 Mybatis ,需要在项目启动类添加注解 @MapperScan

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
// 此处应指定具体 Mapper 包的路径
@MapperScan("com.olresume.admin.mapper")
public class AdminApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }

}

然后添加 User实体类

/**
 *  User 实体类
 */
public class User {
    String id;
    String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

接下来是 mapper 类,注意使用 Mybatis-Plus 需要继承BaseMapper,同时泛型设置为单表的实体类

import com.olresume.admin.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User>{

}

然后就可以通过 Controller 进行测试了,以官网的 selectList 为第一例:

import com.alibaba.fastjson.JSONObject;
import com.olresume.admin.entity.User;
import com.olresume.admin.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class UserController {
    @Autowired
    UserMapper userMapper;

    @ResponseBody
    @RequestMapping("/selectList")
    public String selectList(){
        System.out.println("queryNameById");
        List<User> userList = userMapper.selectList(null);
        JSONObject object = new JSONObject();
        object.put("userList",userList);
        return  object.toJSONString();
    }
}

查看封装的源码,如下,另外此处使用 alibaba 的 fastjson 进行格式转换

    /**
     * 根据 entity 条件,查询全部记录
     *
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

网页展示结果如图

以上所有步骤完成并没有写一句 SQL ,全部使用Mybatis-Plus内置接口完成。

下篇文章将记录其他接口的使用,比如根据 ID 查询等


问题1:

项目启动时,控制台报错:java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()

解决方法:引入 Maven 依赖错误,原为

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

修改为

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
原创文章 88 获赞 41 访问量 16万+

猜你喜欢

转载自blog.csdn.net/Damionew/article/details/89149532
今日推荐