使用Nutz[1.b.38]对关联数据表的一对一/一对多操作
本文在上一篇《使用Nutz[1.b.38]对数据库表的CRUD操作》的基础上进行扩展,有兴趣的话可以先阅读一下。
?
在完成此demo的过程中,发现DAO中有某些需求目前还无法完成,文章末尾会提到,只能待灰太狼解决了。
?
好了,直接上教程,关于一些环境、数据源和dao对象、web.xml的配置,请移步上一篇查看。
?
?
进入主题:
?
一、此demo涉及两个表DepartmentInfo和UserInfo,SQL如下:
-- ----------------------------
-- Table structure for `departmentinfo`
-- ----------------------------
DROP TABLE IF EXISTS `departmentinfo`;
CREATE TABLE `departmentinfo` (
??`departmentInfoId` int(11) NOT NULL AUTO_INCREMENT,
??`departmentName` varchar(50) DEFAULT NULL,
??PRIMARY KEY (`departmentInfoId`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of departmentinfo
-- ----------------------------
INSERT INTO `departmentinfo` VALUES ('1', 'IT部');
INSERT INTO `departmentinfo` VALUES ('2', '人力资源');
INSERT INTO `departmentinfo` VALUES ('3', '财务部');
INSERT INTO `departmentinfo` VALUES ('4', '市场部');
?
-- ----------------------------
-- Table structure for `userinfo`
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
??`userInfoId` int(11) NOT NULL AUTO_INCREMENT,
??`trueName` varchar(20) DEFAULT NULL,
??`departmentInfoId` int(11) DEFAULT NULL,
??`addDate` datetime DEFAULT NULL,
??`addIp` varchar(15) DEFAULT NULL,
??PRIMARY KEY (`userInfoId`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES ('1', 'Gevin', '1', '2011-07-25 19:28:50', '127.0.0.1');
INSERT INTO `userinfo` VALUES ('2', 'Wendal', '1', '2011-07-25 19:29:07', '127.0.0.1');
INSERT INTO `userinfo` VALUES ('3', '小宝', '2', '2011-07-25 19:29:55', '127.0.0.1');
INSERT INTO `userinfo` VALUES ('4', '灰太狼', '3', '2011-07-25 19:30:11', '127.0.0.1');
INSERT INTO `userinfo` VALUES ('5', 'E-Hunter', '3', '2011-07-25 19:30:38', '127.0.0.1');
INSERT INTO `userinfo` VALUES ('8', 'k-wait', '4', '2011-07-26 15:54:01', '127.0.0.1');
?
?
二、结构图
?
二、Model类
DepartmentInfo.java
?
其中获取部门名称的代码是${ui.departmentInfo.departmentName}
?
?
?
showUserInfoList2.jsp:体现一对多的关系
?
?其中使用
?
?
来循环列出该部门的所有用户。
?
?
五、重启Tomcat,访问以下地址:
http://127.0.0.1:204/UserManageSystem/userinfo/showUserInfoList.shtml
?
?
效果图如下:
showUserInfoList.jsp
?
?
?
showUserInfoList2.jsp
----------------------------------------------
?
?
OK,第二篇教程搞定了。希望对大家有用。
?
在此demo中,发现了dao中有一个问题目前还没有解决,即Nutz中关联查询的排序问题,假如我在查询用户列表时,无法通过departmentInfo.departmentName字段来排序,即无法使用以下代码获取:
List<UserInfo> uiList = this.userInfoService.query(Cnd.orderBy().asc("departmentInfo.departmentName"), null);
?
此需求已提交给灰太狼,待解决。
?
目前要解决此问题,可以不使用对象关联,而是通过Nutz提供的视图来解决。
?
Nutz中提供的视图功能还是蛮给力的!只不过后期维护的时候,如增加字段、删除字段,要记得更新视图才行。
?
关于Nutz如何使用视图,会在下一篇《在Nutz[1.b.38]中使用视图对关联数据表的操作》讲到。
?
好了,最后把源代码奉上!!!
?
?
?
1 楼 kaywood 2011-11-21 员工信息列表界面,要使用部门名称来模糊查询,并且需要分页,用NUTZ该怎么做? 2 楼 gevin 2011-12-22 kaywood 写道员工信息列表界面,要使用部门名称来模糊查询,并且需要分页,用NUTZ该怎么做?
已跟Nutz管理员沟通过,他表示暂时不打算让Nutz支持关联对象的属性查询或排序。目前要解决此问题,可以通过视图来解决。可参考在Nutz[1.b.38]中使用视图对关联数据表的操作