【Spring实战】09 MyBatis Generator

文章目录

    • 1. 依赖
    • 2. 配置文件
    • 3. 生成代码
    • 4. 详细介绍 generatorConfig.xml
    • 5. 代码详细
    • 总结

Spring MyBatis Generator 是 MyBatis 官方提供的一个强大的工具,它能够基于数据库表结构自动生成 MyBatis 持久层的代码,包括实体类、Mapper 接口和 XML 映射文件。这种自动代码生成的方式能够提高开发效率,减少手写代码的工作量。本篇博客将引导你如何使用 Spring MyBatis Generator 进行代码生成。

1. 依赖

首先,需要在项目的 pom.xml 文件中引入 Spring MyBatis Generator 插件的依赖:

	<dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.4.2</version></dependency>

2. 配置文件

src/main/resources 目录下创建 generatorConfig.xml 文件,配置代码生成的参数,例如:

<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="DemoBatisGenerator" targetRuntime="MyBatis3"><plugin type="org.mybatis.generator.plugins.ToStringPlugin" /><commentGenerator><property name="suppressDate" value="false" /><property name="suppressAllComments" value="true" /><property name="author" value="false" /></commentGenerator><!-- 数据库连接配置 --><jdbcConnection driverClass="org.h2.Driver"connectionURL="jdbc:h2:mem:db1"userId="sa"password=""></jdbcConnection><!-- Java 模型生成器 --><javaModelGenerator targetPackage="com.cheney.demo.model" targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- SQL Map 生成器 --><sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- Mapper 接口生成器 --><javaClientGenerator targetPackage="com.cheney.demo.dao" targetProject="src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="true" /></javaClientGenerator><!-- 表配置 --><table tableName="t_user" domainObjectName="User" enableCountByExample="false"enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false"></table></context></generatorConfiguration>

3. 生成代码

使用 Java 编程方式生成代码

    @GetMapping("generator")public void generator() throws Exception {List<String> warnings = new ArrayList<>();boolean overwrite = true;ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(this.getClass().getResourceAsStream("/generatorConfig.xml"));DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);myBatisGenerator.generate(null);}

1)服务启动

在这里插入图片描述

2)调用 generator 运行

在这里插入图片描述

3)MyBatis Generator 将会根据配置文件自动生成实体类、Mapper 和 XML 映射文件并放置在指定的目录中

在这里插入图片描述

User.java

package com.cheney.demo.model;public class User {private Integer id;private String name;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name == null ? null : name.trim();}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", id=").append(id);sb.append(", name=").append(name);sb.append(", age=").append(age);sb.append("]");return sb.toString();}
}

UserMapper.java

package com.cheney.demo.dao;import com.cheney.demo.model.User;public interface UserMapper {int deleteByPrimaryKey(Integer id);int insert(User row);int insertSelective(User row);User selectByPrimaryKey(Integer id);int updateByPrimaryKeySelective(User row);int updateByPrimaryKey(User row);
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cheney.demo.dao.UserMapper"><resultMap id="BaseResultMap" type="com.cheney.demo.model.User"><id column="ID" jdbcType="INTEGER" property="id" /><result column="NAME" jdbcType="VARCHAR" property="name" /><result column="AGE" jdbcType="INTEGER" property="age" /></resultMap><sql id="Base_Column_List">ID, NAME, AGE</sql><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from T_USERwhere ID = #{id,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from T_USERwhere ID = #{id,jdbcType=INTEGER}</delete><insert id="insert" parameterType="com.cheney.demo.model.User">insert into T_USER (ID, NAME, AGE)values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})</insert><insert id="insertSelective" parameterType="com.cheney.demo.model.User">insert into T_USER<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">ID,</if><if test="name != null">NAME,</if><if test="age != null">AGE,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="id != null">#{id,jdbcType=INTEGER},</if><if test="name != null">#{name,jdbcType=VARCHAR},</if><if test="age != null">#{age,jdbcType=INTEGER},</if></trim></insert><update id="updateByPrimaryKeySelective" parameterType="com.cheney.demo.model.User">update T_USER<set><if test="name != null">NAME = #{name,jdbcType=VARCHAR},</if><if test="age != null">AGE = #{age,jdbcType=INTEGER},</if></set>where ID = #{id,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="com.cheney.demo.model.User">update T_USERset NAME = #{name,jdbcType=VARCHAR},AGE = #{age,jdbcType=INTEGER}where ID = #{id,jdbcType=INTEGER}</update>
</mapper>

4. 详细介绍 generatorConfig.xml

  1. plugin

    提供了一些列插件来扩展其功能供我们使用

    • CacheNamespacePlugin:为生成的 Mapper 接口(Kotlin 或 Java)添加 @CacheNamespace 注解。
    • CachePlugin:为生成的 SQL 映射文件添加 元素。
    • CaseInsensitiveLikePlugin:为 Example 类添加方法,以支持大小写不敏感的 LIKE 搜索。
    • EqualsHashCodePlugin:为 MBG 生成的 Java 模型对象添加 equals 和 hashCode 方法。
    • FluentBuilderMethodsPlugin:为生成的模型类添加流畅的构建器方法。
    • IgnoreViewsPlugin:在代码生成过程中过滤掉“VIEW”类型的表。
    • MapperAnnotationPlugin:为生成的 Mapper 接口添加 @Mapper 注解。
    • MapperConfigPlugin:生成一个包含对 MBG 生成的 XML 映射文件的引用的 MapperConfig.xml 文件。
    • RenameExampleClassPlugin:通过重命名 MBG 生成的 Example 类来演示 initialized 方法的用法。
    • RowBoundsPlugin:为 selectByExample 方法添加接受 RowBounds 参数的新版本。
    • SerializablePlugin:为 MBG 生成的 Java 模型类添加 java.io.Serializable 标记接口。
    • ToStringPlugin:为生成的模型类添加 toString() 方法
  2. commentGenerator

    用于生成MyBatis Generator(MBG)生成的各种元素的注释,包括Java字段、Java方法、XML元素等

    • suppressAllComments:用于指定MBG是否在生成的代码中包含任何注释。你可以将其设置为true来禁用所有注释,或者保持默认值false来包含所有生成元素的注释
    • suppressDate:用于指定MBG是否在生成的注释中包含生成时间戳。你可以将其设置为true来禁用时间戳,或者保持默认值false来包含生成时间戳
    • addRemarkComments:用于指定MBG是否在生成的注释中包含数据库表和列的备注信息。你可以将其设置为true来包含表和列的备注信息,或者保持默认值false来不包含表和列的备注信息
    • dateFormat:用于指定生成的注释中的日期格式。你可以自定义日期格式,也可以使用默认的java.util.Date格式
    • useLegacyGeneratedAnnotation:用于指定是否使用来自已弃用的“javax”命名空间的注解。在JDK 9+中,建议使用“jakarta”命名空间。你可以将其设置为truefalse
  3. jdbcConnection

    配置数据库连接

    • driverClass属性指定了JDBC驱动程序的完全限定类名

    • connectionURL属性指定了连接数据库的JDBC连接URL

    • userId属性指定了连接数据库的用户名

    • password属性指定了连接数据库的密码

  4. javaModelGenerator

    配置 Java 模型生成器

    • targetPackage:指定生成的类所在的包
    • targetProject:指定生成的对象的目标项目
  5. sqlMapGenerator

    配置 SQL Map 生成器

    • enableSubPackages,它用于控制是否为对象生成不同的Java包,基于表的目录和模式
  6. javaClientGenerator

    配置 Java 客户端生成器

    • type="XMLMAPPER":指定生成的 Java 接口和实现类将引用 MyBatis 的 XML 配置
    • targetPackage="test.dao":指定生成的接口和实现类所在的包
    • targetProject="\MBGTestProject\src":指定生成的接口和实现类将保存在的项目目录
  7. table

    配置要生成的数据库表

5. 代码详细

https://github.com/cheney09/spring-practical-combat/tree/main/09/demo

在这里插入图片描述

总结

以上是使用 Spring MyBatis Generator 自动生成代码的简要步骤。这种方式可以帮助你更快速地搭建起数据库访问层的基础代码,减少手写代码的工作量,提高开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF项目创建HTTP WEB服务,不使用IIS业务 WPF桌面程序WebApi WPF 集成WebApi C# 创建HTTP Web API服务

在C# WPF应用程序中直接创建HTTP服务或WebAPI服务有以下优点&#xff1a; 自托管服务&#xff1a; 简化部署&#xff1a;无需依赖外部服务器或IIS&#xff08;Internet Information Services&#xff09;&#xff0c;可以直接在应用程序内部启动和运行Web服务。 集成紧密&…

工具系列:TimeGPT_(8)使用不规则时间戳进行时间序列预测

文章目录 介绍不规则时间戳的单变量时间预测不规则时间戳的外生变量时间预测 介绍 在处理时间序列数据时&#xff0c;时间戳的频率是一个关键因素&#xff0c;可以对预测结果产生重大影响。像每日、每周或每月这样的常规频率很容易处理。然而&#xff0c;像工作日这样的不规则…

【ARMv8M Cortex-M33 系列 2 -- Cortex-M33 JLink 连接 及 JFlash 烧写介绍】

文章目录 Jlink 工具JLink 命令行示例JFlash 烧写问题Jlink 工具 J-Link 是 SEGGER 提供的一款流行的 JTAG 调试器,它支持多个平台和处理器。JLink.exe 是 J-Link 调试器的命令行接口,它允许用户通过命令行执行一系列操作,例如编程、擦除、调试等。 工具链接: https://ww…

可运营的Leadshop开源商城小程序源码 +H5公众号+带视频教程

源码简介 Leadshop是一款出色的开源电商系统&#xff0c;具备轻量级、高性能的特点&#xff0c;并提供持续更新和迭代服务。该系统采用前后端分离架构&#xff08;uniappyii2.0&#xff09;&#xff0c;以实现最佳用户体验为目标。 前端部分采用了uni-app、ES6、Vue、Vuex、V…

使用Visual Studio 2022 winform项目打包成安装程序.exe

winform项目打包 1.安装扩展插件 Microsoft Visual Studio Installer Projects 20222.在解决方案上新建一个setup project 项目3.新建成功如下图&#xff0c;之后添加你的winform程序生成之后的debug下的文件4.在Application Folder上点击右键->Add->项目输出->主输出…

Echarts中饼图-实现放大显示数据

示例 代码演示 option {tooltip: {trigger: item},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,radius: [40%, 70%],avoidLabelOverlap: false,label: {show: false,position: center},emphasis: {scale: true,//是否开启高亮后扇区的放大效果。s…

2024年HTML+CSS+JS 网页版烟花代码

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 直接跳到末尾 获取完整源码 在线体验地址&…

磁盘管理与文件系统

步骤&#xff1a; 1.建立分区&#xff08;必须分区&#xff09; 在文件中的格式开头为b &#xff0c;块设备 2.文件系统 因公安是个硬件设备&#xff0c;是一类软件的总称&#xff0c;管理文件的功能&#xff0c;下载文件占硬盘的空间 3.挂载 将硬盘与系统内的文件夹做关…

华为OD机试 - 两个字符串间的最短路径问题(Java JS Python C)

题目描述 给定两个字符串,分别为字符串 A 与字符串 B。 例如 A字符串为 "ABCABBA",B字符串为 "CBABAC" 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点 (0,0) 到 (0,A) 为水…

从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry&#xff08;&#xff09; 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警&#xff0c;当时…

【队列】【实现构造函数和方法】Leetcode 903 最近的请求次数

【队列相关】【实现构造函数和方法】Leetcode 903 最近的请求次数 解法1 利用列表的相关操作 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 利用列表的相关操作 1、新建类型为Queue<Integer>&#xff0c;表示…

原创AI图片可定制可商用

欢迎欣赏&#xff0c;一起交流学习。交流学习

C# WPF上位机开发(MVVM模式开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习过vue的同学都知道mvvm这个名词。从字面上理解&#xff0c;可能有点拗口&#xff0c;但是我们可以去理解一下它的优点是什么。mvc相信大家都明…

Havenask 分布式索引构建服务 --Build Service

Havenask 是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎&#xff0c;深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了 Havenask 分布式索引构建服务——Build Service&#xff0c;主打稳定、快速、易管理&#xff0c;是在线系…

websocket 介绍

目录 1&#xff0c;前端如何实现即时通讯短轮询长轮询 2&#xff0c;websocket2.1&#xff0c;握手2.2&#xff0c;握手过程举例2.3&#xff0c;socket.io 3&#xff0c;websocket 对比 http 的优势 1&#xff0c;前端如何实现即时通讯 在 websocket 协议出现之前&#xff0c;…

助力智能车损计算,基于高精度YOLOv8开发构建智能化车辆受损区域分割检测识别分析系统

车辆受损评估本身有专业的评估流程&#xff0c;本文并不是要探究这块的内容&#xff0c;而是想要通过技术手段来对车辆受损区域的面积做自动化的计算&#xff0c;在前面的博文中我们已经有了相关的开发实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于yo…

数据结构入门到入土——List的介绍

目录 一&#xff0c;什么是List&#xff1f; 二&#xff0c;常见接口介绍 三&#xff0c;List的使用 一&#xff0c;什么是List&#xff1f; 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容…

【智慧门店】东胜物联蓝牙网关助力解决方案商,推动汽车后市场企业智能化升级

截至2023年9月底&#xff0c;我国汽车保有量达3.3亿辆&#xff0c;后市场前景广阔。 随着人工智能、5G、物联网等新技术的普及&#xff0c;汽车后市场企业希望向智能化迈进&#xff0c;借助新兴科技的力量提升汽车维修、车辆保养等服务质量&#xff0c;满足消费者日益增长的需…

算法模板之单调栈和单调队列图文详解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️单调栈讲解1.1 &#x1f514;单调栈的定义1.2 &#x1f514;如何维护一个单…

关于SQL时间盲注(基于sleep函数)的手动测试、burpsuite爆破、sqlmap全自动化注入

SQL时间注入是一种常见的SQL注入攻击方式&#xff0c;攻击者通过在SQL语句中注入时间相关的代码&#xff0c;来获取敏感信息或者执行非法操作。其基本原理如下&#xff1a; 攻击者向Web应用程序中输入一段恶意代码&#xff0c;通过SQL语句查询数据库&#xff0c;并注入时间相关…