mybatis-generator 是只能生成一次吗?如果数据库修改之后要怎么用?

2018-01-02 12:40:02 +08:00
 lhx2008
mybatis-generator 生成了一次 之后,手工修改了 pojo 和 mapper (比如增加一对多,多对一的关联查询)
当我修改了数据库字段时候,是不是就不能再用 mybatis-generator 生成了?
试了好多次好像都是全文件覆盖模式,以前写的就没了,
不会自动删除以前自动生成的代码重新生成并且保留我写的代码。
9873 次点击
所在节点    Java
20 条回复
coder2cooker
2018-01-02 12:50:31 +08:00
好像有个逆向工程支持一对多关联关系的插件,可以去 google 下。

如果每次增量修改的内容很少,手工编写代码是不是还方便一些?
lhx2008
2018-01-02 12:58:24 +08:00
@coder2cooker 但是还是感觉治标不治本,如果没有什么好办法就只能是自己手改了
kulove
2018-01-02 13:08:26 +08:00
为什么要手工改它生成的文件?手工的单独写个啊
lhx2008
2018-01-02 13:31:56 +08:00
@kulove 那有有关联表的怎么办? pojo 还是要改吧
paragon
2018-01-02 13:39:48 +08:00
生成的和自己写的分开 自动生成的那部分用 CI 自动构建
lhx2008
2018-01-02 13:41:09 +08:00
@paragon 那 pojo 类怎么处理呢?
flowerwrong
2018-01-02 13:41:13 +08:00
我觉得三个方案:
1. 再加一层 modle extension,继承 model,父 modle 里面只放模板内容,自动生产且不变动,子 model 随意。
2. 自定义 mybatis-generator,把表间关系那些都自动生成。
3. 1 + 2 我就是这么干的。
paragon
2018-01-02 13:42:39 +08:00
@lhx2008 也分你自己写的和自动生成的~
lhx2008
2018-01-02 13:48:04 +08:00
@flowerwrong

@paragon

谢谢,看来就是 pojo 继承自动生成的,自动生成的 pojo 在实际业务中隐藏
然后关联查询也是继承自动生成的 mapper 接口就行
lhx2008
2018-01-02 16:40:55 +08:00
@flowerwrong 实际撸的时候又有问题,父类是模板内容,子类继承模板内容,但是 mapper 里面返回的是父类,怎么转到子类呢?
flowerwrong
2018-01-02 17:24:46 +08:00
@lhx2008 通用 mapper 和自定义 mapper 分开。
flowerwrong
2018-01-02 17:33:18 +08:00
@lhx2008 我项目比较复杂,完全把自动生成的东西和自定义的分开的。model,通用 mapper (参考插件 https://github.com/itfsw/mybatis-generator-plugin )都是生成的。如果需要 join 表自定义查询等,就新建 mapper 继承。该返回哪个 model 看需要,也可能定义新的 dto 返回。
lhx2008
2018-01-02 17:58:11 +08:00
@flowerwrong 对,这样子就弄等于就是从 sql 开始弄了两套了,虽然用继承可以少一点代码,但是还是很麻烦。
我的是小项目,想快速开发,我想是 DAO 层不动直接用生成的,然后直接在 Service 层做一些关联查询还有一些瞬时数据插入之类的。
但是自动生成的 model 又和 mapper 绑定了,直接在生成的 model 追加瞬时变量就可以满足我的需求。
所以现在到底要不要直接改 model 我也很纠结。
lhx2008
2018-01-02 18:02:38 +08:00
@flowerwrong 按照你的弄的话就是还要完全重写一个 mapper 的接口和一个 xml 来继承自动生成的,包括 get list 方法都要写一遍,但是我只是想多加几个瞬时属性
18583826786
2018-01-02 19:43:36 +08:00
pojo 中添加包装类,mapper 里在原来的 xml 中添加 sql 和创建新的 xml
lhx2008
2018-01-02 20:06:20 +08:00
自己摸索了个几个小时,找到一个比较好的方法,
让自己定义的 extension 当父类,然后在 generator 中设置<property name="rootClass" value="pojo.extension.xxxExtension"/>,就可以自动让生成出来类的继承自己的 Extension
然后如果要写自己写 mapper 也 extension 就好,非常简单
xiaoyangsa
2018-01-02 21:22:39 +08:00
。。我自己写了个生成.
lz 改 pojo 是不是和我一样,喜欢在 pojo 里面定义些类型常量。。
比如
数据库字段有个 int type
然后我 pojo 里会有个 String[] typeNameArray={"类型 1","类型 2"};
然后再构造一个 String typeName; get。。。set。。
这样来方便每次前端的显示。。

一直感觉这样不是个好习惯。讨论下。。
lhx2008
2018-01-02 21:37:26 +08:00
@xiaoyangsa
主要是为了定义常量和一对多关联。定义常量 我一般是用 Enum,哈哈。但是主要是一对多等等关联 mybatis-generator 不提供,自己写又要单元测试测半天,我也不知道各位大佬用 mybatis-generator 怎么优雅地解决关联管理的。
主要是以前用 hibernate 的惯性,只要一个 @OnetoMany 就可以定义一对多,自动 fetch,很爽,定义 @Transient 就可以随便加在前端显示的内容
但是换了 mybatis 之后,特别是用了 mybatis-generator 之后就啥也没有了,没 @OnetoMany,没 @Transient,于是就只能自己造轮子了,但是又不想破坏 mybatis-generator 生成的文件,于是研究了一天。
xiaoyangsa
2018-01-02 22:03:10 +08:00
@lhx2008
谢谢回复。我现在也是改用 Enum,感觉没有直接写方便。哈哈~
icegreen
2018-01-02 22:29:18 +08:00
推荐用 jpa. 完全自动化,简单项目下, 没有 sql, 没有建表语句, 很安逸.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/419348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX