SpringBoot整合Mybatis加逆向工程完整详细版

SpringBoot整合Mybatis整合的一些坑。

SpringBoot整合Mybatis整合的一些坑。
第一次文章不懂咋写粗暴点直接上代码教程,本次代教程集成mybatis的逆向工程
整合参考文献
逆向工程参考文献

整合工程我放在github

1、创建springboot工程

在这里插入图片描述
这里没什么好讲的在这里插入图片描述
勾选 spirng Web、在这里插入图片描述
勾选 Spring Data JDBC 、Mybatis、Mysql Driver (备注:如果你是其他数据库勾选其他的)在这里插入图片描述
在这里插入图片描述在这里插入图片描述下一步、下一步、创建完成之后

2、maven依赖

2.1、pom.xml依赖**

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.2、这里讲到mybatis的逆向工程的插件!!!

<!-- mybatis generator 自动生成代码插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
            </plugin>

在这里插入图片描述

等待下载完成之后…

3、配置springboot的配置文件

在这里插入图片描述
3.1、这里推荐用xxxx.yml文件简介、层级关系。

  • 创建application.yml
spring:
  profiles:
    active: dev
  • 创建application-dev.yml
server:
  port: 8080

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/gmall_study?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver

    thymeleaf:
      prefix: classpath:/templates/

mybatis:
  mapper-locations: classpath:mapping/*Mapper.xml
  type-aliases-package: com.atguigu.gmall.user.pojo

在这里插入图片描述

4、配置mybatis逆向工程

4.1、在Rsource目录创建一个mapping文件夹
  • 这是目录结构。
    在这里插入图片描述
4.2、在Rsource底下创建mybatis-generator.xml具体配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!--mysql 连接数据库jar 这里选择自己本地位置-->
    <classPathEntry
            location="E:\NZshipping\generatorSqlmapCustom\lib\mysql-connector-java-5.1.28-bin.jar"/>
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/gmall_study?serverTimezone=UTC" userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
           NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="com.example.demo.entity"
                            targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置
           如果maven工程只是单独的一个工程,targetProject="src/main/java"
           若果maven工程是分模块的工程,targetProject="所属模块的名称",例如:
           targetProject="ecps-manager-mapper",下同-->
        <sqlMapGenerator targetPackage="mapping"
                         targetProject="src/main/resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.demo.mapper"
                             targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>
        <!-- 指定数据库表  多个表示,可用多个table标签-->
        <table schema="" tableName="ums_member"></table>
    </context>
</generatorConfiguration>
4.2、配置maven启动插件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以免打错我吧上面这一行贴出来:mybatis-generator:generate -e

点击OK
在这里插入图片描述

配置完成之后启动…

在这里插入图片描述
启动成功
在这里插入图片描述
这是逆向生成的文件

5、接下来我们来测试

在springboot启动文件里面加入

@MapperScan(basePackages = "你的mapper的目录")

别漏掉(非常重要)
在这里插入图片描述
5.2、建一个工具返回前端 result 类

package com.atguigu.gmall.user.common;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.Serializable;
import java.util.List;
/**
 * json结果集
 */
public class ResultList implements Serializable {
    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    // 响应业务状态
    private Integer status;

    // 响应消息
    private String msg;

    // 响应中的数据
    private Object data;

    public static ResultList build(Integer status, String msg, Object data) {
        return new ResultList(status, msg, data);
    }

    public static ResultList ok(Object data) {
        return new ResultList(data);
    }

    public static ResultList ok() {
        return new ResultList(null);
    }

    public ResultList() {

    }

    public static ResultList build(Integer status, String msg) {
        return new ResultList(status, msg, null);
    }

    public ResultList(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public ResultList(Object data) {
        this.status = 200;
        this.msg = "OK";
        this.data = data;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    /**
     * 将json结果集转化为Result对象
     *
     * @param jsonData
     *            json数据 传的是Result的对象的Json字符串
     * @param clazz
     *            TaotaoResult中的object类型
     * @return
     */
    public static ResultList formatToPojo(String jsonData, Class<?> clazz) {
        try {
            if (clazz == null) {
                return MAPPER.readValue(jsonData, ResultList.class);
            }
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (clazz != null) {
                if (data.isObject()) {
                    obj = MAPPER.readValue(data.traverse(), clazz);
                } else if (data.isTextual()) {
                    obj = MAPPER.readValue(data.asText(), clazz);
                }
            }
            return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 没有object对象的转化
     *
     * @param json
     * @return
     */
    public static ResultList format(String json) {
        try {
            return MAPPER.readValue(json, ResultList.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Object是集合转化
     *
     * @param jsonData  传的是Result的对象的Json字符串
     *            json数据
     * @param clazz
     *            集合中的类型
     * @return
     */
    public static ResultList formatToList(String jsonData, Class<?> clazz) {
        try {
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (data.isArray() && data.size() > 0) {
                obj = MAPPER.readValue(data.traverse(),
                        MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
            }
            return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
        } catch (Exception e) {
            return null;
        }
    }
}

这是代码目录结构
在这里插入图片描述

  • UserServiceImpl
  • 在这里插入图片描述
  • UserService
    在这里插入图片描述
  • UserController
    在这里插入图片描述
    、切记别重复逆向生成…

6、接下去我们打开Postman

在这里插入图片描述
😊我们拿数据了。

目前为止教程就结束了。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值