SSM查看详情功能逻辑代码以及关联码表显示

时间:2022-12-13 00:53:56


场景

在后台管理中,有些报表要显示的字段很多,当进入报表的主页面时,往往只显示部分重要的内容,然后在每一条记录的后面添加一个查看详情按钮,通过点击详情按钮,跳转到显示所有信息的页面。

SSM查看详情功能逻辑代码以及关联码表显示

有时一张报表中存取的字段为数字,比如1就代表“是”;0就代表“否”,而我们在查看详情时,往往要关联码表来显示数字所对应的中文。

实现逻辑

1.在报表主页面添加详情按钮,点击详情按钮,跳转到action,并将当前数据的ID传给action。

2.在action中,在对应的方法中,参数接受传过来的ID,然后调用service的getUserBillDetailsById(id)。

3.在service的实现中调用dao的getUserBillDetailsById(id)。

4.对应的mapper文件中与dao中同名的select中,进行关联码表的sql的书写。

5.在mapper包下写一个mapper的扩展的包,与用代码生成工具生成的mapper文件同名。

6.在扩展的mapper文件中,编写关联码表的sql语句,并新增结果集resultmap,继承自动生成的mapper文件中的resultmap。

7.在Model包下,新建扩展的Model包,以及对应的扩展的Model类,使其继承原来的单表的Model类。

8.在扩展的Model类中,新增关联码表后要显示的字段,以及相应的set和get方法。

9.在action中将获取到的扩展的Model传给详情页面,进行显示即可。

代码实现

1.报表主页面

<td> 
<button type="button" class="btn btn-default"
data-options="{id:'userOrderDetailDialog',url:'${ctx}/bus/userBillSerailAction/toDetails',type:'post',data:{id:${u.id}}}"

data-title="订单详情">详情</button>
</td>

这是EasyUI的代码,效果是跳转到action,并将当前的记录的id传过去。

2.查看详情action

@RequestMapping(value="/toDetails")
public ModelAndView toHandle(Integer id){
ModelAndView mv=null;
try{
mv=new ModelAndView();
BusUserBillserialExt billserial = billService.getUserBillDetailsById(id);
mv = new ModelAndView();
mv.addObject("billserial", billserial);
mv.setViewName(ModelAndViewConstants.USERBILL_EDIT_VIEW);
LogService.getInstance(this).debug("加载详情成功:"+ModelAndViewConstants.SERVETYPE_MAIN_VIEW);
}catch(Exception ex){
LogService.getInstance(this).error("加载详情失败:" + ex.getMessage(), ex);
mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
}
return mv;
}

3.service

public BusUserBillserialExt getUserBillDetailsById(int id);

4.serviceImpl

@Override
public BusUserBillserialExt getUserBillDetailsById(int id) {

return dao.getUserBillDetailsById(id);
}

5.dao

public BusUserBillserialExt getUserBillDetailsById(int id);

6.mapper

<resultMap  type="**.model.ext.BusUserBillserialExt" extends="BaseResultMap">

<result column="transactionTypeName" property="transactionTypeName" jdbcType="VARCHAR" />
<result column="orderTypeName" property="orderTypeName" jdbcType="VARCHAR" />
<result column="isUseRedPackageName" property="isUseRedPackageName" jdbcType="VARCHAR" />
</resultMap>

<select parameterType="java.util.Map" resultMap="BaseResultMapExt">
select
bub.*,sc.CodeName transactionTypeName,
sc1.CodeName orderTypeName
FROM
bus_user_billserial bub
LEFT JOIN sys_code sc ON sc.codeType = "merchantTransactionType"
AND sc.CodeValue = bub.TransactionType
LEFT JOIN sys_code sc1 ON sc1.codeType = "orderType"
AND sc1.CodeValue = bub.OrderType
where bub.Id = #{id}
</select>

7.扩展Model

public class BusUserBillserialExt extends BusUserBillserial implements java.io.Serializable{


private static final long serialVersionUID = 1L;
//码表字段
private String transactionTypeName;
private String orderTypeName;
private String isUseRedPackageName;
//格式化日期
private String transactionTimeChanged;

public String getOrderTypeName() {
return orderTypeName;
}
public void setOrderTypeName(String orderTypeName) {
this.orderTypeName = orderTypeName;
}
public String getTransactionTypeName() {
return transactionTypeName;
}
public void setTransactionTypeName(String transactionTypeName) {
this.transactionTypeName = transactionTypeName;
}
public String getIsUseRedPackageName() {
return isUseRedPackageName;
}
public void setIsUseRedPackageName(String isUseRedPackageName) {
this.isUseRedPackageName = isUseRedPackageName;
}
public String getTransactionTimeChanged() {
if(getTransactionTime()!=null) {
transactionTimeChanged=DateUtil.formatDate(getTransactionTime(),"yyyy-MM-dd HH:mm:ss");
}
return transactionTimeChanged;
}
public void setTransactionTimeChanged(String transactionTimeChanged) {
this.transactionTimeChanged = transactionTimeChanged;
}


}

8.详情页jsp

<td class="pass_width_ave_7_column">${billserial.orderTypeName}</td>

<td class="pass_width_ave_7_column">${billserial.transactionTypeName}</td>