UJCMS后端二次开发教程03-后端示例代码

2023-08-27 14:17 阅读

为了让用户更容易掌握二次开发方法,系统中专门提供了二次开发的示例代码。示例代码完整的演示了二次开发中的各个步骤,非常符合实际的开发工作。

建表语句

src/main/resources/db/changelog/db.changelog-8.0.yaml

其中示例表的建表内容如下:

  - changeSet:
      id: 1691729970999-1
      author: PONY (generated)
      changes:
        - createTable:
            columns:
              - column:
                  constraints:
                    nullable: false
                    primaryKey: true
                  name: id_
                  remarks: ID
                  type: INT
              - column:
                  name: name_
                  remarks: 名称
                  type: VARCHAR(90)
              - column:
                  name: description_
                  remarks: 描述
                  type: VARCHAR(450)
              - column:
                  name: height_
                  remarks: 身高
                  type: INT
              - column:
                  name: birthday_
                  remarks: 出生日期
                  type: datetime
              - column:
                  constraints:
                    nullable: false
                  defaultValue: '1'
                  name: enabled_
                  remarks: 是否启用
                  type: CHAR(1)
            tableName: ujcms_example

数据库表结构由Liquibase维护。主要的作用是跨数据库平台,以及升级时不需要手动执行sql。但使用稍显复杂和麻烦,有一定的学习难度。

实际二次开发时,可按传统的方式,直接通过SQL语句建表即可。Liquibase根据实际情况及技术储备,可用可不用。

实体类基类

com.ujcms.cms.ext.domain.base.ExampleBase

对应数据库字段,由代码生成器生成并维护,不可手动修改。数据库增加或修改字段后,重新运行代码生成器,改类的代码会自动更新。如手动修改了这个类,再次生成代码时,手动修改的内容会被覆盖。

实体类

com.ujcms.cms.ext.domain.Example

该类会在代码生成时生成,但修改表结构后再次生成代码时,不会被修改或覆盖。此类可以增加一些自己的代码和逻辑。

Mapper接口

com.ujcms.cms.ext.mapper.ExampleMapper

代码生成器会生成该类,但之后不会被代码生成器修改或覆盖。

Mapper.xml

src/main/resources/com/ujcms/cms/ext/mapper/ExampleMapper.xml

代码生成器会生成该文件,且修改数据库表结构后再次运行代码生成器,会自动维护其中部分代码(如字段信息部分代码)。

可以在这个文件中新增自己的代码,再次运行代码生成器不会覆盖自己新增的代码。

代码生成器会自动维护的代码包括:BaseResultMap Column_List insert update。这些标签的代码不要进行修改,再次运行代码生成器会覆盖这些代码。

Service

com.ujcms.cms.ext.service.ExampleService

代码生成器会生成该类,但之后不会被代码生成器修改或覆盖。

ServiceArgs

com.ujcms.cms.ext.service.args.ExampleArgs

该类可以定义一些常用查询参数。方便复用。

代码生成器会生成该类,但之后不会被代码生成器修改或覆盖。

后台Controller

com.ujcms.cms.ext.web.backendapi.ExampleController

代码生成器会生成该类,但之后不会被代码生成器修改或覆盖。

示例代码接口默认已被注释。如需示例接口可用,请取消相应注释:

@RestController("backendExampleController")
@RequestMapping(BACKEND_API + "/ext/example")

前台Controller

  • com.ujcms.cms.ext.web.api.ExampleController
  • com.ujcms.cms.ext.web.frontend.ExampleController

代码生成器不会生成该类。

示例代码接口默认已被注释。如需示例接口可用,请取消相应注释:

@Tag(name = "ExampleController", description = "示例接口")
@RestController
@RequestMapping({API + "/example", FRONTEND_API + "/example"})
@Controller("frontendExampleController")

标签

  • com.ujcms.cms.ext.web.directive.ExampleDirective
  • com.ujcms.cms.ext.web.directive.ExampleListDirective
  • com.ujcms.cms.ext.web.directive.ExamplePageDirective

代码生成器不会生成该类。

注册标签

标签类需要注册到Freemarker中。通常在ContextConfig类中注册。

com.ujcms.cms.ext.ContextConfig

configuration.setSharedVariable("Example", new ExampleDirective(exampleService));
configuration.setSharedVariable("ExampleList", new ExampleListDirective(exampleService));
configuration.setSharedVariable("ExamplePage", new ExamplePageDirective(exampleService));

模板

  • src/main/webapp/templates/1/default/sys_example.html
  • src/main/webapp/templates/1/default/sys_example_item.html
  • src/main/webapp/templates/1/default/sys_example_form.html

代码生成器不会生成模板。

QQ咨询
电话
微信
微信扫码咨询