维护一个 spring 项目 用的 jpa,好多繁琐的表维护界面,经常有新需求,无非就是加一个新表增删改查。代码很重复,有没有什么技术实现线上自动创建表,直接实现增删改查的方法。
1
nothingLeft Feb 25, 2021 我们都是增删改查程序员,干嘛自己干掉自己!
|
2
asd999cxcx Feb 25, 2021
自动创建表?JPA 不就是项目启动后自动创建表吗...
|
3
WEBUG OP @asd999cxcx #2 这样的项目启动后,突然有需求要加一个 a 表,这个表是新的,没有 entity 也没有增删改查的方法,通过一个网页把 a 的属性都写好,自动创建这个表,系统就多出来一个维护界面,可以操作这个表了。原来的操作是,添加一套增删改查的代码再发布。
|
4
WEBUG OP @nothingLeft #1 这么一说还有点道理,这不是想把自己从繁琐无聊的工作中解放出来吗,虽然可以自动生成代码了,还想更近一步
|
5
RedBeanIce Feb 25, 2021
CRUD 的革命。
|
6
mhycy Feb 25, 2021
自己造一个基于配置的表单生成模块
|
8
LostPrayers Feb 25, 2021
代码生成器? 那些 xx 开发框架不是到处都是嘛
|
9
dushixiang Feb 25, 2021
jpa 做不到你的需求,看你说的好像流程很简单,可以自己实现一个 orm,创建表无非就是 create table xxx,然后 crud
|
10
superrichman Feb 25, 2021 via iPhone
phpmyadmin 🐶
|
11
WEBUG OP @superrichman #10 你这也太好用了
|
12
EscYezi Feb 25, 2021 via iPhone
不修改代码的话重启服务修改就没了,除非有一套机制重新走一遍初始化过程。感觉搞一个 generator 自动生成 java 代码和页面更简单。
|
13
WEBUG OP @LostPrayers #8 不是生成器
|
15
echowuhao Feb 25, 2021
postgrest 不过这个不是 jpa 了。
|
18
yungo8 Feb 25, 2021
不就是后台 ddl 吗,肯定有这类开源工具包的。如果只是固定的数据库类型,自己写个也不难
|
20
jjianwen68 Feb 25, 2021
把 jpa 启动时,自动创建表的逻辑手工调用一遍 ?
|
21
WEBUG OP @jjianwen68 #20 jpa 启动建表的话 entity 什么的实体类应该要有吧不太清楚,现在是连 entity 都没有,新增的表在代码里没有任何存在。
|
22
huifer Feb 25, 2021
前端页面不一定是单表 CRUD,每个输入框的验证逻辑等如何输入
|
23
chainsR Feb 25, 2021 via Android
人人开源?
|
24
huifer Feb 25, 2021
@Autowired
private OauthClientService oauthClientService; @Autowired private EntityManager entityManager; @Test public void testSession() { Query query = entityManager.createNativeQuery("SELECT id from oauth_client"); DetachedCriteria criteria = DetachedCriteria.forClass(Object.class) // 这里需要类型绑定,通过数据库类型和 JAVA 类型进行转换 .add(Property.forName("id") .eq(5L)); String s = criteria.toString(); EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory(); SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class); Session session = sessionFactory.openSession(); Criteria executableCriteria = criteria.getExecutableCriteria(session); List list = executableCriteria.list(); } @WEBUG JPA 层面代码. |
25
linbingcheng Feb 25, 2021
jpa 我最近感觉不大好用,还不如 mybatis 呢
|
26
itechify PRO 老铁想说的是 jpa 的 lowcode 框架?
|
27
dfzj Feb 25, 2021 老铁,增删改查还是用无远吧:www.wuyuan.io
|
28
guagusi Feb 25, 2021
基于元数据设计数据模型
|
29
WEBUG OP @oneisall8955 #26 就是这意思,java 就行,如果 jpa 真实现不了
|
30
clf Feb 25, 2021
这玩意很多……只是通过 JPA CRUD 就行了,没必要通过 JPA 建表。
可以考虑 sql 语句建表后根据数据库自动生成这个表的 CRUD 和实体类,这样可能会更好处理一点。 |
31
LarryWang Feb 25, 2021
用 excel 吧
|
32
zypy333 Feb 25, 2021
我这有个类似的实现,就是有若干系统模块,功能类似,字段不多,也没有什么复杂查询,单独建表开发感觉很繁琐,又有些公共属性,最后统一用了一张表来存储实际数据,多加了些通用字段,另外一张表记录模块配置,表里用 json 记录下不同的模块下通用字段的实际展示名称,实际表单类型,是否必须等等,最后展示的时候用的同一个界面做的增删改查.
|
33
lostpupil Feb 25, 2021
原理上就是 调用 create_table
然后 crud 找个 随便什么框架就行,graphql 也可以,不过有的可能需要重启 reload 。 不过这个其实你用 doc database 就很方便。 mongodb 什么的。 |
34
shade Feb 25, 2021
父子关系表如何处理呢?
|
35
ErrorMan Feb 25, 2021
反向操作是可以的,每次增加一个新的 entity,然后启动程序让 jpa 自己根据 entity 创建或更新表结构,前端 API 可以用 REST Repository 配合 REST api 直接提供给前端,然后前端根据 spring HATEOAS 路径去获得完整数据结构路径提供相关操作。大概的缺陷就是不好加鉴权吧,鉴权就得介入代码了
|
36
xuanbg Feb 26, 2021 尽管我很反对 GraphQL,但这种需求,就是 GraphQL 的菜。
|
37
ZiLong Feb 26, 2021
你是不是想要 jhipster 或者
jeecg-boot 这种? |
39
hantsy Feb 26, 2021
JPA 标准支持很多创建和维护表。https://github.com/hantsy/cargotracker/blob/master/src/main/resources/META-INF/persistence.xml#L9-L30 这个配置我写了常见的使用的几个例子。具体的参数,可以参考任何一本 JPA 书籍( Pro JPA2,Java Persistence with Hibernate ),或者规范文件,或者官方的 Jakarta EE Tutorial 。
不过一般生产环境上线都是经过优化过的脚本运行来创建表,生产环境我从来不主张用自动创建维护表。或者自己用 Flyway 之类的维护脚本更稳妥一些。 |
40
bthulu Feb 26, 2021
动态生成 entity 和 dao 层的.java 文件, 并自动提交到 git 仓库, 触发构建部署就行了
|
41
liian2019 Mar 3, 2021
1. 获取数据库表结构,做成配置保存
2. 从配置表读取配置,利用 javassist/asm 生成 pojo,mapper 等等类的 class 加载到虚拟机 |