Mybatis 逆向工程

举报
Java李杨勇 发表于 2022/08/31 20:33:47 2022/08/31
【摘要】 逆向工程通常包括由数据库的表生成 Java代码和通过 Java代码生成数据库表。而Mybatisd的逆向工程是指由数据库表生成 Java 代码。程序员需要自己编写Mybaits 的SQL语句,但是Mybatis官方提供逆向工程可以针对单表自动生成Mybaits执行所需要的代码首先在gitgua下下载jar:https://github.com/mybatis/generator/releas...

逆向工程通常包括由数据库的表生成 Java代码和通过 Java代码生成数据库表。而Mybatisd的逆向工程是指由数据库表生成 Java 代码。
程序员需要自己编写Mybaits 的SQL语句,但是Mybatis官方提供逆向工程可以针对单表自动生成Mybaits执行所需要的代码

首先在gitgua下下载jar:https://github.com/mybatis/generator/releases
然后需要在pom.xml中配置

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

导入或引用数据表:

/*
Navicat MySQL Data Transfer

Source Server         : 0.30
Source Server Version : 50727
Source Host           : localhost:3307
Source Database       : usr

Target Server Type    : MYSQL
Target Server Version : 50727
File Encoding         : 65001

Date: 2022-08-12 18:53:32
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for button
-- ----------------------------
DROP TABLE IF EXISTS `button`;
CREATE TABLE `button` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `menu_id` bigint(20) unsigned NOT NULL COMMENT '菜单id',
  `code` varchar(11) NOT NULL COMMENT '编码',
  `name` varchar(11) NOT NULL COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='按钮表';

-- ----------------------------
-- Table structure for menu
-- ----------------------------
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `name` varchar(11) NOT NULL COMMENT '名称',
  `sort_no` smallint(5) unsigned NOT NULL DEFAULT '10' COMMENT '排序号',
  `parent_id` bigint(20) unsigned NOT NULL COMMENT '父节点id',
  `icon` varchar(200) DEFAULT NULL COMMENT '图标',
  `remark` varchar(20) DEFAULT NULL COMMENT '备注',
  `url` varchar(60) DEFAULT NULL COMMENT '菜单链接',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';

-- ----------------------------
-- Table structure for org
-- ----------------------------
DROP TABLE IF EXISTS `org`;
CREATE TABLE `org` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键id',
  `name` varchar(50) NOT NULL COMMENT '组织机构名称',
  `parent_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '上级机构id',
  `level` smallint(5) unsigned NOT NULL DEFAULT '1' COMMENT '树节点层级',
  `node_path` varchar(512) NOT NULL COMMENT '节点路径',
  `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态值;启用1是0否',
  `sort_no` smallint(5) unsigned NOT NULL DEFAULT '10' COMMENT '排序号;规则升序',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组织机构表';

-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '名称',
  `type` tinyint(3) unsigned DEFAULT NULL COMMENT '类型;2菜单3按钮4机构',
  `remark` varchar(20) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

-- ----------------------------
-- Table structure for role_ref_button
-- ----------------------------
DROP TABLE IF EXISTS `role_ref_button`;
CREATE TABLE `role_ref_button` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色id',
  `button_id` bigint(20) unsigned NOT NULL COMMENT '按钮id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色按钮关联表';

-- ----------------------------
-- Table structure for role_ref_menu
-- ----------------------------
DROP TABLE IF EXISTS `role_ref_menu`;
CREATE TABLE `role_ref_menu` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色id',
  `menu_id` bigint(20) unsigned NOT NULL COMMENT '菜单id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色菜单关联表';

-- ----------------------------
-- Table structure for role_ref_org
-- ----------------------------
DROP TABLE IF EXISTS `role_ref_org`;
CREATE TABLE `role_ref_org` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色id',
  `org_id` bigint(20) unsigned NOT NULL COMMENT '机构id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色机构关联表';

-- ----------------------------
-- Table structure for role_ref_user
-- ----------------------------
DROP TABLE IF EXISTS `role_ref_user`;
CREATE TABLE `role_ref_user` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `role_id` bigint(20) unsigned NOT NULL COMMENT '角色id',
  `user_id` bigint(20) unsigned NOT NULL COMMENT '用户id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色用户关联表';

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `username` varchar(20) NOT NULL COMMENT '用户名',
  `cname` varchar(20) NOT NULL COMMENT '中文名',
  `password` varchar(40) NOT NULL COMMENT '密码',
  `id_number` char(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_icelandic_ci DEFAULT NULL COMMENT '身份证号',
  `phone_number` char(11) DEFAULT NULL COMMENT '手机号',
  `star_level` tinyint(3) unsigned DEFAULT '1' COMMENT '星级;星级1-5',
  `education` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '学历;1初中2高中3中技4中专5大专6专科7本科8本科(函)9大学',
  `skill_level` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '技能等级;1初级工2中级工3高级工4技师5高级技师6助理工程师7工程师8高级工程师',
  `job_title` varchar(20) NOT NULL DEFAULT '接触网工' COMMENT '岗位职务',
  `professional` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '专业;1接触网专业',
  `start_work_date` datetime NOT NULL COMMENT '参加工作时间',
  `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态值;1启用0禁用',
  `updated` datetime NOT NULL COMMENT '更新时间',
  `org_id` bigint(20) unsigned DEFAULT NULL COMMENT '机构id',
  `sort` smallint(5) DEFAULT NULL COMMENT '排序号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  UNIQUE KEY `uk_job_number` (`id_number`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- ----------------------------
-- Table structure for user_ref_org
-- ----------------------------
DROP TABLE IF EXISTS `user_ref_org`;
CREATE TABLE `user_ref_org` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `user_id` bigint(20) unsigned NOT NULL COMMENT '用户id',
  `org_id` bigint(20) unsigned NOT NULL COMMENT '机构id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户机构关联表';

新建一个genertorConfig逆向生成的配置文件

<?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="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root" />
    <!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时 把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal -->
    <javaTypeResolver>
        <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

    <!-- targetProject:生成POJO类的位置 -->
    <javaModelGenerator
        targetPackage="com.tt.pojo" targetProject=".\src">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
        <!-- 从数据库返回的值被清理前后的空格 -->
        <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- targetProject:mapper映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="com.tt.mapper"
        targetProject=".\src">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>

    <!-- targetProject:mapper接口生成的的位置 -->
    <javaClientGenerator type="XMLMAPPER"
        targetPackage="com.tt.mapper" targetProject=".\src">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
    </javaClientGenerator>

    <!-- 指定数据表 -->
    <table tableName="website"></table>
    <table tableName="student"></table>
    <table tableName="studentcard"></table>
    <table tableName="user"></table>
</context>
</generatorConfiguration>

创建 test 类执行生成代码


public class GeneratorSqlmap {
    public void generator() 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);
    }

    // 执行main方法以生成代码
    public static void main(String[] args) {
        try {
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

OK 搞定

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。