Mybatis 逆向工程使用|学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习 Mybatis 逆向工程使用

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)Mybatis 逆向工程使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/703/detail/12411


Mybatis 逆向工程使用


内容介绍:

一、Mybatis 逆向工程使用

二、小结


一、Mybatis 逆向工程使用

1、代码生成

使用 Mybatis 逆向工程针对数据表生成 CURD 持久层代码

使用能够生成当前数据库中九张表的基本增删改查的代码,再去操作数据库时持久层用的Mybatis 的框架,对于基本的增删改查在公司当中不会从头开始去写,会去用逆向工程生成代码,到时候对于基本的增删改查就可以直接去使用

逆向工程使用需要打开我的资料,在里面有一个工程为 Mybatis reverse,把工程加载到当前的 idea 中去,里边的结构非常简单,有一个基本的类,这个类当中有一个方法,然后里边有一个配置文件以及一个日志的配置文件,日志的配置文件不是必须的,是为了查看日志的信息。

image.png

import ...

public class GeneratorSqlmap {

public void generator() throws Exception{

List<string> warnings=new ArrayList<~>();

boolean overwrite =true:

File corfigFile = new File( pathname:"E:\\RocketMO\资料\\Mybatis-Reverse\srcmain resou

ConfigurationParser cp=new

ConfigurationParser(warnings);

Configuration config=cpparseConfiguration(configFile);

DefaultshellCallback callback=new

DefaultShellCallback(overwrite):

MyBatisGenerator

myBatisGenerator=newMyBatisGenerator(config,

callback, warnings);

myBatisGeneratorgenerate(callback:null);

public static void main(string[] args) throws Exception {

try {

GeneratorSqlmap generatorSqlmap=new

Generatorsqlmap(); generatorSqlmapgenerator();

} catch(Exception e) {

e.printstackTrace();

}

}

}

这里提供了一个方法,直接去运行方法就能够去针对当前的数据库当中所有的表去生成基本的增删改查的代码

image.png

怎么去生存?怎么知道当前数据库在哪里有哪些表?都得需要在配置文件中进行说明,配置文件首先第一个是数据源,数据源联系的是 mysql ,然后用户名和密码进行配置,使用逆向工程,在生成持久层的代码主要生成几个方面,总体来讲生成三个方面。

<generatorConfiguration>

<context id="testTables" targetRuntime="MyBatis3">

<commentGenerator>

<!--是否去除自动生成的注释true:是:false:否->

<property name="suppressAllComments" value="true" />

</commentGenerator>

<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->

<jdbcConnection driverclass="com.mysq1.jdbc.Driver"

connectionURL="jdbc:mysql://1acalhost:3306/trade"

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.BiqDecimal--><javaTypeResolver>

<property name="forceBigDecimals" value="false" />

</javaTypeResolver>

//第一个方面是基本的 PO 类,进行一个配置在去进行配置的时候需要指定的一个当前生成 pojo 的类所处的包,指定一个包名,然后下边去指定的类所生成的位置,进行配置,这是第一个部分关于 PO 类的生成。

<!-- targetProject:生成PO类的位置-->

<javaModelGenerator

targetPackage="com.itheima.shop.pojo"

targetProject="E:\RocketMQ\资料

Mybatis-Reverse\src\main java">

<!--enableSubPackages:是否让schema作为包的后缀-->

<property name="enableSubPackages"value="false" />

<!-从数据库返回的值被清理前后的空格-->

<property name="trimstrings" value="true" />

<javaModelGenerator>

<!--targetProject:mapper映射文件生成的位置-->

<sq1MapGenerator

targetPackage="com.itheima.shop.mapper"

targetProiect="E:\RocketMo\资料\Mvlatis-Reverse\src\ma

in\resources">

<!--enableSubPackaaes:是否让让schema作为包的后缓-->

<property name="enableSubPackages" value="false" />

</sqlMapGenerator>

<!--targetPackage:mapper接口生成的位置-->

<javaClientGenerator type="XMLMAPPER"

targetPackage="com.itheima.shop.mapper"

targetProject="E:\RocketMo\资料

\Mybatis-Reverse\src\mainl java">

<!--enableSubPackages:是否让让schema作为包的后缓-->

<property name="enableSubPackages" value="false" />

</javaclientGenerator>

//在持久层进行Mybatis开发的时候,要去用到 map 映射文件,map 映射文件可以帮助自动的生成出来需要去指定包名以及对应文件所生成的位置,同样可以帮去生成 mapper 接口, mapper 接口的名以及 mapper 接口所处的位置,mapper 接口与 map 的映射文件通常包名是一样的,都叫做 

com.itheima.shop.mapper

<!-- 指定数据库表 -->

<table schema="" tableName="trade coupon"></table>

<table schema="" tableName="trade_goods"></table>

<tableschema=""

tableName="trade_goods_number_log"></table>

<table schema=!" tableName="trade_order"></table>

<table schema="" tableName="trade pay"></table>

<table schema="" tableName="trade user"></table>

<tableschema="" tableName="trade_user_money_log"></tab le>

<tableschema="" tableName="trade_mq_consumer_log"></ta ble>

<table schema="" tableName="trade_mq_producer_temp"> </table>

<!--有些表的字段需要指定java类型

<table schema=""tableName="">

<columnOverride column="" javaType="" />

</table> --></context>

</generatorConfiguration>

需要去指定一下针对数据库当中的所有的表达进行逆向工程,把九张表分配到这来之后,关于配置文件的编写基本上完成,对于大家来讲将来可能只需要改数据源,用户名,密码,数据库的 U2需要去指定 PO 类,mapper 映射文件以及 mapper 接口的生成位置,其他地方其实基本上不用去变

2、代码导入

(1)将实体类导入到 shop-pojo 工程

(2)在服务层工程中导入对应的 Mapper 类和对应配置文件

逆向工程已经把所添加需要的依赖加过来了,主要有 logo4g、my batis 的依赖以及 mybatis 逆向工程生成器的依赖以及数据库,数据库加了两个驱动,一个是 mysql,一个是 onacle ,需要看当前数据库到底用的是什么。

xmlns:xsi="http://www.w3.org/2001/XMLschema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0

<modelVersion>4.0.0</modelVersion>

<groupId>com.pinyougou</groupId>

<artifactId>mybatis-reverse</artifactid>

<version>0.0.1-SNAPSHOT</version

<dependencies>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactid>

<version>1.2.17</version></dependency>

<dependency>

<groupId>org.mybatis</groupid>

<artifactId>mybatis</artifactid>

<version>3.2.3</version>

</dependency>

<dependency>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-core</artifactid>

<version>1.3.2</version>

</dependency>

</dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactid>

<version>5.1.30</version>

</dependency>

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactid>

<version>11.2.0.1.0</version>

</dependency>

</dependencies>

<project>

把两个的驱动都可以拿过来弄完之后可以直接的去执行,注意在 generator 方法当中要去找配置文件以磁盘的绝对路径去找配置文件,然后直接的去执行

public class GeneratorSqlmap{

public void generator() throws Exception{

List<string> warnings=new ArrayList<~>();

boolean overwrite = true;

File configFile=new File(pathname:"E:\\RocketMq\\资料\\Mybatis-Reverse\\src\\main\\resour

ces\\generatorConfig.mxl)

ConfigurationParser cp=new

ConfigurationParser(warnings); Configuration

config=cpparseConfiguration(configFile);

DefaultshellCallbackcallback=new

DefaultshellCallback(over write);

MyBatisGeneratormyBatisGenerator=new

MyBatisGenerator(c onfig

callback,warnings);

myBatisGeneratorgenerate(callbacknull);

}

public static void main(string[] args) throws Exception {

try {GeneratorSqlmapgeneratorSqlmap=new

GeneratorSqlmap(); generatorSqlmapgenerator();} catch

(Exception e){

e.printstackTrace();

}

}

}

执行结果:

2019-07-20 19:09:15,718[main] DEBUG [org.mybatis. generator.internal.db.DatabaseIntros

pector]-Found

column msg_tag,data type 12,

2019-07-20 19:09:15,718[main] DEBUG [org.mybatis. generator.internal.db.DatabaseIntros

pector]-Found column msg_key,data type 12,

2019-07-20 19:09:15,718[main] DEBUG [org.mybatis. generator.internal.db.DatabaseIntros

pector]-Found column msg_body,data type 12,

2019-07-20 19:09:15,718[main] DEBUG [org.mybatis. generator.internal.db.DatabaseIntros

pector]-Found column msg_status,data type 4,

2019-07-20 19:09:15,718[main] DEBUG [org.mybatis. generator.internal.db.DatabaseIntros

pector]-Found column create_time,data type 5,

Process finished with exit code 0

出来之后打开来看,pojo 类全都有

需要把 pojo 类直接复制到项目中,shop pojo 存放的是 pojo类,在这个地方把刚才的那些类直接的复制过来,复制过来之后后期在开发的时候比较简单。

package com.itheima.shop.pojo;

import java.util.Date;

public class TradeGoodsNumberLog extends TradeGoods

NumberLogKey{

private Integer goodsNumber;

private Date logTime;

public Integer getGoodsNumber(){ return goodsNumber;}

public void setGoodsNumber(Integer goodsNumber)

{this.go odsNumber=goodsNumber;

public Date getLogTime(){ return logTime; }

public void setLogTime(Date logTime){ this.logTime =logTime; }

}

对于上面 mapper 的接口就找对应的服务,然后把它放到里面去,比如现在里面的 coupon-service 是优惠券的接口,要把它要放在 couple service 里,建一个文件夹放到这里面去,

com.Itheima.shop

最好保持包名一致,shop map 在这个目录下面在这个地方最好把名规范一下,com.Itheima.shop.mapper 然后去复制过来

映射文件需要去放到 mapper 下面把 resources 下面 map 映射文件挪过去。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper

3.0//EN" "http://mybatis.orgp/yOacis-<mapper

namespace=

"com.itheima.shop.mapper.TradeCouponMapper" >

<resultMap

id="BaseResultMap"type="com.itheima.shop.pojo.TradeCoupon" ><id column="coupon id" proper

ty="couponId"

jdbcType="BIGINT" />

<result column="coupon_price" property="couponPrice"

jdbcType="DECIMAL" /><result column="user id" property="userid"

jdbctype="BIGINT" />

<result column="order_id" property="orderId"

jdbctype="BIGINT" /><result column="is_used"

property="isUsed" jdbcType="INTEGER" />

<result column="used_time" property="usedTime"

jdbcType="TIMESTAMP" /></resultMap>

<sq1 id="Example_Where_Clause" >

<where >

<foreach collection="oredCriteria” item="criteria" separator="or">

<if test="criteria.valid" >

<trim prefix="(" suffix=")"prefixOverrides="and" >

<foreach collection="criteria.criteria" item="criterion">

<choose >

<whentest="criterion.noValue">and ${criterion.condition}

</when>

<when test="criterion.singleValue" >

and ${criterion.condition} #{criterion.value}</when>

<when test="criterion.betweenValue" >

and ${criterion.condition} #{criterion.value} and

#{criterion.secondValue

里面所生产的 mapper 文件和写的都是差不多的,里面有namespace点过来,是自己所写的 mapper 结构。

image.png

可以按照同样的方式把对应的 goods-service 、order-service、shop-user-service 对应的 master接口,还有 mapper 映射文件复制到对应的工程当中,可以把这些准备工作提前都做好。


二、小结

1代码生成

使用 Mybatis 逆向工程针对数据表生成 CURD 持久层代码

2代码导入

将实体类导入到 shop-pojo 工程

在服务层工程中导入对应的Mapper类和对应配置文件

主要的目的是为了简化对于持久层基本的增删改查不用自己去写直接用生成的代码去编写就可以。如果代码没有满足需要,可以进行二次开发,然后它去生成出来之后将对应的代码,倒到对应的过程当中,其中实体类都在 pogo 当中,然后服务层的工程当中导对应的 Mapper 的接口类以及自己的映射文件都拿过去。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
XML Java 数据库连接
mybatis-plus逆向工程详解
mybatis-plus逆向工程详解
407 0
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
25天前
|
Java 数据库连接 数据库
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
15 1
|
2月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
145 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
7月前
|
Java 数据库连接 数据库
Mybatis逆向工程笔记小结
Mybatis逆向工程笔记小结
|
6月前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
|
7月前
|
XML Java 数据库连接
Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
【5月更文挑战第10天】Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
87 6
|
7月前
|
数据库
Springboot+mybatis-plus逆向工程生成代码器
Springboot+mybatis-plus逆向工程生成代码器
|
7月前
|
SQL Java 关系型数据库
MyBatisPlus学习笔记(SpringBoot版)
MyBatisPlus学习笔记(SpringBoot版)
510 0
下一篇
DataWorks