使用 Liferay 做二次开发项目,少不了数据库设计! 我们可以使用 Liferay 提供的 Service Builder(服务构建器)在 service.xml 文件中定义各个数据库实体之间的关系,然后为你的应用程序自动生成必要的模型、持久化和服务层,其中也包括了对实体的创建、读取、更新、删除和查找等操作。这样你就可以有更多地时间专注于业务逻辑的实现,做出更有价值的功能!谈到数据库设计,数据库实体间有三种对应关系:一对一、一对多、多对多。今天我们先来讲 Liferay 中如何实现多对多关系。就拿学生选课这种最通俗易懂的例子来说吧。通常一个学生可以学习多门课程,一门课程也可以被多名学生学习。
从中可以提炼出两个实体:学生:Student课程:Course要记录学生和课程的关系,在学生或课程表中添加一个字段肯定是行不通的,我们需要考虑建议关系表,比如 Students_Courses。在 PowserDesigner 这种数据库设计工具中,如果概念模型中定义了多对多关系,在生成逻辑模型或者物理模型时,会自动新增一个实体做关系表。根据这样的思路,我们只需要在 service.xml 中定义三个实体(Student、Course、Students_Courses )也可以解决多对多的问题。但是有没有更简单的方法呢?像 PowserDesigner 概念模型那种,只需要创建两个实体,并定义他们的关系即可?Liferay 提供的 Service Builder 正好提供了这种方便的定义方式。接下来,我们实际操作一下吧。开发环境
Liferay Portal:7.0.4 GA5Liferay IDE:3.1.2创建 Service Builder 模块项目
创建项目名为的模块项目。
设置包名为。
在 service.xml 定义实体及关系
参考以下代码编辑文件:
DEMO
部署 Service Builder 模块执行 Gradle 命令及命令,成功之后就可以在数据库中看到三张表了,表名分别是、、。创建测试项目
创建项目名为的模块项目。
指定组件类名为,包名为。
添加测试代码
publicclassManyToManyPortletextendsMVCPortlet{
@Override
publicvoiddoView(RenderRequestrenderRequest,RenderResponserenderResponse)
throwsIOException,PortletException{
Studentstudent1,student2;
student1=StudentLocalServiceUtil.createStudent(CounterLocalServiceUtil.increment());
student2=StudentLocalServiceUtil.createStudent(CounterLocalServiceUtil.increment());
student1.setName("fanqi");
student2.setName("huqiwen");
StudentLocalServiceUtil.addStudent(student1);
StudentLocalServiceUtil.addStudent(student2);
Coursecourse1,course2;
course1=CourseLocalServiceUtil.createCourse(CounterLocalServiceUtil.increment());
course2=CourseLocalServiceUtil.createCourse(CounterLocalServiceUtil.increment());
course1.setName("Liferay Portal");
course2.setName("Liferay Mobile SDK");
CourseLocalServiceUtil.addCourse(course1);
CourseLocalServiceUtil.addCourse(course2);
CourseLocalServiceUtil.addStudentCourses(student1.getStudentId(),newlong[]{course1.getCourseId(),course2.getCourseId()});
CourseLocalServiceUtil.addStudentCourse(student2.getStudentId(),course1);
super.doView(renderRequest,renderResponse);
}
}
部署并查看测试数据
执行 Gradle 命令命令,并将添加页面,就可以在数据库中看到测试数据了。
领取专属 10元无门槛券
私享最新 技术干货