Web菜鸟入门教程 - MyBatis通过数据库生成java代码

2023-11-09

SpringBoot大大简化了Web开发流程。可以这么说,做Web后来开发大部分时间就是在做配置文件修改。Web开发中,终端的运算能力越来越强,大部分场景就是数据库的操作,只有少部分逻辑会放在Web端处理。而这些增删查改基本属于标准的格式,因为大家开始琢磨,能不能搞定数据格式就能生成sql语句和相关查询代码。或者是有了数据库,就能自动生成对应的逻辑代码?

于是就有人发明了MyBatis-Plus和MyBatis-Generate。针对企业级开发,后者基本是必备。因为后端的强大,导致架构师和编码人员在分工上有区别,架构师负责指定目录结构,用到的技术栈,并设计好数据库,命名规范,数据字典等。然后通过mybatis-generate就能自动生成想要的代码了。

下面是我这个Demo的目录结构,因为这里只延时MyBatis相关木块的使用,其他的地方都没有加。
在这里插入图片描述
别看上面列出了不少的代码,实际上再使用MyBatis-Gen的时候只需要编辑几个文件就ok,其他文件都是运行后生成的。

既然是自动生成,自然离不开三要素:

  • 环境
  • 配置文件
  • 执行程序

为了方便区分,我把项目以外的所有依赖库都去掉了,除了spring-boot初始依赖,我只加入了mybatis-gen和mysql链接依赖(根目录pom.xml):

<?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>3.1.2</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<groupId>org.lange</groupId>
	<artifactId>study</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>study</name>
	<description>study</description>
	<properties>
		<java.version>17</java.version>
	</properties>

	<dependencies>
		<!-- Spring 启动库,整合了很多Spring相关的依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- MyBatis 生成器 -->
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>1.3.3</version>
		</dependency>
		<!--Mysql数据库驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.15</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

环境有了,接下来是配置。因为我们只需要生成sql相关代码,因此我们暂时不需要配置application.yml,只需要编辑MyBatis-generate相关的配置。我们在resource目录下创建一个文件,文件名随便,一般叫做generatorConfig.xml,我这里叫作mbg_config.xml。属性文件叫做generator.properties。如果你想把配置属性写死在配置文件中,generator.properties可以不用。

generator.properties

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
jdbc.userId=mall
jdbc.password=123456

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>
    <properties resource="generator.properties"/>
    <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 为模型生成序列化方法-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- 为生成的Java模型创建一个toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

        <!--可以自定义生成model的代码注释,不配置没关系,配置就要实现对应类-->
        <commentGenerator type="org.lange.study.mbg.CommentGenerator">
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <!--配置数据库连接,这里的$就是从属性中取值,对应generator.properties-->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.connectionURL}"
                        userId="${jdbc.userId}"
                        password="${jdbc.password}">
            <!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>

		<!-- 下面就是业务相关配置啦  -->
        <!--指定生成model的路径-->
        <javaModelGenerator targetPackage="org.lange.study.mbg.model" targetProject="src\main\java"/>
        <!--指定生成mapper.xml的路径-->
        <sqlMapGenerator targetPackage="org.lange.study.mbg.mapper" targetProject="src\main\resources"/>
        <!--指定生成mapper接口的的路径-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.lange.study.mbg.mapper"
                             targetProject="src\main\java"/>

        <!--生成全部表tableName设为%-->
        <table tableName="pms_brand">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

配置文件写好了,接下来就是写执行配置文件的程序来生成代码了。我这里为了掩饰方便直接在mbg包下创建了Generator类,用来读取配置并生成。
Generator.java

package org.lange.study.mbg;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class Generator {
    public static void main(String[] args) throws Exception {
        //MBG 执行过程中的警告信息
        List<String> warnings = new ArrayList<String>();
        //当生成的代码重复时,覆盖原代码
        boolean overwrite = true;
        //读取我们的 MBG 配置文件
        InputStream is = Generator.class.getResourceAsStream("/mbg_config.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //创建 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //执行生成代码
        myBatisGenerator.generate(null);
        //输出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

然后就是执行main方法,就可以自动生成了;
在这里插入图片描述
我们可以看到他自动生成了。不过我怕这里为了演示方便,只在配置中配置了一张表,大家可以根据自己需要把整个数据库都用生成的方式来做,这样就只需要关心业务代码就可以了。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web菜鸟入门教程 - MyBatis通过数据库生成java代码 的相关文章

随机推荐

  • 转】PPT带备注演示(只有讲解者看到备注)[转载]

    带备注演示 讲解者可以看到备注 观众看不到 想实现PPT带备注的演示吗 这种方式只有讲解者自己能够看到备注内容 而观 看PPT演示的人看不见 如下 图所示 要实现这种放映方式只需要简单的两步 1 第一步设置多显示器 在Windows XP中
  • 利用RMI实现在多台服务器之间的资源共享

    RMI Remote Method Invocation RMI是分布式对象软件包 它简化了在多台计算机上的JAVA应用之间的通信 JDK1 2以上都支持这个功能 有了RMI就可以实现不同服务器之间的通信 也就是多个JVM Java Vir
  • Lumerical学习之代码实现材料颜色与透明度的改变

    为了在仿真设计的时候让器件显得更有层次感 方便判断器件结构的各个部位 需要给材料设置合理的颜色和透明度 虽然可以在菜单栏的Material中直接调整材料颜色 但若是代码实现的话一方面可以重复利用 避免换个工程就在菜单栏重新设置 一方面也是给
  • 算法,CS学习,嵌入式学习,算法刷图,推荐资料,直接下载

    目录 附 算法代码库 附 CS 综合学习类 附 嵌入式 综合学习类 附 算法刷题总结 数据结构与算法简述和CS综述整理 本文非基础的教程 本文会列出大量学习和参考网站 老惯例 一个文章是一个集大成 本文借助了语音输入 PC 版 讯飞输入法
  • Spring Boot(二)配置一个阿里云的镜像

    1 新建项目 从中央仓库下载 太慢了 配置一个阿里云的镜像 1 从maven官网中下载apache maven 3 6 3 2 配置环境变量 添加path 3 验证 4 配置localRepository 新建文件夹 repo 用来存放从中
  • jQuery empty() VS remove()

    empty 和 remove的区别 empty remove empty empty 是移除被选元素的所有子节点 不包括自身 例子
  • c++派生类构造顺序

    1 整体构造顺序 前面我们提到过 一个类在构造的时候 先会构造其成员变量 在调用自身的构造函数 对于派生类来说 除了可能有成员变量 还可能有多个基类 在初始化派生类对象时 其构造函数要负责基类与基类成员对象的构造 还要负责自己成员对象的构造
  • 二叉树基本操作

    定义结构体 typedef int BTDatatype typedef struct BinaryTreeNode struct BinaryTreeNode left struct BinaryTreeNode right BTData
  • 分布式协议与算法——Raft算法

    目录 Raft算法 领导者选举 有哪些成员身份 领导者选举流程 选举细节 节点之间如何通信 什么是任期 选举有哪写规则 随机超时时间是什么 小结 日志复制 如何理解日志 如何复制日志 如何实现日志的一致 小结 节点成员变更 成员变更的问题
  • QCefView(1)—— CMAKE项目、库文件生成和项目测试

    目录 下载资源 说明文档 Quick Start with Qt Cef https tishion github io QCefView CMAKE生成 sln项目文件 库文件编译和测试项目编译运行 测试QCefView自带的项目QCef
  • 把Ethernet(以太网)基本工作原理说清楚

    文章目录 Ethernet 数据发送流程 1 载波侦听过程 2 冲突检测方法 发现冲突 停止发送 随机延迟重发 Ethernet帧结构 Ethernet V2 0标准 和 IEEE 802 3标准的Ethernet帧结构的区别 前导码 类型
  • java基础篇(一) 标识符、常量、变量、运算符

    一 标识符的学习和规则 1 定义 在程序中我们自定义的一些名称 在编程的过程中 经常需要在程序中定义一些符号来标记一些名称 如包名 类名 方法名 参数名 变量名 这些符号被称为标识符 2 组成元素 52个大小写英文字母a z 26 2 52
  • Moonbeam路由流动性

    Moonbeam路由流动性 Moonbeam Routed Liquidity MRL 使加密资产流动性能够从其他生态系统 如以太坊 Solana Polygon或Avalanche 进入波卡生态系统 借助MRL 用户可以通过简洁的用户体验
  • 大数据处理框架-Spark DataFrame构造、join和null空值填充

    1 Spark DataFrame介绍 DataFrame是Spark SQL中的一个概念 它是一个分布式的数据集合 可以看作是一张表 DataFrame与RDD的主要区别在于 前者带有schema元信息 即DataFrame所表示的二维表
  • Mysql多表连接

    表连接 前提 有时候我们需要的数据不止在一张表中 需要多个表结合查询时 就可以使用表连接 分类 1 1 内部连接 提供了两种表与表之间的连接方式 表与表之间建立起关联的列 要求列名可以不一样 但是这两个列的数据类型和内容得保持一致 1 2
  • Task01:概览西瓜书+南瓜书第1、2章(2天)

    第一章 绪论 1 1引入机器学习 引用周老师西瓜书对机器学习的解释 若计算机科学是研究关于算法的学问 则机器学习可以说是关于学习算法的学问 1 2 基本术语 机器学习是一门专业性很强的技术 它大量地应用了数学 统计学上的知识 周老师用挑选西
  • 【深度学习】CV_基于CNN的图像分类模型_代码逐行注释解析

    目录 前言 一 任务描述和关键环节 一 数据预处理 二 网络模块设置 三 网络模型保存与测试 二 具体步骤 一 任务分析与图像数据处理 1 导包 2 数据读取与预处理 2 1 数据读取 2 2 数据预处理 1 制作数据源 2 将预处理的数据
  • Nuxt3请求封装数据封装

    新建utils http ts import hash from ohash 后端返回的数据类型 export interface ResOptions
  • 重磅!Cloud Ace 在巴西圣保罗建立第一家南美子公司

    Cloud Ace Inc 总部 东京都千代田区 代表 青木诚 以下简称 Cloud Ace 于2023年3月10日宣布在巴西成立新子公司 Cloud Ace 一直在全球扩展其业务 从亚洲开始 目标是在世界各地设有办事处 我们最近加入的是在
  • Web菜鸟入门教程 - MyBatis通过数据库生成java代码

    SpringBoot大大简化了Web开发流程 可以这么说 做Web后来开发大部分时间就是在做配置文件修改 Web开发中 终端的运算能力越来越强 大部分场景就是数据库的操作 只有少部分逻辑会放在Web端处理 而这些增删查改基本属于标准的格式