目录
前言
一、怎么使用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会报错。