mybaties多表查询显示奖惩管理列表列表

来源:互联网 发布:农村淘宝扶持政策 编辑:程序博客网 时间:2024/05/16 18:59

先把我们小组讨论的奖惩需求公布出来

奖惩管理需求分析

1.管理员能添加奖励、处罚的各种基本信息,并可以查询或修改奖励、处罚的基本信息。

2.普通用户登录能查询奖励、处罚的基本信息。

3.领导提交的奖惩消息发给对应的当事人确认,人事进行审批,结束。

数据库设计

奖惩表

奖惩编号

Id

int

奖惩ID

Is_id

int

员工id

P_id

int

奖惩时间

Is_time

date

奖惩内容

Is_content

text

奖惩类型

Is_type

varchar

 

员工表与奖惩表是一对多的关系

消息表

消息编号

 

INT

发送人编号

 

INT

接受人编号

 

INT

消息内容

 

VARCHAR(500)

类型

 

varchar(50)

是否阅读

 

VARCHAR(2)

收发时间

 

VARCHAR(2)

因为整个系统是一个公司内部的oa系统,涉及到不同类型的消息要发送,所以我们几个小组商量创建一个公共的消息表。如下图所示:


开始我们的表演了,我们小组两个同学开发。一个同学负责录入奖惩信息和消息弹窗的实现,另外一个同学就是我负责奖惩信息的分权限删改查。

数据库表里面的字段合不合理我们没有细致的去研究。到我的条件查看显示列表就出问题了。总是会查出许多重复的字段。我也不知道为什么奖惩表有35调条数据,最后查出来就有一百多条,

<select id="selectAllInstitution" resultType="java.util.HashMap" parameterType="map" >select Distinct r.id,r.userid ,u.username, u.name,r.type,r.content,r.createtime,m.isreadfrom rap r,users u,msg mwhere r.userid=u.id and m.receiver_id=r.userid and m.message_type=1<trim><if test="name != null">and u.name like concat(concat('%',#{name}),'%')</if><if test="pageSize != null and pageNum != null">limit #{pageNum} ,#{pageSize}</if></trim></select>

从用户表里面查用户名和姓名,从奖惩表里面查奖惩内容,类型,创建时间这些,消息表里面查看奖惩信息的阅读状态。message_type=1代表奖惩消息。


一个用户对应着多条奖惩信息和多条奖惩消息,三张表的连接关系是where r.userid=u.id and m.receiver_id=r.userid and m.message_type=1,开始我没有注意到表的关系出现了奖惩信息和奖惩表出现了多对多的情况。只知道不断的对数据进行去重。先是加了一个Distinct关键字,然后我点击消息弹窗时,将奖惩信息变为已读后,查询出来的消息就会出现已读和未读两条数据。我将数据库查出来的字段在添加一个消息id,发现重复数据对应的消息Id是不一样的。改为

select Distinct r.id,r.userid ,u.username, u.name,r.type,r.content,r.createtime,m.isreadfrom rap r,users u,msg mwhere r.userid=u.id and m.receiver_id=r.userid and m.message_type=1 group by u.id 
以上查出来的数据默认是最新的数据显示在前面,数据的显示的数量就是对的了。但是数据内容就可能不是一一对应的。所以我们在奖惩表里面添加一个字段消息id.