一、数据库建表规范
首先设计数据库表格,思考班级表格中需要的字段,
班级表需要班级id、班级名称、创建者、是否删除、创建时间、更新者、更新时间字段信息。
学生表需要学生id、学生姓名、班级id、学生年龄、学生性别、学生电话、学生地址、是否删除以及创建者、创建时间、更新者、更新时间字段信息。
设计的数据表如下图所示,
Sql语句如下:
CLASSES
DROP TABLE "LEARN"."T_TEST_CLASSES";
CREATE TABLE "LEARN"."T_TEST_CLASSES" (
"ID" VARCHAR2(255 BYTE) VISIBLE NOT NULL,
"CNAME" VARCHAR2(255 BYTE) VISIBLE,
"CRTUSER" VARCHAR2(255 BYTE) VISIBLE,
"CRTDATE" DATE VISIBLE,
"UPDUSER" VARCHAR2(255 BYTE) VISIBLE,
"UPDDATE" DATE VISIBLE,
"ISDELETE" VARCHAR2(255 BYTE) VISIBLE DEFAULT 0
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
-- ----------------------------
-- Primary Key structure for table T_TEST_CLASSES
-- ----------------------------
ALTER TABLE "LEARN"."T_TEST_CLASSES" ADD CONSTRAINT "SYS_C0011667" PRIMARY KEY ("ID");
-- ----------------------------
-- Checks structure for table T_TEST_CLASSES
-- ----------------------------
ALTER TABLE "LEARN"."T_TEST_CLASSES" ADD CONSTRAINT "SYS_C0011666" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "LEARN"."T_TEST_CLASSES" ADD CONSTRAINT "SYS_C0014911" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Triggers structure for table T_TEST_CLASSES
-- ----------------------------
CREATE TRIGGER "LEARN"."CLASSESTRIGER" BEFORE INSERT ON "LEARN"."T_TEST_CLASSES" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
begin
/*触发后执行的动作,在此是取得序列SEQ_BC_ES_IK_HOT_WORD的下一个值插入到表BC_ES_IK_HOT_WORD中的id字段中*/
select classesa.nextval into :new.id from dual;
end;
/
STU
DROP TABLE "LEARN"."T_TEST_STU";
CREATE TABLE "LEARN"."T_TEST_STU" (
"ID" VARCHAR2(255 BYTE) VISIBLE NOT NULL,
"SNAME" VARCHAR2(255 BYTE) VISIBLE,
"CLASSID" VARCHAR2(255 BYTE) VISIBLE,
"SAGE" VARCHAR2(255 BYTE) VISIBLE,
"SSEX" VARCHAR2(255 BYTE) VISIBLE,
"STEL" VARCHAR2(255 BYTE) VISIBLE,
"SADDRESS" VARCHAR2(255 BYTE) VISIBLE,
"CRTUSER" VARCHAR2(255 BYTE) VISIBLE,
"CRTDATE" DATE VISIBLE,
"UPDUSER" VARCHAR2(255 BYTE) VISIBLE,
"UPDDATE" DATE VISIBLE,
"ISDELETE" VARCHAR2(255 BYTE) VISIBLE DEFAULT 0
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."ID" IS 学生id;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."SNAME" IS 学生姓名;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."CLASSID" IS 班级id;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."SAGE" IS 学生年龄;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."SSEX" IS 学生性别;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."STEL" IS 学生电话;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."SADDRESS" IS 学生地址;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."CRTUSER" IS 创建者;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."CRTDATE" IS 创建时间;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."UPDUSER" IS 更新者;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."UPDDATE" IS 更新时间;
COMMENT ON COLUMN "LEARN"."T_TEST_STU"."ISDELETE" IS 是否删除;
-- ----------------------------
-- Primary Key structure for table T_TEST_STU
-- ----------------------------
ALTER TABLE "LEARN"."T_TEST_STU" ADD CONSTRAINT "SYS_C0011665" PRIMARY KEY ("ID");
-- ----------------------------
-- Checks structure for table T_TEST_STU
-- ----------------------------
ALTER TABLE "LEARN"."T_TEST_STU" ADD CONSTRAINT "SYS_C0011664" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "LEARN"."T_TEST_STU" ADD CONSTRAINT "SYS_C0014917" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Triggers structure for table T_TEST_STU
-- ----------------------------
CREATE TRIGGER "LEARN"."STUTRIGER" BEFORE INSERT ON "LEARN"."T_TEST_STU" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
begin
/*触发后执行的动作,在此是取得序列SEQ_BC_ES_IK_HOT_WORD的下一个值插入到表BC_ES_IK_HOT_WORD中的id字段中*/
select stua.nextval into :new.id from dual;
end;
/
CREATE TRIGGER "LEARN"."STU_TRIGGER" BEFORE INSERT ON "LEARN"."T_TEST_STU" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
begin
select stu_seq.nextval into :new.ID from dual;
end ;
/
CREATE TRIGGER "LEARN"."TRG_STU_ID_SEQ" BEFORE INSERT ON "LEARN"."T_TEST_STU" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW WHEN (new.id is null)
begin select T_TESE_STU.nextval into:new.id from dual;
end trg_user_id_seq ;
/
CREATE TRIGGER "LEARN"."T_TEST_STU_ID" BEFORE INSERT ON "LEARN"."T_TEST_STU" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
BEGIN
NULL;
END;
/
-- ----------------------------
-- Foreign Keys structure for table T_TEST_STU
-- ----------------------------
ALTER TABLE "LEARN"."T_TEST_STU" ADD CONSTRAINT "CLASSID" FOREIGN KEY ("CLASSID") REFERENCES "LEARN"."T_TEST_CLASSES" ("ID") NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
二、执行代码生成后端操作
访问网址
**************************
查看代码生成模块,查看自己新建的数据库表格。
1.配置数据库表信息,生成代码的配置信息。
进行配置,设置一些基本信息。
2.执行预览或者下载操作。
得到安装包,把安装包解压,并将相应文件,放置到指定位置。
3.分析生成的逻辑代码,进行查看,理解。
持久层方法
// * 条件分页查询当前数据库中的数据
IPage query(Page page, @Param("dto") TTestClassesQueryDto dto);
//条件查询当前数据库中的所有数据
List query(@Param("dto") TTestClassesQueryDto dto);
业务层
NtPage query(TTestClassesQueryDto dto);
impl 调用分页,设置第几页以及每页内容,添加创建者。调用mapper的query方法、
public NtPage query(TTestClassesQueryDto dto) {
Page page = new Page<>();
page.setCurrent(dto.getCurrent());
page.setSize(dto.getSize());
page.addOrder(new OrderItem("CRTDATE", false));
IPage list = super.baseMapper.query(page,dto);
return NtPage.of(list, record -> dozerMapper.map(record, TTestClassesVo.class));
}
Controller,调用servicen方法,返回数据集合
@Log("测试班级学生表接口:查询")
@ResponseBody
@ApiOperation(value = "测试班级学生表接口:查询", consumes = "application/json")
@RequestMapping(value = "/query",method = {RequestMethod.POST })
public ServerResponse> query(@Valid @RequestBody TTestClassesQueryDto dto){
NtPage list = tTestClassesService.query(dto);
return ServerResponse.ok(list);
}
4.进行接口测试
在application.yml找到
api:secret:type:some
将type设置为none 这样可以获取token
(1)首先打开apipost,然后访问http://localhost:8888/adminLogin,获取token,将token设置变量,以便后期应用。
(2)测试班级信息。http://localhost:{{Port}}/tTestClasses/query 用post请求访问,将body设置为json字符串,返回200的响应,然后在json里面设置分页信息,也可以通过条件进行查询。也对修改删除等字段进行测试其他信息,查看返回值,以及修改是否成功。
{
"current":"1",
// 第几页
"size":"10",
// "id": 23
// "cname": "高一1班"
}
(3)测试结束。功能正常。
三、执行前端页面的生成,应用以及测试。
1.将生成的前端代码,放在指定位置。
2.设置getRouter.js,路由访问路径的设置。
{
path: /learn,
component: Layout,
redirect: /learn,
name: learn,
meta: { title: 学习模块, icon: doc },
children: [
{
path: classes,
name: classes,
component: () => import(@/views/learn/classes/index.vue),
meta: { title: 课程测试, icon: doc }
},
{
path: stu,
name: stu,
component: () => import(@/views/learn/stu/index.vue),
meta: { title: 学生测试, icon: doc }
}
]
},
3.启动前端页面,访问网址,进行登录查看,此时要将application.yml的api.secret.type:some,改为some
首先在菜单模块新增学习目录,然后在学习目录下面新增班级测试和学生测试菜单
菜单的路由地址设置为learn
班级测试的路由地址设置为classes,组件名称也是classes,组件路径设置i为@/views/learn/classes/index.vue
在班级测试下面新增 新增按钮,删除和修改按钮。权限标志设置为:TTestClasses:add、TTestClasses:del、TTestClasses:deledit
然后对模块进行测试,进行新增、修改、删除、以及条件查询,功能正常。
4.前端页面完成
四、添加一对多查询功能。
1.一个班级对应多个学生,首先在po类TTestClasses.java中添加,
@TableField(exist = false)private List
private List
dto类TTestClassesQueryDto类中添加
/** 班级名称 */@ApiModelProperty(name="tTestStus",value = "班级名称")@TableField(exist = false)private List
2.对mapper添加方法,返回值是classesvo类的集合
List
3.对应的sql设计,返回值集合设置为
对应的sql
4.业务层
List querySC5();
实现类
@Override
public List querySC5() {
List tTestClasses = super.baseMapper.querySC5();
return tTestClasses;
}
5.设计controller
@Log("测试班级学生表接口:查询详情")
@ResponseBody
@ApiOperation(value = "测试班级学生表接口:查询详情", consumes = "application/json")
@RequestMapping(value = "/querySC5", method = {RequestMethod.POST })
public ServerResponse> querySC5(){
List list = tTestClassesService.querySC5();
return ServerResponse.ok(list);
}
6.进行接口测试
访问http://localhost:8888/tTestClasses/querySC5,查看返回值信息。
返回值正常,能够正常显示。