【Mybatis】自动生成mapper文件

目录

前言

一、怎么使用Mybatis?

二、使用步骤

1.安装数据库

2.创建表

 3.添加生成命令


前言

        Mybatis是一个基于Java的持久层框架,而且支持定制化 SQL、存储过程以及高级映射。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(普通的 Java对象)映射成数据库中的记录。

        使用maven根据数据库表和generatorConfig.xml自动生成表相关的class、mapper、xml文件,可以大大减少我们自己写表类的时间,加快我们开发的进度。


一、怎么使用Mybatis?

        (1) pom.xml文件需要引入Mybatis的generator插件。同时需要配置生成表的xml文件路径,这里配置的是:${basedir}/src/test/resources/

        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.4.0</version>
          <configuration>
            <configurationFile>${basedir}/src/test/resources/generatorConfig.xml</configurationFile>
            <verbose>true</verbose>
            <overwrite>true</overwrite>
          </configuration>
        </plugin>

        可以看到,test目录下是没有resources目录的,需要新建,同时新建一个xml文件,名字是generatorConfig.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>

    <!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
    <classPathEntry
            location="D:\workspace\maven\repository\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar"/>

    <!-- 一个数据库一个context,defaultModelType="flat" 大数据字段,不分表 -->
    <context id="MysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
        <!-- 注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
            <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳-->
        </commentGenerator>

        <!-- jdbc连接-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3392/mqtt_server?generateSimpleParameterMetadata=true"
                        userId="root" password="666abc">
        </jdbcConnection>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成实体类地址 -->
        <javaModelGenerator targetPackage="com.xanadw.mqttserver.datasource.entities" targetProject="src/main/java">
            <!-- 是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值去掉前后空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成map.xml文件存放地址 -->
        <sqlMapGenerator targetPackage="mapper_xml" targetProject="src\main\resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 生成接口dao(mapper) -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.xanadw.mqttserver.datasource.mappers"
                             targetProject="src/main/java" >
            <property name="enableSubPackages" value="false"/>
            <property name="exampleMethodVisibility" value="public"/>
            <property name="nullCatalogMeansCurrent" value="true"/>
        </javaClientGenerator>

        <table tableName="xanadw_book" domainObjectName="BookLib"></table>
        <table tableName="xanadw_borrowmsg" domainObjectName="BorrowMsg"></table>
        <table tableName="xanadw_depotbook" domainObjectName="Depotbook"></table>

    </context>
</generatorConfiguration>

        (1)配置数据库的JDBC驱动classPathEntry位置

<!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
<classPathEntry
        location="D:\workspace\maven\repository\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar"/>

        (2)本地数据库mysql的端口,数据库以及用户名和密码

<!-- jdbc连接-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3392/mqtt_server?generateSimpleParameterMetadata=true"
                userId="root" password="666abc">
</jdbcConnection>

        (3)生成实体类的地址,这种跟包相关的都需要修改。

<!-- 生成实体类地址 -->
<javaModelGenerator targetPackage="com.xanadw.mqttserver.datasource.entities" targetProject="src/main/java">
    <!-- 是否让schema作为包的后缀 -->
    <property name="enableSubPackages" value="false"/>
    <!-- 从数据库返回的值去掉前后空格 -->
    <property name="trimStrings" value="true"/>
</javaModelGenerator>

        (4)生成的xml文件路径,以及生成的dao接口(mapper)的文件。

<!-- 生成map.xml文件存放地址 -->
<sqlMapGenerator targetPackage="mapper_xml" targetProject="src\main\resources">
    <property name="enableSubPackages" value="false"/>
</sqlMapGenerator>

<!-- 生成接口dao(mapper) -->
<javaClientGenerator type="XMLMAPPER"
                     targetPackage="com.xanadw.mqttserver.datasource.mappers"
                     targetProject="src/main/java" >
    <property name="enableSubPackages" value="false"/>
    <property name="exampleMethodVisibility" value="public"/>
    <property name="nullCatalogMeansCurrent" value="true"/>
</javaClientGenerator>

        (5)配置需要生成接口的表,不加这个表会报错的。

<table tableName="xanadw_book" domainObjectName="BookLib"></table>
<table tableName="xanadw_borrowmsg" domainObjectName="BorrowMsg"></table>
<table tableName="xanadw_depotbook" domainObjectName="Depotbook"></table>

二、使用步骤

1.安装数据库

        这里只介绍windows的安装过程,我使用的是5.7.4版本。

        这一步是可以跳过的。

 配置安装路径和数据路径。

 检查一些依赖,然后安装完毕。

 修改端口,以及相关的初始配置,因为3306端口已经被占用了,所以我换了一个3392端口。

 配置root的密码以及使用的用户和密码,这个密码不要忘记了,后面每个项目本地连接数据库都需要这个用户和密码的。

 

 如果出现了如下错误,但是点击Next出现了下面第二张图片,说明已经成功安装了Mysql,这个是因为我之前装过一遍,并且已经设置过root密码了,导致添加root用户失败。

         点击下方的Mysql图标,选中MYSQL57这个,可以启动、停止数据库服务。

   

         这个就是刚刚添加root用户失败,重新设置密码

 

         点击上面的+号,新建一个连接,最上面的名字可以随便填,下面的参数必须填写你安装时配置的参数,最后可以点击测试一下连接,测试没问题后,可以点击ok完成。

 

2.创建表

        双击新建的连接窗口就可以进入到sql操作界面,执行下面的sql语句 ,闪电就是执行按钮。

create DATABASE mqtt_server;
show databases;

 

 可以看到已经创建了mqtt_server数据库,选中mqtt_server,看看是否已经存在表。

use mqtt_server;
show tables;

窗口输入下面的语句,并全部选中下面内容然后点击执行

/*
Navicat MySQL Data Transfer

Source Server         : 127.0.0.1
Source Server Version : 50704
Source Host           : 127.0.0.1:3306
Source Database       : xanadw_mqttserver

Target Server Type    : MYSQL
Target Server Version : 50704
File Encoding         : 65001

Date: 2021-07-28 01:03:33
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for xanadw_book
-- ----------------------------
DROP TABLE IF EXISTS `xanadw_book`;
CREATE TABLE `xanadw_book` (
  `id` varchar(30) NOT NULL COMMENT '图书RFID编号',
  `name` varchar(50) DEFAULT NULL COMMENT '图书名称',
  `location` varchar(50) DEFAULT NULL COMMENT '图书位置',
  `borrow_count` bigint(20) DEFAULT NULL COMMENT '借阅次数',
  `depot_number` bigint(20) DEFAULT NULL COMMENT '库存数量',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书信息';

INSERT INTO `xanadw_book` VALUES ('300833b2ddd9014000000001', '物理世界探秘', '第一组', 0, 0);
INSERT INTO `xanadw_book` VALUES ('300833b2ddd9014000000002', '小足迹大中国', '第二组', 0, 0);
INSERT INTO `xanadw_book` VALUES ('300833b2ddd9014000000003', '精美的雕塑'  , '第三组', 0, 0);
INSERT INTO `xanadw_book` VALUES ('300833b2ddd9014000000004', '<<尚书>>史话', '第四组', 0, 0);


-- ----------------------------
-- Table structure for xanadw_borrowmsg
-- ----------------------------
DROP TABLE IF EXISTS `xanadw_borrowmsg`;
CREATE TABLE `xanadw_borrowmsg` (
  `id` varchar(2000) NOT NULL COMMENT '图书RFID编号',
  `borrow_id` varchar(50) NOT NULL COMMENT '借阅人编号',
  `borrow_time` datetime NOT NULL COMMENT '借阅日期',
  `topic` varchar(50) DEFAULT NULL COMMENT '会话名称',
  `client_name` varchar(50) DEFAULT NULL COMMENT '客户端名称',
  `book_name` varchar(50) DEFAULT NULL COMMENT '图书名称',
  `location` varchar(50) DEFAULT NULL COMMENT '图书位置',
  PRIMARY KEY (`borrow_id`, `borrow_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书借阅信息';

INSERT INTO `xanadw_borrowmsg` VALUES ('300833b2ddd9014000000001,300833b2ddd9014000000002,300833b2ddd9014000000003,300833b2ddd9014000000004', '', '20210823194553', 'SixLab/Rfid', '001', '<<尚书>>史话', '第一组');


-- ----------------------------
-- Table structure for xanadw_depotbook
-- ----------------------------
DROP TABLE IF EXISTS `xanadw_depotbook`;
CREATE TABLE `xanadw_depotbook` (
  `name` varchar(50) NOT NULL COMMENT '图书名称',
  `id_str` varchar(2000) NOT NULL COMMENT '图书ID字符串',
  `location` varchar(2000) DEFAULT NULL COMMENT '图书位置',
  `depot_number` bigint(20) DEFAULT NULL COMMENT '库存数量',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书信息';

INSERT INTO `xanadw_depotbook` VALUES ('<<尚书>>史话', '300833b2ddd9014000000004,300833b2ddd9014000000008,300833b2ddd9014000000012,300833b2ddd90140000000016,300833b2ddd9014000000020,300833b2ddd9014000000024,300833b2ddd9014000000028', '第一组,第二组,第三组,第四组,第五组,第六组,第七组', 1000);

再次查看数据库和相关表数据。

use mqtt_server;
show tables;
select * from xanadw_book;

  

 3.添加生成命令

       点击添加配置,然后点击+,选择maven

 填写对应的名称和命令

mybatis-generator:generate -e

  应用确定后,就生成命令了,选中mapper命令后,直接点击运行就可以了。

可以看到,已经成功生成文件了, 查看目录也可以看到我们需要的三类文件都存在了。

 注意:最下面的.xml文件再次点击运行按钮的时候,需要提前删除,因为这类文件的生成模式是如果存在则在最下面直接追加,而不是覆盖重新生成。

不然,springboot启动时报类似如下的错误。

Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.sxilab.erp.datasource.mappers.DepotHeadMapper.BaseResultMap


 总结

        基本上使用maven根据数据库表和generatorConfig.xml逆向生成class、mapper、xml就只有这些内容了,尤其需要注意的是再次执行需要删除.xml文件重新生成,执行这个生成命令不会报错,只有在项目启动时,springboot会报错。

猜你喜欢

转载自blog.csdn.net/xanadw/article/details/124869462