若依generator模块解读,Java小白入门(七)

模块基本内容

若依的核心模块基本除了安全那一块,现在还是剩下一个比较重要的章节,是ruoyi-generator,就是代码根据模板来生成,这一块很有必要进行深入了解,本章节我们弄清楚基本框架,以后,我们会在这一块会根据开发内容持续跟进。为何需要重点关注呢?

使用脚手架,这是低代码的基本方向,程序员基本工作就是复杂逻辑还得自己动手,但是基本框架可以根据业务需求,编写对应的各层公共的程序,这个效率很有价值,并且减少不必要的手工错误,减少无价值的测试内容,把精力放在业务代码逻辑上。

代码生成模块结构比较清晰,如下图

若依generator模块解读,Java小白入门(七)_第1张图片

  1. config 就是配置生成代码的一些常量
  2. controller 前端调用生成代码的封装,调用生成表和生成字段的服务
  3. domain 表和字段的实体
  4. mapper 到数据库取得表和字段的相关信息
  5. service 表及字段生成模板的服务
  6. util 生成模板工具
  7. resources 里面有xml配置mybatis及vm的各个模板
  8. generator.yml 配置常量

Velocity 简介

背景

Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。

1.Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。

2. 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。

3. 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。

4. 转换 xml:Velocity 提供一个叫 Anakia 的 ant 任务,可以读取 XML 文件并让它能够被 Velocity 模板读取。一个比较普遍的应用是将 xdoc 文档转换成带样式的 HTML 文件。

语法

1. 基本语法

# 关键字

Velocity关键字都是使用#开头的,如#set、#if、#else、#end、#foreach等

$ 变量

Velocity变量都是使用$开头的,如:$name、$msg

{}变量

Velocity对于需要明确表示的Velocity变量,可以使用{}将变量包含起来。如在页面中,需要有$someoneName这种内容,此时为了让Velocity能够区分,可以使用${someone}Name。

!变量

如果某个Velocity变量不存在,那么页面中就会显示$xxx的形式,为了避免这种形式,可以在变量名称前加上!如页面中含有$msg,如果msg有值,将显示msg的值;如果不存在就会显示$msg。这是我们不希望看到的,为了把不存在的变量显示为空白,可以使用$!msg。

2. 变量

变量定义

#set($root = "www")  
#set($name = "index")  
#set($template = "$root/$name")  
$template

执行输出结果:

www/index

变量赋值

赋值的左边必须是一个变量,或者是属性的引用。右边可以是:变量引用、字面字符串、属性引用、方法引用、字面数字、数组

#set($name = $bill)   ##变量引用  
#set($name.pre = "monica")  ##字符串  
#set($name.last = $address.num) ##属性引用  
#set($name.mid = $hotel.find($web)) ##方法引用  
#set($name.num = 123) ##数字  
#set($name.say = ["yes",$my,"yes"]) ##数组

velocity会将属性解释为属性的get方法,如:

$foo.Bar   等同于 $foo.getBar()
$foo.User("join")  等同于 $foo.getUser("join")
$foo.Request.ServerName 等同于 $foo.getRequest().getServerName()
3. 转义字符'\'
#set($mail = "foo")  
$mail  
\$mail  
\\$mail  
\\\$mail

执行结果如下:

foo $mail \foo \$mail
4. 循环

语法定义如下:

#foreach( 单个元素名称 in 集合)  
         ....  
#end

例子如下:

#foreach( $num in [2..-2])  
    this is $num.
#end

执行结果如下:

this is 2.
this is 1.
this is 0.
this is -1.
this is -2
5. 条件

语法定义如下:

#if(condition)  
......
#elseif(condition)  
......
#else  
......
#end
6. 关系和逻辑操作符
&& 并且  || 或者   ! 取反
7. 注释

1. 单行注释##

##这里写注释

2. 多行注释#* *#

#*  
    这个写注释  可以写多行的注释
*#
8. 宏

语法定义如下:

#macro(宏的名称  $参数1  $参数2 .....)  
       语句体(即函数体)  
#end

宏调用如下:

#宏的名称 ($参数1 $参数2 .....)

使用测试

若依generator模块解读,Java小白入门(七)_第2张图片

生成以上代码,前端和后端都有,还没有完全集成到代码中,为什么呢?

下一步

马上要启动组织管理的代码实现,所以我们可以用Radzen Blazor和若依的代码生成,同样使用脚手架,来验证到底哪个的开发效率更高。

你可能感兴趣的:(Java拾遗,java,模板引擎)