mybatis自动生成类,ORM配置实践
mybatis目前一直作为我主要使用的ORM框架,当然,它的简单,SQL可控,高效才是我选择它的最终原因。前段时间学习了他的实体,ORM的XML文件自动生成,感觉也是比较简单。下面稍微介绍一下具体的配置方面的
在它的官网上,有几种方式来生成类及配置。
1 从命令提示符 使用 XML 配置文件
2 作为Ant 任务使用 XML 配置文件
3 作为Maven Plugin
4 从另一个Java 程序使用 XML 配置文件
5 插件生成
今天,我只讲实践第3,5点:
一 使用MAVEN插件
首先在你的POM里面添加一个PLUG,
另外,针对MVN,需要设置两个内置变量:
mybatis.generator.overwrite:表示每次生成是否覆盖之前的文件,默认为否
mybatis.generator.configurationFile:表示生成代码文件的配置文件,默认文件名为generatorConfig.xml,这里我进行自定义,因为插件生成对比MVN的生成,里面的配置项不能公用,当然。各位看官,有好的方式,也请分享一下。OK。MVN的配置生成就OK了。你只需要使用熟悉的mvn clean install,即可从DB生成你想要的实体,ORM的配置。
二 使用官方的插件
这个是基于eclipse的swt的,GITHUB上面,有这个插件的地址https://github.com/mybatis/generator/tree/master/eclipse/UpdateSite,下载下来,然后放到eclispe下面的dropins下面,重启一下就行了。
最后,我们重点的讲一下generatorConfig.xml这个配置项文件
classPathEntry :元素 用于添加运行类路径位置到类路径中的 MyBatis Generator(MBG)。 classPathEntry元素是generatorConfiguration的子元素.MBG 在这些情况下从这些路径下加载类:
a 当加载 JDBC 驱动内省数据库时
b 当加载根类中的 JavaModelGenerator 检查重写的方法时
context :元素用于指定生成一组对象的环境。子元素用于指定要连接到的数据库、 要生成对象的类型和要内省的表。多个 context元素可以在generatorConfiguration元素中列出来,这样可以在同一个MyBatis Generator (MBG)从不同的数据库或者使用不同的生成生成器参数生成对象。以下都 是context的子元素
commentGenerator:用来定义注释生成的属性,主要有suppressAllComments,suppressDate这两个属性。其中suppressAllComments
表示是否生成注释,suppressDate表示是否生成日期
jdbcConnection:定义数据库相关的属性说明,比较简单,就不列了。
javaModelGenerator:JAVA的model生成配置,主要有targetPackage,targetProject丙个属性
targetPackage:表示生成的MODEL包路径
targetProject:表示生成的MODEL项目路径
sqlMapGenerator:用于定义SQL映射生成器的属性。SQL映射生成器为每一个内省的表生成MyBatis/iBATIS形式的XML文件。如果不指定一个javaClientGenerator,则适用以下规则:
如果您指定一个sqlMapGenerator,那么MBG将只生成SQL映射的XML文件和模型对象。如果您没有指定一个sqlMapGenerator,那么MBG将只会生成模型对象。
targetPackage:这个包用于放置生成的SQL映射文件。在默认的生成器中,属性"enableSubPackages"用来控制如何计算实际的包。
如果是true,如果表的catalog和schema存在,就将他们作为子包加起来。如果"enableSubPackages"是false(默认值),计算的package将是targetPackage属性指定的值。MBG 将创建所需的生成包的文件夹。
targetProject:这用来指定生成SQL映射的目标项目。当在Eclipse环境中运行时,此选项指定保存对象的位置的项目和源文件夹。在其他环境中,此值应为本地文件系统上的现有目录。如果它不存在,MBG不会创建它。
javaClientGenerator:用于定义 Java 客户端代码生成器的属性。Java客户端生成器生成Java接口和类,它可以简单地使用生成的Java模型和XML映射文件。在iBATIS2目标环境中,这些对象可以生成DAO接口和实现类形式的代码。对Mybatis来说,会生成Mapper接口形式的代码。如果不指定此元素,然后代码生成器(MBG)将不会生成Java客户端接口和类。
table 元素用来从内省数据库中选择一个表。选定的表会生成如下的这些对象:
一个 MyBatis/iBATIS 格式的SQL映射文件
一组根据表生成的"model"类:
一个和表的主键匹配的类(如果表有主键)。
一个包含了非主键字段和BLOB字段的类,如果存在主键类,这个类就会继承主键类。
如果表中包含BLOB字段,就会有一个包含了BLOB字段的类。这个类会根据表的配置继承上面的一个或两个类。
一个用于不同的"by example"方法(selectByExample, deleteByExample)生成动态查询条件的类。
(可选) 一个DAO接口或者类。
最后给个配置截图:
当然,这个mybatis的插件其实是不支持多表关联去生成代码。初看,好像是不太友好。不过,你静下来想一下,其实也就明白。在一个大数据访问的时代,为什么需要多表关联。我们跟本不需要!!!就是要单表。足够简单,足够清晰,足够NB.话说回来,你确实需要多表关连时,可以在它的基础上,再去改你的SQL了。