开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率。
1.Web页面 新建 Springboot 项目
直接在 start.spring.io/ 中新建一个Springboot项目
Spring 版本 2.7.8
Mybatis 版本 3.5.11
MySql版本 8.0.26
2. 配置项目及启动
2.1 目录结构
我们先看一下目录结构,如下
| 目录 | 作用 |
|---|---|
| resources/sqlmapper目录 | 存放 mybaits 的 xml文件 |
| config 目录 | 存放 生成的BaseMapper文件 |
| domain.po 目录 | 存放 bean文件 数据PO文件 |
| repository.mapper | 目录存放 Mapper文件 |
| generator 目录 | 存放 generatorConfig.xml配置文件 |
2.2 创建一个带Json数据的表结构
创建用户表 ,字段信息如下
CREATE TABLE `user_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户ID',
`user_name` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户ID',
`age` int(11) NOT NULL COMMENT '年龄',
`address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '地址',
`order_ids` JSON COMMENT '用户id的json数组',
`goods` JSON COMMENT '用户商品信息 商品对象',
`sort_order` int(11) DEFAULT '0' COMMENT '排序字段',
`is_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除',
`addtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modtime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'
2.3 项目 pom文件修改如下
添加 mybatis依赖, tkmybatis依赖等
<?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.7.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jzj</groupId>
<artifactId>tdmybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>tdmybatis</name>
<description>test demo mybatis for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
<tkmybatis.version>2.1.5</tkmybatis.version>
<druid.version>1.2.6</druid.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
<!--tk mybatis-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${tkmybatis.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</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>
</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>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.0.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
2.4 配置文件配置DB连接数据
新建 generator/db.properties 配置 数据库连接信息,用于mybatis生成 xml文件
server.port=8800
## mybatis-generator自动生成代码#########################################################################################
mybatis.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&tinyInt1isBit=false
mybatis.name=root
mybatis.password=
datasource.driverClassName=com.mysql.jdbc.Driver
targetModelPackage=com.jzj.tdmybatis.domain.po
targetMapperPackage=sqlmapper
targetClientPackage=com.jzj.tdmybatis.repository.mapper
targetJavaProject=src/main/java
targetResources=src/main/resources
2.5 在项目中配置 BaseMapper
项目 config中配置 BaseMapper
package com.jzj.tdmybatis.config;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* tkmybatis 通用 mapper
*/
public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
2.6 配置generatorConfig.xml 配置文件
generatorConfig.xml 配置如下
表结构信息 "user_info"
PO信息 "UserInfoPO"
mapper信息 "UserInfoMapper"
<?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>
<properties resource="generator/db.properties"/>
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- TKmybatis配置 -->
<property name="javaFileEncoding" value="UTF-8"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- <plugin type="${mapper.plugin}">
<property name="mappers" value="${mapper.Mapper}"/>
</plugin>-->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.jzj.tdmybatis.config.BaseMapper"/>
</plugin>
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库链接URL、用户名、密码 -->
<jdbcConnection driverClass="${datasource.driverClassName}"
connectionURL="${mybatis.url}" userId="${mybatis.name}"
password="${mybatis.password}"/>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator targetPackage="${targetMapperPackage}" targetProject="${targetResources}"/>
<!-- 生成service的包名和位置 -->
<javaClientGenerator targetPackage="${targetClientPackage}" targetProject="${targetJavaProject}"
type="XMLMAPPER"/>
<table tableName="user_info" domainObjectName="UserInfoPO"
mapperName="UserInfoMapper">
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>
2.7 maven插件运行 generator
maven插件找打 plugins 找到 generator, 双击运行
2.8 generator结果
[INFO] Introspecting table user_info
[INFO] Generating Record class for table user_info
[INFO] Generating Mapper Interface for table user_info
[INFO] Generating SQL Map for table user_info
[INFO] Saving file UserInfoMapper.xml
[INFO] Saving file UserInfoPO.java
[INFO] Saving file UserInfoMapper.java
[WARNING] Existing file /Users/xxx/IdeaProjects/demo/tdmybatis/src/main/java/com/jzj/tdmybatis/domain/po/UserInfoPO.java was overwritten
[WARNING] Existing file /Users/xxx/IdeaProjects/demo/tdmybatis/src/main/java/com/jzj/tdmybatis/repository/mapper/UserInfoMapper.java was overwritten
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
运行成功, 可以看到 UserInfoPO, UserInfoMapper, UserInfoMapper.xml 成功生成
3.报错解决办法
mybatis-generator:generate报错
No valid Maven installation found. Either set the home directory in the configuration dialog or set the M2_HOME environment variable on your system. 其实就是maven 项目的路径没有安装, 我们可以配置下 maven即可