欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实体类作为另一个实体类的属性向前台传数据的问题

程序员文章站 2022-03-04 14:08:09
...

最近在二次开发一个springMVC项目,遇到了一个数据展示问题:因为后台实体类在编写的时候,使用另一个实体类作为一个实体类的属性,但是在前台要展示的数据在两个实体类中都有涉及,如下于是就犯了难,难道非要在返回数据的时候再封装一个传参数的对象出来吗?但是其他地方都不会用到的这个对象,我不想这么做。经过debug 代码分析各个参数之后,解决了这个问题。代码如下:
实体类:请关注其中  QRCodeEntity 这个对象类型的属性

@Entity
@Table(name = "legalpublish_book")
public class LegalPublishBookEntity extends IdEntity {
	
	private Integer bookyear;//书籍年份
	private String bookname;//书籍名称
	private Integer bookorder;//书籍排序
	private String bookchapter;//宪法/经济法~ 之类的
	private Integer sectionnumber;//节编号
	private String booksection;//反分裂国家法(宪法的细分)
	private Integer qrcodeitem;//二维码对应部分    1书籍  2章 3节
	private String parentid;//书籍无父id 章对应书的id 节对应章的id	
	private String accountid;
	private Integer bindablequantity;//可绑定的用户数
	private Set<GzUserInfo> userlist;//已绑定用户
	
	
	private QRCodeEntity qrcode;//对应二维码
	
	private List<StripEntity> striplist;//对应的节内容

前端使用的bootstrap框架,使用如下方法调取数据:请关注二维码字段

//获取表格数据
function loadTableData(){
	 $("#tableGridData").bootstrapTable({
    	method: "post",  //使用get请求到服务器获取数据  
    	contentType : "application/x-www-form-urlencoded",
        url: "stripBookQrcodeController.do?datagrid&field=id,bookyear,bookname,bookchapter,sectionnumber,booksection,qrcodeitem,parentid,accountid,isbind,bindablequantity,qrcode_codeticket,userlist", //获取数据的Servlet地址   
        striped: true,  //表格显示条纹  
        queryParams: function queryParams(params) {   //设置查询参数
            var param = {
        		page: params.offset/params.limit+1,
        		rows: params.limit,
        		sort: params.sort,
                order:params.order,
                isbind:$("#isbindsearch").val(),
                bookname:$("#booknamesearch").val(),
            };
            return param;
        },
        pagination: true, //启动分页  
        pageSize: 10,  //每页显示的记录数  
        pageNumber:1, //当前第几页  
        pageList: [5, 10, 20, 100, 1000],  //记录数可选列表  
        search: false,  //是否启用查询  
        sortable: true,                     //是否启用排序
        showColumns: true,  //显示下拉框勾选要显示的列  
        showRefresh: true,  //显示刷新按钮  
        sidePagination: "server", //表示服务端请求  
		locale:'zh-CN',
        clickToSelect: true,    //是否启用点击选中行
        columns: [{
        	checkbox: true
        }, {
        	field:'id',
        	visible: false,
        },{
        	field:'bookyear',
        	title: '书籍年份',
        	sortable : true,
        },{
        	field:'isbind',
        	title: '二维码类型',//真题二维码  普通二维码
        	sortable : true,
        },{
        	field:'bindablequantity',
        	title: '可绑定用户数',
        	sortable : true,
        },{
        	field:'qrcode_codeticket',
        	title: '二维码',
        	sortable : true,
        	formatter: qrcodeFormatter,
        }],
        toolbar:"#dicToolbar",
        responseHandler: function(res) {
            return {
                "total": res.total,//总页数
                "rows": res.rows   //数据
             };
        },
    });
	 function qrcodeFormatter(value, row){
		 var div =  "<img src=\"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="+value+"\" width=\"60px\" heigth=\"30px\"></img>";
		 return div;
	 }
	 
}

与此同时,后台controller代码如下:

	@RequestMapping(params = "datagrid")
	@ResponseBody
	public void datagrid(HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid,LegalPublishBookEntity legalPublishBook) {
		CriteriaQuery cq = new CriteriaQuery(legalPublishBook.getClass(), dataGrid);
		if(StringUtil.isNotEmpty(legalPublishBook.getBookname())){
			cq.like("bookname", legalPublishBook.getBookname());
			legalPublishBook.setBookname("");
		}
		cq.add();
		//查询条件组装器
		org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, legalPublishBook);
		this.systemService.getDataGridReturn(cq, true);
		TagUtil.datagridstr(response, dataGrid);
	}

需求是前台在请求获取LegalPublishBookEntity 这个实体类的数据库数据的时候还需要获取 QRCodeEntity 其中的一个属性,而QRCodeEntity 在编写实体类的时候是 LegalPublishBookEntity 的一个属性当时这么写是为了使用hql语句进行多表联查方便,但同时也造成了现在的麻烦。

我记得 hibernate在查询数据库时候,一般会将对象和属性使用下划线 “_” 连接起来,但是我在这种情况下使用下划线直接来调用QRCodeEntity的属性可不可以呢? 在前台上如上代码写上 qrcode_codeticket 试了一下,竟然能将数据调出来!不知道这是我的误打误撞还是hibernate 为了方便开发人员的调用就是如此设计的,虽然解决了问题,但是还是有一些不太明白的地方,写的不好,有各位大牛看见了还希望顺便指教一下这个问题~