Mybatis(八)之逆向工程

MybatisGenerator处理MySQLjson类型对应java的解决办法 mybatis的高级版本支持了json格式的字段,但是对于java而言,可以使用String与之对应。但是在使用MybatisGenerator时,生产的mapper.xml文件会生成Blob_Column_List这种额外的标签,而不是我们正常的熟悉String类型。 如下图所示: 如何去掉这些额外的东西,只需要修改配置文件里面的table标签的子标签columnOverride的jdbcType和javaType属性值 <columnOverride column="claim_request_ 阅读详情

转载自《mybatis学习笔记(18)-mybatis逆向工程》

企业实际开发中,常用的逆向工程方式:由数据库的表生成java代码。

官网链接

下载逆向工程

maven中央仓库MyBatis-Generator,下载地址:《mybatis-generator-core》

使用方法

运行逆向工程

根据官网说的(Running MyBatis Generator):

Running MyBatis Generator
MyBatis Generator (MBG) can be run in the following ways:

  • From the command prompt with an XML configuration
  • As an Ant task with an XML configuration
  • As a Maven Plugin
  • From another Java program with an XML configuration
  • From another Java program with a Java based configuration

还可以通过eclipse的插件生成代码

建议使用java程序方式,不依赖开发工具。

生成代码配置文件

<?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>
	<context id="testTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver" 
			connectionURL="jdbc:mysql://localhost:3306/mybatis01" 
			userId="root" 
			password="root">
		</jdbcConnection>
		<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 
			userId="yycg" password="yycg"> </jdbcConnection> -->

		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
			和 NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO类的位置 -->
		<javaModelGenerator targetPackage="com.zyj.ms.po"
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		<!-- targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="com.zyj.ms.mapper"
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.zyj.ms.mapper" targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		<!-- 指定数据库表 -->
		<table tableName="items"></table>
		<table tableName="orders"></table>
		<table tableName="orderdetail"></table>
		<table tableName="user"></table>
	</context>
</generatorConfiguration>

需要注意的位置:

  • javaModelGenerator,生成PO类的位置
  • sqlMapGenerator,mapper映射文件生成的位置
  • javaClientGenerator,mapper接口生成的位置
  • table,指定数据库表

执行生成程序

public class Generator {
	public static void main(String[] args) throws Exception {
		List<String> warnings = new ArrayList<String>();
		boolean overwrite = true;
		File configFile = new File("config/generatorConfig.xml");
		ConfigurationParser cp = new ConfigurationParser(warnings);
		Configuration config = cp.parseConfiguration(configFile);
		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
		myBatisGenerator.generate(null);
	}
}

生成后的项目内容

这里写图片描述

使用生成的代码

需要将生成工程中所生成的代码拷贝到自己的工程中。

测试ItemsMapper中的方法

public class ItemsMapperTest {

    private ApplicationContext applicationContext;
    private ItemsMapper itemsMapper;

    //在setUp这个方法得到spring容器
    @Before
    public void setUp() throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
        itemsMapper = (ItemsMapper) applicationContext.getBean("itemsMapper");
    }

    //根据主键删除 
    @Test
    public void testDeleteByPrimaryKey() {

    }

    //插入
    @Test
    public void testInsert() {
        //构造 items对象
        Items items = new Items();
        items.setName("手机");
        items.setPrice(999f);
        items.setCreatetime(new Date());
        itemsMapper.insert(items);
    }

    //自定义条件查询
    @Test
    public void testSelectByExample() {
        ItemsExample itemsExample = new ItemsExample();
        //通过criteria构造查询条件
        ItemsExample.Criteria criteria = itemsExample.createCriteria();
        criteria.andNameEqualTo("笔记本");
        //可能返回多条记录
        List<Items> list = itemsMapper.selectByExample(itemsExample);

        System.out.println(list);

    }

    //根据主键查询
    @Test
    public void testSelectByPrimaryKey() {
        Items items = itemsMapper.selectByPrimaryKey(1);
        System.out.println(items);
    }

    //更新数据
    @Test
    public void testUpdateByPrimaryKey() {

        //对所有字段进行更新,需要先查询出来再更新
        Items items = itemsMapper.selectByPrimaryKey(1);

        items.setName("手机");

        itemsMapper.updateByPrimaryKey(items);
        //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新
        //itemsMapper.updateByPrimaryKeySelective(record);
    }
}

问题总结

1、selectByExample和selectByExampleWithBLOBs

<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.taotao.pojo.TbItemParamExample" >
    select
    <if test="distinct" >
		distinct
    </if>
    <include refid="Base_Column_List" />
		from tb_item_param
    <if test="_parameter != null" >
		<include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null" >
		order by ${orderByClause}
	</if>
</select>
<select id="selectByExampleWithBLOBs" resultMap="ResultMapWithBLOBs" parameterType="com.taotao.pojo.TbItemParamExample" >
	select
	<if test="distinct" >
		distinct
	</if>
	<include refid="Base_Column_List" />
		,
	<include refid="Blob_Column_List" />
		from tb_item_param
	<if test="_parameter != null" >
		<include refid="Example_Where_Clause" />
	</if>
	<if test="orderByClause != null" >
		order by ${orderByClause}
	</if>
</select>

可以看到,selectByExampleWithBLOBs比selectByExample多拼接了Blob_Column_List

<sql id="Base_Column_List" >
	id, item_cat_id, created, updated
</sql>
<sql id="Blob_Column_List" >
	param_data
</sql>

注意:当该表中含有text类型的字段时,就会生成Blob_Column_List,并把其与其他基础类型字段分开,如果调用selectByExample,则查询不到text类型的字段。

SpringBoot+MyBatis实现逆向工程 之前一直想要尝试一下自己动手操作一把Mybatis的逆向工程,但是因为各种原因,迟迟未实现,今天正好有空,就试了一把。在搭建的过程当中也遇到了不少的坑,现在将搭建过程和将遇到的坑记录下来,方便自己和各位共享,如果不对之处或有更好的方法,欢迎指出。话不多说,直接上。。。 阅读详情

相关推荐

Mybatis之逆向工程

mybatis是一个ORM框架,ORM对象映射数据库,通过使用对象来操作数据库。逆向工程是指反过来使用数据库反向创建实体类,接口,映射文件。逆向工程特点:方便开发,简化操作。单表的增删改查都会包括,但是需要注意的是一旦涉及到多表,就需要手动创建。

weixin_73509711的博客 3108

ResultMapWithBLOBs Blob_Column_List

数据库有四种text,分别对应四种blob。 TinyBlob 最大长度255个字元(2^8-1) ==>255 TinyText 最大长度255个字元(2^8-1) Blob 最大长度65535个字元(2^16-1) ==>64KB Text 最大长度65535个字元(2^16-1) MediumBlob 最大长度 16777215 个字元(2^24-1) ==>16MB MediumText 最大长度 16777215 个字元(2^24-1) LongBlob 最大长度4294967.

白小白 2058

MyBatis的逆向工程详细步骤操作

所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。关于 MyBatis 的逆向工程有两个版本:对应在 targetRuntime 的两个值:java复制代码1. MyBatis3Simple:生成的是基础版,只有基本的增删改查。2. MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。注意:MyBatis3 增强版,多出来的这个CarExample。

Javajdkbz的博客 1014

mybatis generator去掉注释

直接在MBG配置文件中加入以上配置就可以了

Brady74的博客 5964

Unity线性空间下PSD透明贴图黑边问题:原理分析与三种解决方案

在计算机图形学中,颜色空间转换与Alpha混合是渲染管线的基础环节。伽马空间与线性空间的差异源于显示设备与人眼感知的特性,现代渲染引擎采用线性工作流以实现更真实的光照计算。然而,当图像处理软件(如Photoshop)导出的纹理数据与游戏引擎(如Unity)的预期格式不匹配时,就会引发技术问题,影响视觉保真度与开发效率。具体表现为,在线性空间下进行Alpha Blend混合时,带透明通道的纹理边缘常出现异常黑边或颜色失真,其核心根源在于纹理数据是否经过“预乘”处理与sRGB标记的解读冲突。这一问题的解决对于提

weixin_34198762的博客 379

YOLO-FastestV2从零部署到移动端推理实战手册

本文详细介绍了YOLO-FastestV2从零开始的完整部署流程,涵盖环境搭建、模型训练、格式转换及移动端部署。通过实战步骤,指导开发者将这一轻量级目标检测模型成功部署到Android设备,实现实时推理。文章重点解析了PyTorch到NCNN的模型转换与优化,助力移动端AI应用开发。

l1k9j8h7g6的博客 668

mybatis-generator mapper文件 添加字段

根据反向工程生成的mapper.xml文件结构,描述。 ID 描述 BaseResultMap 除了Blob格式的map ResultMapWithBLOBs 所有列的map Example_Where_Clause 查询条件,确定某些行 Update_By_Example_Where_Clause Base_Column_List 除了blob的列集合 Bl...

Cribug8080的博客 2595

Agent测试框架Harbor指南

Harbor是一个AI Agent单元测试框架,用于自动化测试AI代理在容器环境中的任务执行能力。它支持18+种AI代理,通过沙箱隔离和自动验证机制评估任务完成情况。任务必须具有可编程验证的输出结果,适合代码、数据、系统等可量化任务,不适合创意写作等主观任务。Harbor采用CLI操作方式,核心架构包含Job管理、Trial执行和验证器三个层级,执行流程包括环境启动、Agent执行和结果验证。任务目录包含指令文件、配置文件、Docker环境定义和测试脚本等必需组件,通过测试脚本自动判断任务完成质量。

loo_Charles_ool的博客 1394

Spring Boot + Mybatis——RowBoundsPlugin造成的[Mapped Statements collection already contains value]解决方案

基本概念 RowBoundsPlugin:通过ResultSet的游标实现的分页查询插件,容易出现性能问题 <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"> 问题描述 Caused by: java.lang.IllegalArgumentException: Mapped Statements ...

无限迭代中...... 1466

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5731

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南——原生“龙虾”OpenClaw快速部署、问题速查与避坑指南

至此,你已经完成了从选购服务器到配置AI大脑的全过程。无论是想在云上养一只7x24小时的“龙虾”,还是在本地体验AI Agent的魅力,上述指南都提供了明确的路径。下一步,就是接入飞书、钉钉或QQ,让你的OpenClaw真正开始“干活”赚钱了 [citation:6]。

冯·诺依曼 989

【MyBatis笔记整理八】逆向工程

MyBatis 实现 逆向工程 的组件是 MyBatis Generator,简称 MBG,是专门为 MyBatis 框架定制的代码自动生成解决方案,MBG 可以根据数据表结构快速生成对应的 Mapper.xml、Mapper 接口、实体类,并且支持基本的 CURD 操作,但是业务逻辑相对复杂的操作需要开发者手动完成。

小异常的博客 576

通过理解 sk_buff 深入掌握 Linux 内核自定义协议族的开发实现

在。

数字人生 458

Mybatis(八)逆向工程

     mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、pojo等)有了sql表的结构后, 我们就可以利用逆向工程直接生成相应的Dao和JavaBean代码, 以及mapper.xml文件,这样能够大大减少我们平时开发的工作量。 但是使用逆向工程局限性, 逆向工程方法只能...

weixin_30567471的博客 106

基于混合智能框架的景区边界范围预测与补全系统

摘要 本文提出一种混合智能框架,结合随机森林模型和GIS规则约束,解决景区边界缺失问题。系统基于Python和ArcGIS平台,利用多源地理空间数据训练随机森林分类器预测景区范围,并集成地形、水文、道路等GIS规则进行优化。实验结果表明,该方法能有效预测15000个景区的边界,精度优于单一模型。创新点在于: 1)数据驱动与知识驱动相结合的混合智能范式; 2)面向全国尺度的大规模边界补全; 3)提供完整的Python+ArcGIS实现方案。该系统为景区精细化管理提供了技术支撑,具有实用价值。

huanghm88的专栏 281

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MyBatis(八) —— 逆向工程

MyBatis 逆向工程就是使用MyBatis提供的一个叫做MyBatis Generator的工具,帮助我们自动生成mapper、pojo、sql等,省去很多步骤,提高开发效率。

蜡笔小达新的博客 353

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MyBatis(八):逆向工程

文章目录1. 创建逆向工程1.1 添加依赖和插件1.2 创建核心配置文件1.3 创建逆向工程的配置文件1.4 执行MBG插件的generate目标2. QBC2.1 查询2.2 增改 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapper接口 Mapper映射文件 1. 创建逆向工程 1.1 添加依赖和插件 <dependencies>

平什么阿的博客 465

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

mybatis系列:八、逆向工程

mybatis 逆向工程简单概述配置文件注意事项 简单概述 使用官方网站的mapper自动生成工具mybatis-generator-core-1.3.2来生成po类和mapper映射文件。 配置文件 jar包 log4j-1.2.16.jar mybatis-3.2.3.jar mybatis-generator-core-1.3.2.jar mysql-connector-java-5.1.2...

laonxs的博客 179

Mybatis的自我修养之八(逆向工程)

逆向工程 作用:根据数据库表生成实体和接口方法 在pom.xml中配置依赖和插件 主配置文件 启动方式 ①测试方法 ②pom.xml启动 运行结果

LZRLCYZYQ的博客 336

Mybatis篇-(八)逆向工程(MBG)

八、Mybatis-逆向工程 MyBatis Generator: 简称MBG,是一个专门为MyBatis框架使用者定 制的代码生成器,可以快速的根据表生成对应的 映射文件,接口,以及bean类。支持基本的增删 改查,以及QBC风格的条件查询。但是表连接、 存储过程等这些复杂sql的定义需要我们手工编写 mbg下载地址 mbg的使用 导入jar包 配置文件的编写 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generato

cV展示的学习园 328

SpringBoot 学习系列 | (八)IDEA Mybatis 生成逆向工程(generator)

本篇将主要介绍Mybatis的逆向工程如何在SpringBoot环境上实现。 环境准备 IDEA、SpringBoot、Mybatis 目录结构 表结构 maven依赖的包与插件(只贴出Mybatis相关包) <!--mysql数据库连接--> <dependency> <...

Coder编程的博客 1907

MyBatis逆向工程

例如,如果数据库中有一个名为“user”的表,包含“id”、“username”和“password”列,那么逆向工程会生成一个名为“User”的Java类,该类有“id”、“username”和“password”三个属性。trimStrings属性:逆向工程是通过解析数据库中的表生成Java的实体类(POJO)和mapper接口以及映射文件的,通过解析表中的字段名将其转换为实体类的属性,如果字段名有空格,在这里设置true,trimStrings会自动去掉字段前后的空格,false则反之。

m0_73698492的博客 3057

【MyBatis】MyBatis的逆向工程

⑦添加 SqlSessionUtils 工具类。MBG插件的generate目标。④创建逆向工程的配置文件。⑤创建log4j.xml。

Javascript_tsj的博客 3037

MyBatis的逆向工程

按照惯例,MyBatis的核心配置文件通常命名为mybatis-config.xml,并将其置于项目的资源目录下,如src/main/resources。⑧ databaseIdProvider:用于在多数据库环境下识别不同数据库的方言,以便在映射文件中使用条件语句编写针对特定数据库的SQL。⑨ mappers:配置映射器(Mapper接口或XML映射文件),可以逐个指定文件路径,也可通过包扫描自动发现映射文件。⑥ plugins:注册插件,用于扩展MyBatis的功能,如拦截器、分页插件等。

qq_65285086的博客 1628
上一篇: Mybatis(七)之整合Spring
下一篇: SpringMVC(一)之入门
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值