代码生成工具的使用
Mybatis 应用程序,需要大量的配置文件,对于一个成百上千的数据库表来说,完全手工配置,这是一个很恐怖的工作量. 所以 Mybatis 官方也推出了一个 Mybatis 代码生成工具的 jar 包. 今天花了一点时间,按照 Mybatis generator 的 doc 文档参考,初步配置出了一个可以使用的版本,我把源代码也提供下载,Mybatis 代码生成工具,主要有一下功能:
- 生成 pojo 与 数据库结构对应
- 如果有主键,能匹配主键
- 如果没有主键,可以用其他字段去匹配
- 动态 select,update,delete 方法
- 自动生成接口(也就是以前的 dao 层)
- 自动生成 sql mapper,增删改查各种语句配置,包括动态 where 语句配置
- 生成 Example 例子供参考
下面介绍下详细过程
创建测试工程,并配置 Mybatis 代码生成 jar 包
下载地址:http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator
MySql 驱动下载:http://dev.mysql.com/downloads/connector/j/ 这些 jar 包,我也会包含在源代码里面,可以在文章末尾处,下载源代码,参考。
用 Eclipse 建立一个 dynamic web project。
解压下载后的 mybatis-generator-core-1.3.2-bundle.zip 文件,其中有两个目录:一个目录是文档目录docs,主要介绍这个代码生成工具如何使用,另一个是 lib 目录,里面的内容主要是 jar 包,这里我们需要 mybatis-generator-core-1.3.2.jar,这个 jar 包. 将它拷贝到我们刚刚创建的 web工程的 WebContent/WEB-INF/lib 目录下.在这个目录下也放入 MySql 驱动 jar 包。因为用 MySql 做测试的。
在数据库中创建测试表
在 Mybatis 数据库中创建 用来测试的 category 表(如果没有 Mybatis 这个数据库,要创建,这是基于前面这个系列文章而写的,已经有了 Mybatis 这个数据库)
1 | Drop TABLE IF EXISTS `category`; |
配置 Mybatis 代码生成工具的配置文件
在创建的 Web 工程中,创建相应的 package 比如 :
com.yihaomen.inter 用来存放 Mybatis 接口对象。
com.yihaomen.mapper 用来存放 sql mapper 对应的映射,sql 语句等。
com.yihaomen.model 用来存放与数据库对应的 model 。
在用 Mybatis 代码生成工具之前,这些目录必须先创建好,作为一个好的应用程序,这些目录的创建也是有规律的。
根据 Mybatis 代码生成工具文档,需要一个配置文件,这里命名为:mbgConfiguration.xml
放在 src 目录下. 配置文件内容如下:
1 |
|
用一个 main 方法来测试能否用 Mybatis 成生成刚刚创建的category
表对应的 model,sql mapper 等内容。 创建一个 com.yihaomen.test 的 package ,并在此 package 下面建立一个测试的类 GenMain:
1 | package com.yihaomen.test; |
到此为止,Eclipse 项目工程图应该如下:
运行测试的 main 方法,生成 Mybatis 相关代码
运行 GenMain 类里的 main方法,并刷新工程,你会发现 各自 package 目录下已经响应生成了对应的文件,完全符合 Mybatis 规则,效果图如下:
注意事项
如果你想生成 example 之类的东西,需要在<table></table>
里面去掉
1 | enableCountByExample="false" enableUpdateByExample="false" |
这部分配置,这是生成 example 而用的,一般来说对项目没有用。
另外生成的 sql mapper 等,只是对单表的增删改查,如果你有多表 join 操作,你就可以手动配置,如果调用存储过程,你也需要手工配置. 这时工作量已经少很多了。
如果你想用命令行方式处理,也是可以的。
比如:
1 | java -jar mybatis-generator-core-1.3.2.jar -mbgConfiguration.xm -overwrite |
这时,要用绝对路径才行. 另外 mbgConfiguration.xml 配置文件中 targetProject 的配置也必须是绝对路径了。