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

news/2024/12/4 23:14:13/

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 generatorConfigurationPUBLIC "-//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);//创建 MBGMyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);//执行生成代码myBatisGenerator.generate(null);//输出警告信息for (String warning : warnings) {System.out.println(warning);}}
}

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


http://www.ppmy.cn/news/1042103.html

相关文章

CFD特性FPmarkets澳福认为了解这11种足够了

CFD在交易中很重要&#xff0c;但CFD特性很多投资者不了解&#xff0c;FPmarkets澳福认为了解这11种足够了&#xff1a; 1. 投资者通过标的资产价格价值的变化获利&#xff0c;而不拥有标的资产。 2. 差价合约交易没有固定的到期日。 3. 与期货交易类似&#xff0c;差价合约交易…

Window下部署使用Stable Diffusion AI开源项目绘图

Window下部署使用Stable Diffusion AI开源项目绘图 前言前提条件相关介绍Stable Diffusion AI绘图下载项目环境要求环境下载运行项目打开网址&#xff0c;即可体验文字生成图像&#xff08;txt2img&#xff09;庐山瀑布 参考 本文里面的风景图&#xff0c;均由Stable Diffusion…

基于golang实现telnet远程登录并发送命令源代码实现

//文件命名为main.go //package mainimport ("fmt""net""os""strconv""strings""time" )const WILL 251 const WONT 252 const DO 253 const DONT 254 const IAC 255 const RD 1 const SGA 3func main() {…

环形链表笔记(自用)

环形链表 不管怎么样slow最多走半圈了&#xff0c; 快慢指针slow走一步&#xff0c;fast走两步最合适&#xff0c;因为假设fast和slow相差n每一次他们前进&#xff0c;就会相差n-1步&#xff0c;这样他们一定会相遇&#xff0c;如果是环形链表的话。 代码 /*** Definition for…

eNSP:VLAN-hybrid实验应用

实验要求&#xff1a; 拓扑图 配置 sw1: [sw1]vlan batch 2 to 6[sw1]int Ethernet 0/0/2 [sw1-Ethernet0/0/2]port link-type access [sw1-Ethernet0/0/2]port default vlan 2 [sw1-Ethernet0/0/2]int e 0/0/4 [sw1-Ethernet0/0/4]port link-ty access [sw1-Ethernet0/0/…

ld链接文件和startup文件分析和优化--基于RT1176

ld链接文件关系到程序的代码段数据段bss段及其用户自定义段的运行位置&#xff0c;ld文件中的各个段都会在main函数之前&#xff0c;从加载域拷贝到运行域中。本章将具体介绍如何修改ld和startup文件。 软件平台&#xff1a;VSCODEGCC工具链 硬件平台&#xff1a;rt1176开发板…

第一章 初识Linux(含VMware安装Ubuntu、CentOS、Windows、FinalShell、快照)

目录 一、 课程的介绍  1.为什么要学习Linux  2.课程的安排  3.如何学习Linux 二、操作系统概述  1.学习目标  2.计算机的硬件和软件  3.什么是操作系统  4.常见的操作系统  5.本小节的总结 三、初识Linux  1.学习目标  2.Linux的诞生  3.Linux的内核  …

Node.js学习笔记-05

10、测试 测试包含单元测试、性能测试、安全测试和功能测试等几个方面&#xff0c;本章将从Node实践的角度来介绍单元测试和性能测试。 10.1 单元测试 10.1.1 单元测试的意义 开发者自测。对于开发者而言&#xff0c;不仅要编写单元测试&#xff0c;还应当编写可测试代码。…