一.简介
操作流程: 详见“ 介绍MyBatis代码生成网站(一) --- 基本操作 ”
比较对象: 开源软件mybatis-generator , 和与其类似的衍生开源软件(如mybatis-mapper之类)
二.优点介绍 -- (对比开源软件)
特别适用于追求【 高质量代码 】 的个人开发者、项目组、互联网企业使用.
a) 代码质量方面
开源软件(如:mybatis-generator)生成的代码,总体上比较粗糙: 大多用动态sql、常用的方法少等。
而fwjava.com生成的代码,则比较专业、干净、漂亮: 使用正规的sql语句、基本涵盖所有的常用方法。
代码对比,如下:
开源软件mybatis-generator生成的代码: (如下)
<resultMap id="BaseResultMap" type="com.model.TabDemo">
<id column="ID" jdbcType="BIGINT" property="id" />
<result column="USER_NAME" jdbcType="VARCHAR" property="userName" />
<result column="ORDER_NO" jdbcType="VARCHAR" property="orderNo" />
<result column="ORDER_COUNT" jdbcType="INTEGER" property="orderCount" />
<result column="PRICE_DECIMAL" jdbcType="DECIMAL" property="priceDecimal" />
<result column="PRICE_DOUBLE" jdbcType="DOUBLE" property="priceDouble" />
<result column="PRICE_FLOAT" jdbcType="REAL" property="priceFloat" />
<result column="CREATED" jdbcType="TIMESTAMP" property="created" />
<result column="UPDATED" jdbcType="TIMESTAMP" property="updated" />
</resultMap>
<sql id="Base_Column_List">
ID, USER_NAME, ORDER_NO, ORDER_COUNT, PRICE_DECIMAL, PRICE_DOUBLE, PRICE_FLOAT, CREATED,
UPDATED
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from tab_demo
where ID = #{id,jdbcType=BIGINT}
</select>
fwjava.com生成的代码: (如下)
<!--
**************************************************************************
* 5.条件查询
* 注: 支持多条件查询、模糊查询、日期比较查询等操作.
**************************************************************************
-->
<select id="getList"
parameterType="com.icsm.paybank.entity.TabDemo"
resultType="com.icsm.paybank.entity.TabDemo">
SELECT /* getList+@com.icsm.paybank.sql.TabDemo.xml */
td.ID AS "id" /* 主键ID */
,td.USER_NAME AS "userName" /* 用户名称 */
,td.ORDER_NO AS "orderNo" /* 订单号 */
,td.ORDER_COUNT AS "orderCount" /* 表数目 */
,td.PRICE_DECIMAL AS "priceDecimal" /* 品类价格 */
,td.PRICE_DOUBLE AS "priceDouble" /* 类目价格 */
,td.PRICE_FLOAT AS "priceFloat" /* 商品价格 */
,td.CREATED AS "created" /* 创建时间 */
,td.UPDATED AS "updated" /* 变更日期 */
FROM TAB_DEMO td /* 演示主表 */
WHERE 1 = 1
<if test='id != null'>
AND td.ID = #{id} /* 主键ID */
</if>
<if test='userName != null and userName != "" and userName != "null" and userName != "undefined"'>
AND td.USER_NAME = #{userName} /* 用户名称 */
</if>
.......
</select>
b) 操作方面
开源软件(如:mybatis-generator) : 需要下载软件到本地后 , 再需要手动编辑配置文件 ,把几十张表一个个填上 , 在利用命令窗CMD输入命令 , 最终生成劣质代码.
而 fwjava.com : 则只需把想要生成的表 , 使用Navicat或PowerDesigner导出sql文件后 , 一键上传即可. 无需下载任何软件、麻烦的手动配置过程、运行命令等繁琐的操作.
c) SQL方法方面
开源软件(如:mybatis-generator) : 单表只能生成3~5小方法 , 而且还不能选择要生成的sql方法种类.
而 fwjava.com : 单表最多能生成26个sql方法 , 并且开发者还可以根据自身需要 , 通过页面选择sql方法种类. 不需要生成的sql方法 , 可以勾去 ,不生成.
d) 常用格式化方面
开源软件(如:mybatis-generator) : 基本没有任何常用字段格式化功能.
而 fwjava.com : 对日期类型格式化、日期比较、日期范围、字符串字段模糊查询、分页查询、批量处理、继承基类等 , 生成精细化的处理代码.
e) 中文注释方面
开源软件(如:mybatis-generator) : 基本没有 ! 就算有 , 也是超难看 , 摆不上台面.
而 fwjava.com : 不仅每个字段都生成中文注释 , 而且还是非常整洁干净的.
f) 常用代码拷贝方面
开源软件(如:mybatis-generator) : 基本没有 !
而 fwjava.com : 在每个整洁的Java实体最下方 , 都有常用代码的拷贝区: 如 每个字段的html标签、实体赋值与取值等, 非常实用、方便.
g) 命名方面
开源软件(如:mybatis-generator) : 基本没有 !
而 fwjava.com : 支持统一给Java实体、SQL文件、Mapper接口类设置自定义的后缀.
h) 参数类型方面
开源软件(如:mybatis-generator) : 只有简单的Java实体 !
而 fwjava.com : 对14大类SQL方法 , 不仅支持Java实体类型参数 , 而且还支持HashMap类型参数.
/**
* 1.新增一条数据
* 注: 根据Bean实体执行新增操作.
* @param tabDemo - 演示主表
* @throws Exception - 异常捕捉
*/
public void getInsert(TabDemo tabDemo) throws Exception;
public void getInsertPrmMap(Map<String ,Object> map) throws Exception;
/**
* 2.删除一条数据
* 注: 根据Bean实体的主键ID执行删除操作.
* @param id - 主键ID
* @return int - 执行结果
* @throws Exception - 异常捕捉
*/
public int getDelete(Long id) throws Exception;
/**
* 3.变更一条数据
* 注: 根据Bean实体的主键ID执行变更操作.
* @param tabDemo - 演示主表
* @return int - 执行结果
* @throws Exception - 异常捕捉
*/
public int getUpdate(TabDemo tabDemo) throws Exception;
public int getUpdatePrmMap(Map<String ,Object> map) throws Exception;
/**
* 4.获取一个Bean实体
* 注: 根据Bean实体的主键ID获取一个Bean实体.
* @param id - 主键ID
* @return TabDemo - 执行结果
* @throws Exception - 异常捕捉
*/
public TabDemo getBean(Long id) throws Exception;
public Map<String ,Object> getBeanRtnMap(Long id) throws Exception;
/**
* 5.条件查询
* 注: 支持多条件查询、模糊查询、日期比较查询等操作.
* @param tabDemo - 演示主表
* @return List<TabDemo> - 执行结果
* @throws Exception - 异常捕捉
*/
public List<TabDemo> getList(TabDemo tabDemo) throws Exception;
public List<TabDemo> getListPrmMapRtnBean(Map<String ,Object> map) throws Exception;
public List<Map<String ,Object>> getListPrmMapRtnMap(Map<String ,Object> map) throws Exception;
/**
* 6.分页查询
* 注: 支持分页查询、多条件查询、模糊查询、日期比较查询等操作.
* @param map - 演示主表及分页信息
* <br>[参数说明] 如下 , map中有3个固定Key , 且区分大小写.
* <br>[键1] bean - 演示主表 (实体)
* <br>[键2] offset - 偏移量 (分页信息)
* <br>[键3] rows - 数目 (分页信息)
* @return List<TabDemo> - 执行结果
* @throws Exception - 异常捕捉
*/
public List<TabDemo> getPageList(Map<String ,Object> map) throws Exception;
public List<Map<String ,Object>> getPageListRtnMap(Map<String ,Object> map) throws Exception;
/**
* 7.删除数据
* 注: 根据Bean实体的主键ID执行删除操作.
* @param tabDemo - 演示主表
* @return int - 执行结果
* @throws Exception - 异常捕捉
*/
public int getDeleteBean(TabDemo tabDemo) throws Exception;
public int getDeleteMap(Map<String ,Object> map) throws Exception;
/**
* 8.删除多条数据
* 注: 根据拼接有限个主键ID执行多条数据的删除操作.
* @param ids - 主键ID
* @return int - 执行结果
* @throws Exception - 异常捕捉
*/
public int getDeleteIn(Long[] ids) throws Exception;
/**
* 9.条件删除数据
* 注: 根据多种条件执行批量删除操作.
* @param tabDemo - 演示主表
* @return int - 执行结果
* @throws Exception - 异常捕捉
*/
public int getDeleteBy(TabDemo tabDemo) throws Exception;
public int getDeleteByPrmMap(Map<String ,Object> map) throws Exception;
/**
* 10.验证一条数据是否存在
* 注: 根据主键ID验证该数据是否存在 ,并返回数据量.
* @param id - 主键ID
* @return int - 存在数量
* @throws Exception - 异常捕捉
*/
public int getCheck(Long id) throws Exception;
/**
* 11.验证多条件数据是否存在
* 注: 根据多条件验证该数据是否存在 ,并返回数据量.
* @param tabDemo - 演示主表
* @return int - 存在数量
* @throws Exception - 异常捕捉
*/
public int getCheckBy(TabDemo tabDemo) throws Exception;
public int getCheckByPrmMap(Map<String ,Object> map) throws Exception;
/**
* 12.按条件变更一条数据
* 注: 根据Bean实体的主键ID,只对部分字段执行变更操作.
* @param tabDemo - 演示主表
* @return int - 执行结果
* @throws Exception - 异常捕捉
*/
public int getUpdateBy(TabDemo tabDemo) throws Exception;
public int getUpdateByPrmMap(Map<String ,Object> map) throws Exception;
/**
* 13.InsertBatch - 批量新增数据
* 注: 根据演示主表List对象执行批量新增操作.
* @param list - 演示主表List
* @throws Exception - 异常捕捉
*/
public void getInsertBatch(List<TabDemo> list) throws Exception;
public void getInsertBatchPrmMap(List<Map<String ,Object>> list) throws Exception;
/**
* 14.UpdateBatch - 批量更新数据
* 注: 根据演示主表List对象执行批量更新操作.
* @param list - 演示主表List
* @throws Exception - 异常捕捉
*/
public void getUpdateBatch(List<TabDemo> list) throws Exception;
public void getUpdateBatchPrmMap(List<Map<String ,Object>> list) throws Exception;
i) ...... (还有很多 , 使用便可知)
以上 !