MBG介绍
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis使得数据库操作变得非常方便,使用MyBatis进行数据库操作的主要工作是书写Mapping映射文件,然而手写映射文件很容易出错,而且不够规范,因此本文使用MBG(MyBatis Generator)工具来自动生成底层模型类、DAO接口类和Mapping映射文件。
MyBatis Generator可以满足大部分常用的CRUD(Create,Retrieve,Update,Delete)数据库操作。对于复杂的操作,如join
或存储过程stored procedures
则需要手动编写SQL代码。
MBG将自动生成以下三部分代码
与表结构匹配的java POJOs,包括:
- 一个与表的主键相匹配的类(如果该表有主键)
- 一个与表的非主键字段相匹配的类(除了BLOB字段)
- 一个包含表中BLOB字段的类(如果改表含有BLOB字段)
- 一个用于动态selects, updates 和 deletes的类(对应于example语句)
与MyBatis/iBATIS兼容的SQL Map XML文件,为简单的CRUD函数生成SQL语句,生成的SQL语句包括:
- insert
- update by primary key
- update by example (using a dynamic where clause)
- delete by primary key
- delete by example (using a dynamic where clause)
- select by primary key
- select by example (using a dynamic where clause)
- count by example
可以使用上述对象的java客户端类
对于MyBaits 3.x将生成:
- 一个mapper接口,适用于MyBatis 3.x mapper结构
对于iBATIS 2.x将生成:
- 适用于Spring框架的DAOs
- 只使用iBATIS SQL映射API的DAOs
- 适用于iBATIS DAO框架的DAOs(该框架已弃用,建议使用Spring框架)
MBG 应用
下载
下载MBG并解压:MBG官方下载地址
创建配置文件
配置文件用于告诉MBG:
- 如何连接到数据库
- 要生成的对象,以及如何生成
- 用于对象生成的表
一个最小的配置文件至少包括5个元素:
<jdbcConnection>
元素用于指定如何连接到目标数据库<javaModelGenerator>
元素用于指定生成的Java model对象的存放位置(包和项目)<sqlMapGenerator>
元素用于指定生成的SQL map文件的存放位置(包和项目)<javaClientGenerator>
元素用于指定生成的客户端接口和类的存放位置(包和项目),如果不希望生成Java客户端代码,则忽略该元素<table>
至少一个数据库表元素
一个来自官网的配置例子,用于解释配置文件的结构。
<?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>
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
connectionURL="jdbc:db2:TEST"
userId="db2admin"
password="db2admin">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="test.model