Mybatis-Generator(MBG)教程与Idea的MBG插件

简介

Mybatis Generator(MBG),下面我们统称为MBG,是一个Mybatis和iBatis的代码生成器。他可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象。这样减少了项目新建时各种配置对象,配置文件和数据库交互的麻烦。 MBG的解决了一些数据库中比较重要的操作,如CRUD(插入,查询,更新,删除)。

有关Mybatis具体生成事项,可以参考Mybatis Generator官方文档
Mybatis MBG设计用于开发环境中的交互,可以用在Ant 任务,Maven插件,持续集成环境。有关Mybatis的一些注意事项包括如下:

  • MBG 会自动合并已经存在并且和新生成的文件重名的 XML。MBG 不会覆盖您对已经生成xml所做的修改。 您可以反复的运行而不必担心失去您自定义的更改。 Mybatis Gnerator会更新上次运行生成的元素。
  • MBG 不会合并 Java 文件,如果你对一些MBG生成的文件做了修改,再次生成的时候, 您可以手动合并这些更改。 当您使用Eclipse 插件时, MBG 可以自动合并 Java 文件.

快速入门

概念

使用MBG的基本步骤
1、创建和补全Mybatis MBG的配置文件,你至少要指定以下内容

  • <jdbcConnection>素,指定如何连接数据库
  • <JavaModelGenerator>,java模型对象生成位置
  • <SqlMapGenerator>,SQL映射文件位置
  • 可选的,<javaClientGenerator>,java客户端接口和类文件位置
  • 至少一个<table>元素

2、把配置文件保存在方便的位置
3、运行MBG配置文件,可以通过Ant,Maven,Java代码等
4、修改Mybatis的一些配置,以便自己能够使用MBG生成的代码

创建项目

1、借用原来的之前的Mybatis入门教程,我们创建me.aihe.testdao包,具体结构如下。

img_ce9d53a39acf07532d9ec7c63290b4f1.png
项目结构

2、创建MBG配置文件,如果使用Idea集成开发环境,可下载Mybatis plugin,省了不少功夫,极大的方便了我们的操作。

img_baaaf624f2b3ae56c8ce5fedcc29b001.png
新建MBG配置文件

3、修改MBG配置文件内容如下

<?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><!-- !!!! Driver Class Path !!!! --><classPathEntry location="/Users/aihe/.m2/repository/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar" /><!--<properties resource="classpa"--><context id="context" targetRuntime="MyBatis3"><commentGenerator><property name="suppressAllComments" value="false"/><property name="suppressDate" value="true"/></commentGenerator><!-- !!!! Database Configurations !!!! --><jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="aihe" password="123456"/><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- !!!! Model Configurations !!!! --><javaModelGenerator targetPackage="me.aihe.testdao" targetProject="/Users/aihe/IdeaProjects/MybatisCook/src/main/java"><property name="enableSubPackages" value="false"/><property name="trimStrings" value="true"/></javaModelGenerator><!-- !!!! Mapper XML Configurations !!!! --><sqlMapGenerator targetPackage="me.aihe.testdao" targetProject="/Users/aihe/IdeaProjects/MybatisCook/src/main/resources"><property name="enableSubPackages" value="false"/></sqlMapGenerator><!-- !!!! Mapper Interface Configurations !!!! --><javaClientGenerator targetPackage="me.aihe.testdao" targetProject="/Users/aihe/IdeaProjects/MybatisCook/src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="false"/></javaClientGenerator><!-- !!!! Table Configurations !!!! --><table tableName="Test" enableCountByExample="true" enableDeleteByExample="true" enableSelectByExample="true"enableUpdateByExample="true"/></context>
</generatorConfiguration>

注意在<commentGenerator>里面有个suppressAllComments的属性,如果填写为true的话,所有生成的模型文件虽然会没有注释,但是Mapper.xml不会覆盖,而是追加在后面,会导致运行出错。建议设置为false

4、运行MBG
运行方式有很多种,基于Ant Task,Maven 插件,Java程序等,这里我们使用Maven Plugin。
主意:建议大家下载Idea的Maven Helper插件,方便了很多maven的操作。
配置Pom.xml文件,添加MBG插件

   <build><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><configuration><configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile></configuration></plugin></plugins></build>
img_625ce53a2175bfbc28fdb4552d82593f.png
运行Maven插件

5、查看结果

img_bb6050f0353f1afdca24228873436f3d.png
生成结果
img_28e21ef3496d326ad977d69bfa2d8a1a.png
生成结果

6、测试生成的代码
我们的数据库内容如下

img_3bb51e4b3f7838b5d5897e621988596f.png
Test表内容

测试程序

  @Testpublic void test11(){InputStream inputStream = null;SqlSession sqlSession = null;try {inputStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory mSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = mSqlSessionFactory.openSession();TestMapper testMapper = sqlSession.getMapper(TestMapper.class);TestExample testExample =  new TestExample();TestExample.Criteria criteria = testExample.createCriteria();criteria.andContentLike("%内容%");List<me.aihe.dao.Test>  testList = testMapper.selectByExample(testExample);System.out.println(testList);//            Good good = goodMapper.getGoodAndCouponMap2(1);
//            System.out.println(good);sqlSession.commit();} catch (IOException e) {e.printStackTrace();} finally {if (sqlSession != null) {sqlSession.close();}}}

运行结果如下:

img_0835d4e4adf1cbc1232b87cee2c2a758.png
运行结果

插件

Mybaitis Generator有一些官方的插件,可以更好的定制生成的文件内容。

//缓存插件,生成的Mapper.xml文件中添加缓存配置<plugin type="org.mybatis.generator.plugins.CachePlugin"></plugin>//生成的Model文件,加上toString方法
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"</plugin>
//生成的Model文件实现Serializable接口
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
//虚拟主键插件..
<plugin type="org.mybatis.generator.plugins.VirtualPrimaryKeyPlugin"></plugin>

还有一些额外的插件,可以用途比较少,在这里就先不提到了。

总结

本文主要演示了一种通过Maven 插件来使用MBG生成JavaBean,Mapper文件的案例。最后测试了生成代码的可用性。Mybatis Generator确实方便了很多我们的工作。

小提示

如果想要生成Example类,记得在Context标签上的targetRuntime为Mybatis3。

参考

  • Mybatis入门教程
  • Mybatis Generator文档

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

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

相关文章

Windows Server 2008 RemoteApp---发布应用程序

本章节一起来体验RemoteApp应用程序发布功能&#xff0c;本功能利用了微软应用程序虚拟化技术&#xff0c;打个比方&#xff0c;我这台电脑上并没有安装Excel2010&#xff0c;但我现再要用Excel2010该怎么办&#xff1f;难道去找Office2010的光盘来安装吗&#xff1f;不用这么麻…

.NET 中密封类的性能优势

.NET 中密封类的性能优势Intro最近看到一篇文章 Performance benefits of sealed class in .NET&#xff0c;觉得写得不错&#xff0c;翻译一下&#xff0c;分享给大家。目前看到的一些类库中其实很多并没有考虑使用密封类&#xff0c;如果你的类型是不希望被继承的&#xff0c…

jQuery-1.9.1源码分析系列(十) 事件系统——事件绑定

事件绑定的方式有很多种。使用了jQuery那么原来那种绑定方式&#xff08;elem.click function(){...})就不推荐了&#xff0c;原因&#xff1f; 最主要的一个原因是elem.click fn这种方式只能绑定一个事件处理&#xff0c;多次绑定的只会保留最后一次绑定的结果。 看一下jQue…

Windows 8系统平台上应用软件安装心得

1.ArcGIS 10.2安装 需要单独安装.NET 3.5,GIS软件自带的.NET系统不识别&#xff0c;点击360云盘地址进行下载&#xff08;提取码为&#xff1a;1ed3&#xff09;。&#xff08;另外&#xff0c;Win8系统上安装.NET可以参考&#xff1a;http://blog.csdn.net/aijavaer/article/d…

Android视图绘制流程完全解析,带你一步步深入了解View(二)

转自&#xff1a;http://blog.csdn.net/guolin_blog/article/details/16330267 在上一篇文章中&#xff0c;我带着大家一起剖析了一下LayoutInflater的工作原理&#xff0c;可以算是对View进行深入了解的第一步吧。那么本篇文章中&#xff0c;我们将继续对View进行深入探究&…

C# 线程问题之死锁

过多的锁定也会有麻烦。在死锁中&#xff0c;至少有两个线程被挂起&#xff0c;并等待对方解除锁定。由于两个线程都在等待对方&#xff0c;就出现了死锁&#xff0c;线程将无限等待下去。为了说明死锁&#xff0c;下面实例化 StateObject 类型的两个对象&#xff0c;并把它们传…

Matlab图形绘制

1.正余弦曲线 例如自变量从0到10&#xff0c;间隔为0.1的曲线代码如下&#xff1a; 正弦 t 0:.1:10; y sin(t); plot(t,y); 余弦 t 0:.1:10; y cos(t); plot(t,y); 正余弦图形显示如下&#xff1a;

Blazor University (5)组件 — 字面量、表达式和指令

原文链接&#xff1a;https://blazor-university.com/components/literals-expressions-and-directives/字面量、表达式和指令源代码[1]请注意&#xff0c;本节一般不涵盖 Razor 标记。它不会涵盖诸如条件输出、循环等内容。该主题在网络和书籍中的其他地方得到了广泛的介绍。使…

.NET6之MiniAPI(二十七):Metrics

应用的各种Metrics是保证应用健康稳定运行的基础&#xff0c;特别对于一些可用性有所要求的应用&#xff0c;本文介绍prometheus-net这个三方指示库。prometheus-net的工作原理是&#xff0c;在应用内部埋点&#xff0c;通过prometheus采集数据&#xff0c;然后通过grafana把采…

回溯算法之布罗夫卫队(最大团问题)

1、问题 在原始部落中,由于食物缺乏,部落居民经常因为争夺猎物发生冲突,几乎每个居民都 有自己的仇敌。部落酋长为了组织一支保卫部落的卫队,希望从居民中选出最多的居民加入 卫队,并保证卫队中任何两个人都不是仇敌。假设已给定部落中居民间的仇敌关系图,编程 计算构建部落护…

microdot - 一个开源 .NET 微服务框架。

简介Microdot 是一个开源 .NET 框架&#xff0c;可满足轻松创建微服务的许多需求。它的一些主要特点•用于托管微服务的服务容器•服务间 RPC&#xff0c;便于基于接口的服务通信•服务之间的客户端透明响应缓存•日志记录和分布式跟踪支持•客户端负载均衡和服务发现•详细的健…

slider控件控制文本框字体大小

1.控件代码 <pre name"code" class"csharp"> <Slider x:Name"slider1" HorizontalAlignment"Left" Margin"0,261,0,0" VerticalAlignment"Top" Width"446" ValueChanged"Slid…

争时金融java_Java高并发编程基础之AQS

引言曾经有一道比较比较经典的面试题“你能够说说java的并发包下面有哪些常见的类&#xff1f;”大多数人应该都可以说出CountDownLatch、CyclicBarrier、Sempahore多线程并发三大利器。这三大利器都是通过AbstractQueuedSynchronizer抽象类(下面简写AQS)来实现的&#xff0c;所…

Xamarin效果第十三篇之弹窗PopupPage

在上一篇文章中使用Xamarin实现控制了一下祖传的PLC;基本的功能也就完事了,这不总觉得少点最基本的配置;那就趁着激情还在赶紧再去完善一下,不然激情已过就懒得去摸索了;来看看最终咱实现的视频效果:1、关于弹窗,直接使用开源的PopupPageInstall-Package Rg.Plugins.Popup -Ver…

C# 线程问题之争用条件

用多个线程编程并不容易。在启动访问相同数据的多个线程时&#xff0c;会间歇性地遇到难以发现的问题。如果使用任务、并行 LINQ 或 Parallel 类&#xff0c;也会遇到这些问题。为了避免这些问题&#xff0c;必须特别注意同步问题和多个线程可能发生的其他问题。下面探讨与线程…

尾调用优化 java_为什么JVM仍然不支持尾调用优化?

拉丁的传说也许您已经知道这一点&#xff0c;但是这个功能并不像听起来那么简单&#xff0c;因为Java语言实际上将堆栈跟踪暴露给程序员。考虑以下程序&#xff1a;public class Test {public static String f() {String s Math.random() > .5 ? f() : g();return s;}publ…

【AngularJS】—— 2 初识AngularJs(续)

前一篇了解了AngularJS的一些简单的使用&#xff0c;这里继续跟着w3c学习一下剩下的内容。 本篇根据w3cschool.cc继续学习AngularJS剩余的内容&#xff0c;包括&#xff1a; 1 事件 2 模块 3 表单 4 数据验证 5 bootstrap CSS风格 6 include包含其他页面 7 应用程序 8 参考手册…

特斯拉为何使用.NET 技术栈?

【精选转载】| 来源/知乎在知乎上有一个帖子非常热闹&#xff1a;“为何特使拉使用.net core技术栈 而不用 java&#xff1f;”1回答1&#xff1a;Kasim作者&#xff1a;Kasim链接&#xff1a;https://www.zhihu.com/question/496204534/answer/2269157872这题我熟啊&#xff0…

Blazor University (6)组件 — 组件事件

原文链接&#xff1a;https://blazor-university.com/components/component-events/组件事件源代码[1]EventCallback<T> 类是一个特殊的 Blazor 类&#xff0c;可以作为参数公开&#xff0c;以便组件可以在发生感兴趣的事情时轻松通知使用者。一旦声明了 EventCallback&l…

Xamarin效果第十四篇之玩耍GIS

最近再次拾起Xamarin然后也实现了祖传PLC控制和弹窗配置;这不又一次勾起来我想基于他玩玩原来一直玩耍的GIS,毕竟咱前面一直玩耍二维和三维的GIS相关的知识点;有兴趣的小伙伴可以翻翻我的历史文章;趁着激情满满;来看看最终咱实现的加载高德平面地图效果(有水印):再者就是满足群…