设为首页 收藏本站
查看: 932|回复: 0

[经验分享] [jshop]mybatis-generator定制

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-26 01:21:33 | 显示全部楼层 |阅读模式
  JShop简介:jshop是一套使用Java语言开发的B2C网店系统,致力于为个人和中小企业提供免费、好用的网店系统。
  项目主页:http://git.oschina.net/dinguangx/jshop
  在线演示:


  • 前台: http://jshop.ofmall.org:81/jshop

  • 后台: http://jshop.ofmall.org:81/jshop/manage/user/login (admin/123456)
  mybatis-generator生成的代码文件主要有:
  (1)mapper映射文件
  (2)client(如果mybatis是ClientMapper接口类,而ibatis2则是DAO和DAOImpl)
  (3)model:即与数据库字段一一对应的POJO
  (4)model example
  为这些代码文件提供的与数据库交互的方法有:

countByExample
deleteByExample
deleteByPrimaryKey
insert
insertSelective
selectByExampleWithBLOBs
selectByExampleWithoutBLOBs
selectByPrimaryKey
updateByExampleSelective
updateByExampleWithBLOBs
updateByExampleWithoutBLOBs
updateByPrimaryKeySelective
updateByPrimaryKeyWithBLOBs
updateByPrimaryKeyWithoutBLOBs
  围绕这几类的代码文件,mybatis generaotr提供了高度可定制化的扩展点,如对这些文件如何生成注释提供了CommentGenerator,控制整个代码生成过程的Plugin等。
  jshop在集成mybatis gerarator时,主要针对实际的使用情况,定制了代码注释生成器和控制生成哪些方法的Plugin
  (1) CommentGenerator定制
  CommentGenerator对代码中的注释生成过程进行拦截和扩展,注释的类型包括文档注释,属性注释,方法注释,日期注释,setter/getter注释等。实际上,大部分的注释都是无意义的,仅仅为了表明生成的时间和标示是自动生成的。所以jshop中对comment generator进行定制,只保留model bean中的field注释,取的是字段的comment,其他注释全部去除,如下:
  具体定制的代码见CommentGeneratorExt
  生成的model文件示例如下:

public class ArticleCatalog implements Serializable {
/** ID */
private Integer id;
/** 分类名称 */
private String name;
/** 父级ID */
private Integer pid;
/** 顺序 */
private Integer order;
/** 类型 */
private String type;
/** 分类编码 */
private String code;
private static final long serialVersionUID = 1L;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type == null ? null : type.trim();
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code == null ? null : code.trim();
}
}
  (2) Plugin定制-生成的method取舍
  为了减少可能出现的代码bug,去除了updateByExample,deleteByExample, updateByExampleSelective和deleteByExampleSelective相关的方法,因为这几个方法会根据条件批量更新数据库,容易引入潜在的bug,保留updateByPrimaryKey和deleteByPrimaryKey进行数据库更新操作。
  具体代码见JshopCustomPlugin
  (3) Plugin扩展-mapper代码生成的问题
  默认情况下,不删除原来已经生成过的代码文件时,dao,model文件可以在再次生成时被覆盖,而mapper文件则不会,所以对plguin进行扩展,可以在再次生成代码文件时,将原mapper文件覆盖掉。

/**
* mapper文件可被重写的插件,默认情况下,重新生成代码时,mapper文件不会被覆盖
* 通过参数mapperOverwrite决定是否覆盖mapper文件,该值默认为true
*/
public class MapperFileOverwritePlugin extends PluginAdapter {
@Override
public boolean validate(List<String> warnings) {
return true;
}
private boolean mapperOverwrite = true;
@Override
public void setProperties(Properties properties) {
super.setProperties(properties);
mapperOverwrite = Boolean.valueOf(properties.getProperty("mapperOverwrite", String.valueOf(mapperOverwrite)));
}
@Override
public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
if(mapperOverwrite){
try {
Field mergedField = GeneratedXmlFile.class.getDeclaredField("isMergeable");
mergedField.setAccessible(true);
mergedField.setBoolean(sqlMap, false);
return true;
} catch (Exception e){
e.printStackTrace();
}
}
return super.sqlMapGenerated(sqlMap, introspectedTable);
}
}
  jshop自动生成代码规范:
  所有生成的代码位于src/main/gen目录,如果需要扩展model或client文件,则在src/main/java下新建一个继承于生成的model或client类的新类;如果需要扩展mapper文件,则在src/main/resources/mapper/ext中新建mapper文件。以便于在数据库有变动时,可以再次调用代码生成程序重新生成相关的文件。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305446-1-1.html 上篇帖子: iBATIS mybatis 配置 说明 下篇帖子: mybatis (ibatis) 新增 返回主键
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表