# mybatis-dalgen **Repository Path**: zhangyingchun08/mybatis-dalgen ## Basic Information - **Project Name**: mybatis-dalgen - **Description**: mybatis代码自动生成 简化sql书写,避免大量动态sql - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2022-02-21 - **Last Updated**: 2022-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #mybatis-maven-dalgen ## 更新 2016-03-23 (修复) 1. DAO参数排序 2. DAO参数去重 ## 简介 [mybatis-maven-dalgen 源码](git@git.oschina.net:bangis/mybatis-dalgen.git) 1. 解决问题 mybatis-maven-dalgen 后续简称 dalgen,解决mybatis代码自动生成的缺失. 2. 对比其他代码生成工具 *mybatis-generator-maven-plugin 目前正在使用的代码生成工具,只能根据指定表结构反向生成do,mapper,mapper.xml且生成大量mybatis动态sql. *dalgen 除能根据指定表结构生成 do,mapper,mapper.xml外,还能根据自定义sql 自动生成对应mapper接口中的方法等 ## 能做什么 ### 支持MySQL ### 支持分表 *具体参考 config.xml ### 初始化生成的方法有 *insert,update,deleteByPrimary,getByPrimary四个简单地方法 ### 其他自定义SQL *写在 operation中,执行 mvn mybatis:gen 后会自动帮您生成相关数据 ### 基本动态sql支持 ### 自定义参数: *指定 paramtype=primitive 会根据 sql中的 "#{...}" or ? 生成原生的参数. *指定 paramtype=object 参数为 DO 对象 *其他参数类型不再支持,支持多了容易给维护带来困难 ### 定义返回结果: *返回结果 可以指定 resultmap,resuttype *resultmap 非变更类的 默认返回结果,不需要指定 *reulttype 自定义返回类型,可以指定Map(需要写为全类) 原生类(String,Long等)大小写敏感 *自定义resultmap, 有时候返回类型比较特殊,那么可以自己定义resultmap, dalgen 会帮您生成对应的类 ### 其他 *可以自由摸索 ## 暂不能做什么 暂不支持Oracle,如有需要单独通知我,bangis.wangdf@alibaba-inc.com ## 不会支持什么 在 sql模板中不提供 mybatis特有的<sql>标签,避免复杂动态sql产生 ## 如何使用 pom中添加依赖 [最新版本搜索](http://maven.oschina.net/index.html#nexus-search;quick~mybatis-maven-plugin) 关于thirdpart无法下载问题见下图,后续会想办法传到Maven中央仓库 ![关于thirdpart无法下载问题见下图](img/thirdparty.png) ```xml com.dalgen.mybatis-maven-plugin mybatis-maven-plugin 1.8 dalgen/templates src dalgen/config/config.xml true ``` * 执行 mvn mybatis:gen 首先会初始化配置,减少了一步自己copy 配置文件的麻烦 ```xml config.xml 支持分页,支持OB,支持参数简写为 ? ``` ## table.xml 例子 *首次执行输出DC_BG_RISK_SCAN 后DC_BG_RISK_SCAN.xml会自动生成,您仅需要添加自己的sql即可 ```xml DC_BG_RISK_SCAN.xml SELECT LAST_INSERT_ID() INSERT INTO DC_BG_RISK_SCAN( ID ,NAME ,RISK ,DETAIL ,EDU_INFO ,ID_CARD_NO ,DETAIL_URL ,GMT_CREATE ,GMT_MODIFIED )VALUES( #{id,jdbcType=BIGINT} , #{name,jdbcType=VARCHAR} , #{risk,jdbcType=CHAR} , #{detail,jdbcType=VARCHAR} , #{eduInfo,jdbcType=VARCHAR} , #{idCardNo,jdbcType=VARCHAR} , #{detailUrl,jdbcType=VARCHAR} , #{gmtCreate,jdbcType=TIMESTAMP} , #{gmtModified,jdbcType=TIMESTAMP} ) UPDATE DC_BG_RISK_SCAN SET ID = #{id,jdbcType=BIGINT} ,NAME = #{name,jdbcType=VARCHAR} ,RISK = #{risk,jdbcType=CHAR} ,DETAIL = #{detail,jdbcType=VARCHAR} ,EDU_INFO = #{eduInfo,jdbcType=VARCHAR} ,ID_CARD_NO = #{idCardNo,jdbcType=VARCHAR} ,DETAIL_URL = #{detailUrl,jdbcType=VARCHAR} ,GMT_CREATE = #{gmtCreate,jdbcType=TIMESTAMP} ,GMT_MODIFIED = #{gmtModified,jdbcType=TIMESTAMP} WHERE ID = #{id,jdbcType=BIGINT} DELETE FROM DC_BG_RISK_SCAN WHERE ID = #{id,jdbcType=BIGINT} SELECT * FROM DC_BG_RISK_SCAN WHERE ID = #{id,jdbcType=BIGINT} select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} or id_card_no=#{idCardNoXX,jdbcType=VARCHAR} limit 1 select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR} limit 1 select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR}
``` ## 生成结果 ```xml RiskScanDOMapper.xml ID,NAME,RISK,DETAIL,EDU_INFO,ID_CARD_NO,DETAIL_URL,GMT_CREATE,GMT_MODIFIED SELECT LAST_INSERT_ID() INSERT INTO DC_BG_RISK_SCAN( ID ,NAME ,RISK ,DETAIL ,EDU_INFO ,ID_CARD_NO ,DETAIL_URL ,GMT_CREATE ,GMT_MODIFIED )VALUES( #{id,jdbcType=BIGINT} , #{name,jdbcType=VARCHAR} , #{risk,jdbcType=CHAR} , #{detail,jdbcType=VARCHAR} , #{eduInfo,jdbcType=VARCHAR} , #{idCardNo,jdbcType=VARCHAR} , #{detailUrl,jdbcType=VARCHAR} , #{gmtCreate,jdbcType=TIMESTAMP} , #{gmtModified,jdbcType=TIMESTAMP} ) UPDATE /*MS-AUTODALGEN-DC-BG-RISK-SCAN-UPDATE*/ DC_BG_RISK_SCAN SET ID = #{id,jdbcType=BIGINT} ,NAME = #{name,jdbcType=VARCHAR} ,RISK = #{risk,jdbcType=CHAR} ,DETAIL = #{detail,jdbcType=VARCHAR} ,EDU_INFO = #{eduInfo,jdbcType=VARCHAR} ,ID_CARD_NO = #{idCardNo,jdbcType=VARCHAR} ,DETAIL_URL = #{detailUrl,jdbcType=VARCHAR} ,GMT_CREATE = #{gmtCreate,jdbcType=TIMESTAMP} ,GMT_MODIFIED = #{gmtModified,jdbcType=TIMESTAMP} WHERE ID = #{id,jdbcType=BIGINT} DELETE /*MS-AUTODALGEN-DC-BG-RISK-SCAN-DELETEBYPRIMARY*/ FROM DC_BG_RISK_SCAN WHERE ID = #{id,jdbcType=BIGINT} ``` ```java package com.alibaba.recruit.datacenter.risk.dal.mapper; import com.alibaba.recruit.datacenter.risk.dal.dataobject.RiskScanDO; import com.alibaba.recruit.datacenter.risk.dal.resultmap.MyResult; import java.util.List; /** *The Table DC_BG_RISK_SCAN. *风险扫描 */ public interface RiskScanDOMapper{ /** *desc:插入表:DC_BG_RISK_SCAN.
*descSql = SELECT LAST_INSERT_ID() INSERT INTO DC_BG_RISK_SCAN( ID ,NAME ,RISK ,DETAIL ,EDU_INFO ,ID_CARD_NO ,DETAIL_URL ,GMT_CREATE ,GMT_MODIFIED )VALUES( #{id,jdbcType=BIGINT} , #{name,jdbcType=VARCHAR} , #{risk,jdbcType=CHAR} , #{detail,jdbcType=VARCHAR} , #{eduInfo,jdbcType=VARCHAR} , #{idCardNo,jdbcType=VARCHAR} , #{detailUrl,jdbcType=VARCHAR} , #{gmtCreate,jdbcType=TIMESTAMP} , #{gmtModified,jdbcType=TIMESTAMP} ) *@param RiskScanDO RiskScanDO *@return Long */ Long insert(entity RiskScanDO); /** *desc:更新表:DC_BG_RISK_SCAN.
*descSql = UPDATE DC_BG_RISK_SCAN SET ID = #{id,jdbcType=BIGINT} ,NAME = #{name,jdbcType=VARCHAR} ,RISK = #{risk,jdbcType=CHAR} ,DETAIL = #{detail,jdbcType=VARCHAR} ,EDU_INFO = #{eduInfo,jdbcType=VARCHAR} ,ID_CARD_NO = #{idCardNo,jdbcType=VARCHAR} ,DETAIL_URL = #{detailUrl,jdbcType=VARCHAR} ,GMT_CREATE = #{gmtCreate,jdbcType=TIMESTAMP} ,GMT_MODIFIED = #{gmtModified,jdbcType=TIMESTAMP} WHERE ID = #{id,jdbcType=BIGINT} *@param RiskScanDO RiskScanDO *@return Long */ Long update(entity RiskScanDO); /** *desc:根据主键删除数据:DC_BG_RISK_SCAN.
*descSql = DELETE FROM DC_BG_RISK_SCAN WHERE ID = #{id,jdbcType=BIGINT} *@param id id *@return Long */ Long deleteByPrimary(Long id); /** *desc:根据主键获取数据:DC_BG_RISK_SCAN.
*descSql = SELECT *FROM DC_BG_RISK_SCAN WHERE ID = #{id,jdbcType=BIGINT} *@param id id *@return RiskScanDO */ RiskScanDO getByPrimary(Long id); /** *desc:自定义ResultMap.
*descSql = select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} or id_card_no=#{idCardNoXX,jdbcType=VARCHAR} limit 1 *@param idCardNo idCardNo *@param idCardNoXX idCardNoXX *@return MyResult */ MyResult getMyResultMap(String idCardNo,String idCardNoXX); /** *desc:foreach支持.
*descSql = select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR} limit 1 *@param idCardNo idCardNo *@param names names *@return MyResult */ MyResult getListParams(String idCardNo,List names); /** *desc:foreach支持 many.
*descSql = select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR} *@param idCardNo idCardNo *@param names names *@return List */ List getListParamsMany(String idCardNo,List names); } ``` ### 增加分页支持 ```xml multiplicity="paging" --标记为此方法需要走分页查询 paging="QueryRisk" --分页查询参数类名称 --自动生成DAO类,通过Spring 自动扫描方法注入,不提供xml配置项目生成了. --DOMapper接口与DAO类区别在于对分页的支持 select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR} order by gmt_modified desc Mapper.xml结果 DOMapper.java /** * desc:foreach支持 many.
* descSql = select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR} order by gmt_modified desc * @param queryRisk queryRisk * @return int */ int getListParamsPageCount(QueryRiskPage queryRisk); /** * desc:foreach支持 many.
* descSql = select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR} order by gmt_modified desc * @param queryRisk queryRisk * @return List */ List getListParamsPageResult(QueryRiskPage queryRisk); DAO.java /** * desc:foreach支持 many.
* descSql = select name,risk from DC_BG_RISK_SCAN where id_card_no=#{idCardNo} and name in #{name,jdbcType=VARCHAR} order by gmt_modified desc * @param queryRisk queryRisk * @return QueryRiskPage */ public QueryRiskPage getListParamsPage(QueryRiskPage queryRisk){ int total = riskScanDOMapper.getListParamsPageCount(queryRisk); if(total>0){ queryRisk.setDatas(riskScanDOMapper.getListParamsPageResult(queryRisk)); } queryRisk.setTotal(total); return queryRisk; } 如需分页会自动创建分页类 BasePage.java ```