mybatis根据数据库表结构自动生成实体类,dao,mapper

使用mybatis_plus实现根据数据表自动生成实体类entity、controller层、service层、mapper层 极大提高开发效率 我们都知道,在开发过程中最无聊并且又必不可少的一个过程就是根据数据表去创建相应的实体类entity,以及与前端交互的controlle层和业务实现service层接口及其实现类impl,以及与持久层(数据库)交接的mapper层接口。今天在这里我又总结了mybatis_plus的又一大功能,它可以极大的提高我们呢的开发效率!如果说上述的过程都可以自动生成的话,那将会大大的减轻开发者的工作量,提高开发效率!于是乎mybatis_plus的代码自动生成功能应运而生! 阅读详情

首先, pom需要引入

 <!-- mysql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.39</version>
    </dependency>
<!-- mybatis-->
 <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.3</version>
    </dependency>

复制代码

然后是mybatis生成器

import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.*;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import static org.mybatis.generator.internal.util.StringUtility.isTrue;

/**
 * Mybatis 注释生成器
 */
public class MyCommentGenerator implements CommentGenerator {
    private Properties properties;
    private Properties systemPro;
    private boolean suppressDate;
    private boolean suppressAllComments;
    private String currentDateStr;

    public MyCommentGenerator() {
        super();
        properties = new Properties();
        systemPro = System.getProperties();
        suppressDate = false;
        suppressAllComments = false;
        currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
    }

    public void addJavaFileComment(CompilationUnit compilationUnit) {
        // add no file level comments by default
        return;
    }

    /**
     * Adds a suitable comment to warn users that the element was generated, and
     * when it was generated.
     */
    public void addComment(XmlElement xmlElement) {
        return;
    }

    public void addRootComment(XmlElement rootElement) {
        // add no document level comments by default
        return;
    }

    public void addConfigurationProperties(Properties properties) {
        this.properties.putAll(properties);

        suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));

        suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
    }

    /**
     * This method adds the custom javadoc tag for. You may do nothing if you do
     * not wish to include the Javadoc tag - however, if you do not include the
     * Javadoc tag then the Java merge capability of the eclipse plugin will
     * break.
     *
     * @param javaElement the java element
     */
    protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) {
        javaElement.addJavaDocLine(" *");
        StringBuilder sb = new StringBuilder();
        sb.append(" * ");
        sb.append(MergeConstants.NEW_ELEMENT_TAG);
        if (markAsDoNotDelete) {
            sb.append(" do_not_delete_during_merge");
        }
        String s = getDateString();
        if (s != null) {
            sb.append(' ');
            sb.append(s);
        }
        javaElement.addJavaDocLine(sb.toString());
    }

    /**
     * This method returns a formated date string to include in the Javadoc tag
     * and XML comments. You may return null if you do not want the date in
     * these documentation elements.
     *
     * @return a string representing the current timestamp, or null
     */
    protected String getDateString() {
        String result = null;
        if (!suppressDate) {
            result = currentDateStr;
        }
        return result;
    }

    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
        if (suppressAllComments) {
            return;
        }
        StringBuilder sb = new StringBuilder();
        innerClass.addJavaDocLine("/**");
        sb.append(" * ");
        sb.append(introspectedTable.getFullyQualifiedTable());
        sb.append(" ");
        sb.append(getDateString());
        innerClass.addJavaDocLine(sb.toString());
        innerClass.addJavaDocLine(" */");
    }

    public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
        if (suppressAllComments) {
            return;
        }

        StringBuilder sb = new StringBuilder();

        innerEnum.addJavaDocLine("/**");
    
        sb.append(" * ");
        sb.append(introspectedTable.getFullyQualifiedTable());
        innerEnum.addJavaDocLine(sb.toString());
        innerEnum.addJavaDocLine(" */");
    }

    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        if (suppressAllComments) {
            return;
        }

        StringBuilder sb = new StringBuilder();

        field.addJavaDocLine("/**");
        sb.append(" * ");
        sb.append(introspectedColumn.getRemarks());
        field.addJavaDocLine(sb.toString());

        //      addJavadocTag(field, false);

        field.addJavaDocLine(" */");
    }

    public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
        if (suppressAllComments) {
            return;
        }

        StringBuilder sb = new StringBuilder();

        field.addJavaDocLine("/**");
        sb.append(" * ");
        sb.append(introspectedTable.getFullyQualifiedTable());
        field.addJavaDocLine(sb.toString());
        field.addJavaDocLine(" */");
    }

    public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {

    }

    public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
        if (suppressAllComments) {
            return;
        }
        
    }

    public void addGetterComment(Method method, IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {
        if (suppressAllComments) {
            return;
        }

        method.addJavaDocLine("/**");

        StringBuilder sb = new StringBuilder();
        sb.append(" * ");
        sb.append(introspectedColumn.getRemarks());
        method.addJavaDocLine(sb.toString());

        sb.setLength(0);
        sb.append(" * @return ");
        sb.append(introspectedColumn.getActualColumnName());
        sb.append(" ");
        sb.append(introspectedColumn.getRemarks());
        method.addJavaDocLine(sb.toString());

        //      addJavadocTag(method, false);

        method.addJavaDocLine(" */");
    }

    public void addSetterComment(Method method, IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {
        if (suppressAllComments) {
            return;
        }


        method.addJavaDocLine("/**");
        StringBuilder sb = new StringBuilder();
        sb.append(" * ");
        sb.append(introspectedColumn.getRemarks());
        method.addJavaDocLine(sb.toString());

        Parameter parm = method.getParameters().get(0);
        sb.setLength(0);
        sb.append(" * @param ");
        sb.append(parm.getName());
        sb.append(" ");
        sb.append(introspectedColumn.getRemarks());
        method.addJavaDocLine(sb.toString());

        //      addJavadocTag(method, false);

        method.addJavaDocLine(" */");
    }

    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
        if (suppressAllComments) {
            return;
        }

        StringBuilder sb = new StringBuilder();

        innerClass.addJavaDocLine("/**");
        sb.append(" * ");
        sb.append(introspectedTable.getFullyQualifiedTable());
        innerClass.addJavaDocLine(sb.toString());

        sb.setLength(0);
        sb.append(" * @author ");
        sb.append(systemPro.getProperty("user.name"));
        sb.append(" ");
        sb.append(currentDateStr);

        //      addJavadocTag(innerClass, markAsDoNotDelete);

        innerClass.addJavaDocLine(" */");
    }
}

然后是generator.xml 文件

<?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="my" targetRuntime="MyBatis3">

        <!-- 这里的type里写的是你的实现类的类全路径,即上面那个生成器所在的位置 -->
        <commentGenerator type="org.mybatis.generator.MyCommentGenerator">
        </commentGenerator>
        <!--连接数据库 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://远程地址:3306/数据库名" userId="数据库用户名"
                        password="密码"/>                                                             
        <!-- 实体类的地址 targetProject + targetPackage == 生成文件所在位置  根据表结构生成的实体类就在项目的com.common.model中-->
        <javaModelGenerator targetPackage="com.common.model"
                            targetProject="E:\common\src\main\java">                   
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- mapper文件地址 targetProject + targetPackage == 生成文件所在物理位置     生成的.mapper文件就在mybatis文件夹下-->
        <sqlMapGenerator targetPackage="mybatis"
                         targetProject="E:\src\main\resources">
            <property name="enableSubPackages" value="true"/>                                          
        </sqlMapGenerator>
        <!-- dao生成的存放地址 targetProject + targetPackage == 生成文件所在位置  生成的dao接口就在项目的com.dao中-->
        <javaClientGenerator targetPackage="com.dao"
                             targetProject="E:\src\main\java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>                                            
        </javaClientGenerator>
        <!-- tableName 数据库中表的名字    domainObjectName  生成的实体类名字以及加上Dao和Mapper组成的dao和mapper文件的名字 -->
        <table tableName="数据库表的名字" domainObjectName="生成实体类的名字"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="true"/>
        </table>

        
    </context>
</generatorConfiguration>

最后是要执行的的类,执行这个类, 就能生成相应的文件了, 执行完可能需要更新下项目才能看出效果

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class MyBatisGeneratorTest {
    public static void main(String[] args) {
        try {
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;   
           
             File configFile = new File("E:\\src\\main\\resource\\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);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
    }

}

 

 

 

按 Ctrl+C 复制代码

SSM框架下的实体类、DAO与Mapper代码自动生成教程 SSM框架是由Spring、SpringMVC和MyBatis三个流行的Java框架组合而成的,广泛应用于Web开发领域。它将企业级应用的业务逻辑、数据访问和Web层的展示分离,以此提供清晰的架构层次。SSM框架通过这种分层的方式,将代码的管理变得更为高效,极大地提高了开发和维护的便捷性。MVC设计模式是软件工程中的一种架构模式,主要用于组织代码,分离关注点。MVC代表模型(Model)、视图(View)和控制器(Controller)。 阅读详情

相关推荐

Spring Boot 3.5.4 + LangChain4j实战:用Milvus搭建企业级RAG问答系统(附阿里百炼API配置)

本文详细介绍了如何利用Spring Boot 3.5.4、LangChain4j与Milvus构建企业级RAG问答系统。内容涵盖从架构设计、阿里百炼API安全配置、Milvus部署优化,到RAG检索、会话管理等核心实现,并提供了生产级API设计、监控集成及性能优化等实战经验,旨在帮助开发者打造高可用、可维护的Java AI应用。

weixin_29054399的博客 610

mybatis-generator自动生成dao、mapping、bean配置详解(转)

<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用$

S1ow 1万+

JavaFx之集成FontAwesomeFX与JFoenix(十五)

本文详细介绍了如何在JavaFx项目中同时集成JFoenix和FontAwesomeFX,以创建现代化、美观的桌面应用界面。通过Maven依赖配置、动态代码创建和FXML静态声明两种方式,演示了如何将JFoenix的Material Design控件与FontAwesomeFX的丰富矢量图标完美结合,并提供了实战案例展示如何构建一个功能完善的现代化工具栏。

pepsi的博客 437

Mybatis根据数据库表自动生成实体类和xml映射文件

环境:maven+idea。 1. 需要的jar包 基本的spring和mybatis依赖包就不说了,在pom文件的build->plugins节点下需要添加(两个依赖包也可以直接添加到pom的依赖里面去,这里是为了直接通过maven的插件来生成。如果不是使用maven,可按照参考资料1来进行): <plugin> <groupId>org.mybati...

绝圣弃智-零的博客 1584

ETL第八章无人售货机零售项目实践

ETL实战项目——无人售货机

m0_52058217的博客 4418

从零开始STM32cubeide学习

使用的是正点原子的精英版,单片机是STM32F103ZET6,详细讲解完成跑马灯实验

weixin_44077208的博客 2283

Mybatis逆向工程,根据数据库表自动生成Mapper及POJO类及XML

Mybatis逆向工程,根据数据库表,自动生成Mapper接口及XML,数据库表对应的实体类

piscesL6的博客 1840

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 445

MybatisPlus 实体类与数据库表映射关系&MybatisPlus:ORM思想

在开发中可能会遇到MyBatis-Plus使用实体类属性进行SQL操作,但是不用存到数据库中去查找,这时候我们的实体中有这个属性,但是数据库的表中没有这个字段(即:实体类属性非数据库表字段),如果不做处理就会报错。例如MyUserTable 对应的数据库表为 my_user_table;TEMyUserTable 对应表名为t_e_my_user_table;在类名上方添加@TableName(“my_user_table”)在实体类的属性上面加上这个注解后,此字段就不会映射数据库了。......

qq_43842093的博客 2万+

君正T31x metartc集成测试

metartc为国内杨大侠部分开源的一款用于嵌入式领域webrtc库,它与谷歌官方webrtc相比,编译到君正平台的可执行文件仅有5M即可实现webrtc的通信。1. 目前实现的是基于开源版v5.0-b0版本做的简单修改,官方的好几个版本都多少缺点东西,我这里给整理了一下。目前是局域网连接的webrtc,后续尝试走stun和turn试一下NAT穿越的效果。

fsmpeg的博客 3159

CST局部网格加密实战:从基础设置到Meshgroup高效管理

本文详细解析了CST电磁仿真软件中的局部网格加密技术,重点介绍Meshgroup功能的高效管理方法。通过平行板电容等实战案例,阐述从基础设置到多级加密策略的完整流程,帮助用户精准提升关键区域仿真精度,同时优化计算资源使用效率。

grafana6viz的博客 695

Mybatis代码生成器Mybatis-Generator使用及配置详解

MyBatis Generator (MBG) 是 MyBatis 的代码生成器。它能够根据数据库表,自动生成 java 实体类、dao 层接口(mapper 接口)及mapper.xml文件。这大大减少了我们建立实体类、dao 接口及 mapper 映射文件的繁琐任务,可以节省很多时间,专注于业务层代码的开发。

qq_36577291的博客 1817

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1258

Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类

Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类

abc5232033的博客 2596

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

2021-08-24 mybatis逆向工程的使用方法

mybatis逆向工程的使用(代码生成器) 这个工具会根据表生成对应的实体类和dao层的接口以及Mapper文件 网站地址:http://mybatis.org/generator/configreference/xmlconfig.html <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generat

qq_45976712的博客 192

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring mvc 小记(五):MyBatis的代码生成器插件和分页插件

使用spring mvc已有2年之久,却还是停留在使用阶段,感觉这么下去不是办法,所以还是想往深处一探究竟。 MyBatis的代码生成器插件和分页插件。 加个关键字,不然文章多了之后都不清楚写的什么内容。国庆长假辣么长,却也就这么过完了,带着我亲爱的回了趟老家,哈哈,也算是完成了今年的一件大事,虽然过程不是特别完美,总体来说还是很好的。所以呢,假期也就没碰代码,现在补上一点,来提醒自己坚持写下

平凡的世界 650

STM32F407中文手册

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

Mybatis自动化生成代码

Mybatis是Java EE中比较主流的一种持久化orm框架,其缺点是不够灵活,需要写的代码较多,包括: 一个sql-map-config.xml 对应每个表的xml文件 对应每个表的实体POJO DAO(数据访问对象) 好在官方提供了mybatis-generator这个组件,经过对官方例子的学习,已经正式在项目中应用了自动化代码,腰不酸腿不疼了,大大提高了生产效率。...

weixin_30741653的博客 64

JAVA-自动生成代码-MySQL

myBatis+Spring+SpringMVC这种框架格式即可使用。当然SpringBoot也是可以的,亲测有效,主要根据MySQL数据库还有表字段,自动生成常用CRUD代码,用了之后才知道有多赞:)使用之前先定好基础BaseDao<T extends BaseEntity>和接口IBaseService<T extends BaseEntity>,代码即可按照既定好的方...

weixin_30508241的博客 184

Mybatis根据数据库表自动生成实体类和xml映射文件及dao

通常在开发过程中,大家都会使用mybatis操作数据库。 一般步骤都是先创建好数据库表,然后创建mybatis一套。 实体类、相应的dao和mybatis mapper文件,都相当麻烦。 mybatis提供了对应的插件工具,方便自动生成,不用手动敲代码了。 下面以maven、idea开发环境下的操作步骤为示例: 1. 配置pom文件 spring及mybatis依赖包: <d...

秀才的专栏 6002

IDEA MyBatis Plugins插件 自动生成实体类和mapper.xml

IDEA MyBatis Plugins插件 自动生成实体类和mapper.xml前言开发环境IDEA 下载MyBatis Generator 插件修改maven的pom文件新建一个generatorConfig.xmlgeneratorConfig.xml中的注意事项运行到这里你会发现真简单 前言 如何下载和使用MyBatis Generator 插件,只说代码,不讲感情。如果有问题还请多多指...

qq_43583597的博客 4万+

IDEA 通过generator自动生成实体类、dao以及mapper文件

步骤 在pom.xml文件中导入mybatis generator 自动生成代码插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</...

佛系小菜鸡的博客 3293

MyBatis逆向工程,自动生成dao、实体类、mapper文件

利用mybatis generator 自动生成生成dao、实体类、mapper文件基本步骤:(方法有多种,这里的方法是脱离项目工程,利用命令行建立文件。后续可以按需复制进工程)1、下载相应工具2、依据相应数据库导入相应数据库连接jar包3、编写generatorConfig.xml文件4、命令行模式,进入lib文件夹5、输入:java -jar mybatis-generator-core-1....

myblogzz的博客 7538

Mybatis自动生成mapper、实体类及mapper xml文件

项目中用的mybatis,依据数据库表手工写java实体类、mapper接口及mapper xml文件,是一件很郁闷的乏味的事情,而且容易出错,下面记录了一下本人用工具类自动生成这些文件的过程及碰到的坑。 1. maven pom.xml 配置(只列出需要用到的2个核心依赖库) <!-- jdbc driver --> <dependency> <groupId>org.postgresql</groupId> <artifactId&...

hello_junz的专栏 7455

Mybatis 自动生成实体类,dao层接口和mapper.xml文件

Mybatis 自动生成实体类,dao层接口和mapper.xml文件。 1、在idea中建立一个maven的工程,工程目录为: 2、在pom.xml添加以下代码 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs...

qq_43732691的博客 1267
上一篇: HBuilder报错cannot open git-upload-pack最终解决方法
下一篇: 如何html网页中嵌套其他html
seven_devil
博客等级 码龄9年 10粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值