# 无脑增删改查
可视化代码生成器需配合前端工程一起运行。
可以临时使用其他项目的代码生成器【建议使用和当前Api服务的依赖包版本一致的生成器】
后期将会重构代码生成器的生成规则,将所有POJO的类名进行规范化。到时会统一通知。
# 1. 建表
具体规范详见数据库模块
# 2. 拷贝DDL到代码生成器
提示
按照图示步骤来即可,step2
主要用于控制你的class文件需要生成到什么包下面,页面的vue等文件需要生成在哪个文件夹下面。
通常这个名称为你的业务模块名称,比如用户模块可以取名为user
,论坛模块取名为forum
,这里暂时取名为demo
。
多表关联查询
功能暂时不可使用
# 3. 将生成的V6后端文件拷贝到项目
后端文件的拷贝只需要按照包名进行拷贝即可,是不是很简单?
小贴士
复制完整一个类的代码文字之后,只需要鼠标选中IDEA内的一个包(左侧文件目录中的包文件夹),然后CV
就可以自动完成文件的创建和拷贝。
# 4. 编译生成QueryDSL辅助类
当你将代码全部拷贝到项目后,会发现在service
的实现类中,有一个形如QXxxYxx
的类不存在,如上图。
其实这个类是QueryDSL
的一个sql编写的辅助对象。QueryDSL
写SQL语句的一个特点就是面向对象
,这个面向的对象就是QXxxYxx
。
正所谓好的将军,不打无准备之仗,所以我建议你可以去自行了解下完整的QueryDSL
语法,在这里我只做简单演示说明。
QueryDSL
单表查询参考:
QDemoTable qDemoTable = QDemoTable.demoTable;
List<DemoTable> list = queryFactory.select(qDemoTable)
.from(qDemoTable)
.where(qDemoTable.title.like("%杰夫%"))
.fetch();
2
3
4
5
6
怎么样,语法上是不是几乎和手写sql一毛一样?
再来看一个多表关联查询的例子:
QDemoTable qDemoTable = QDemoTable.demoTable;
QDemoTable2 qDemoTable2 = QDemoTable2.demoTable2;
List<Tuple> list = queryFactory.select(qDemoTable,qDemoTable2)
.from(qDemoTable)
.leftJoin(qDemoTable2)
.on(qDemoTable.id.eq(qDemoTable2.pid))
.where(qDemoTable.title.like("%杰夫%"))
.fetch();
2
3
4
5
6
7
8
9
我们注意到,select
方法中,如果有两个及以上参数时,最终返回值的泛型类型为Tuple
。
那么我们如何获取到我们实际真正需要的DO
对象呢?
list.forEach(tuple -> {
DemoTable demoTable = tuple.get(qDemoTable);
});
2
3
其实QueryDSL只是将多查询结果集做了一个聚合操作。
如果是类似菜单表那种,自己和自己关联,那你就需要取一个别名对象了。
QDemoTable qDemoTable = QDemoTable.demoTable;
/**
* 注意这里,使用的是QDemoTable的一个构造方法
* 其实QDemoTable.demoTable的本质也是:
* public static final QDemoTable demoTable = new QDemoTable("demoTable")
* 所以你自己取的别名不可以为demoTable
* 如果涉及同一个表的多表查询,建议别名的规则根据业务名称来取,比如学生和教师都属于用户表
* 那么可以如下取名
* QUser qStudent = QUser.user;
* QUser qTeacher = new QUser("qTeacher");
*/
QDemoTable qDemoTable2 = new QDemoTable("demoTable2");
List<Tuple> list = queryFactory.select(qDemoTable,qDemoTable2)
.from(qDemoTable)
.leftJoin(qDemoTable2)
.on(qDemoTable.id.eq(qDemoTable2.pid))
.where(qDemoTable.title.like("%杰夫%"))
.fetch();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
提示
这个别名你可以理解成sql语句中的,as
关键字。但不全一样,因为实际SQL代码生成中,并不是这个名字。
因为每个QXxxYyy
对象都有一个内置对象,所以如果你这个表在关联查询中只会使用一次,你可以不取别名,直接使用这个内置对象。
那么,回到正题,到底怎么生成这个QXxxYyy
类呢?
其实你只需要执行:
mvn clean
mvn compile
2
如果你对IDEA较为熟悉,你应该知道可以直接在Maven视图窗口中直接点击执行mvn命令
警告
请务必执行clean,养成良好的习惯。
因为如果你删除了一个字段,如果不执行clean,QXxxYyy
类是不会重新生成的。
这意味着,如果你的代码刚好使用了这个删除的字段,而你没有发现。并推送到了Git上。
当其他人从Git上获取你的代码后,编译时就会报错。