hibernate向前端传送数据问题

hibernate的优点不用写sql语句,它内封装了一系列方法,我们调用它的方法就可以对表进行常规的增删改查,只要我们对这些方法再进行一层封装,那我们对数据库的操作完全就转向了对java语言的操作,开发速度就很速度,也正因为它的封装成一般性,hibernate对极致优化有些困难,做不到mybatis那种对sql优化。

有点跑题了

hibernate取出数据,springmvc的@ResponseBody进行封装成json数据并返回,一般是没什么问题的,但要是有外键呢?比如员工请假表,你关联了员工表,@ResponseBody对员工请假表进行json化,但对员工这个类字段json化时它可能会由于你对这个类进行了懒加载而报错。

@ManyToOne(optional = true, fetch = FetchType.LAZY)
	@JoinColumns({ @JoinColumn(name = "employeeId", referencedColumnName = "employeeId", updatable = false, insertable = false) })
	private Employee employee;

就算它不报错,难道你要把员工表的所有信息都json化一起发送到前端呢?你可能只想要它的姓名而已。

问题就出来了在这,它不像mybatis一样写sql语句你想取出什么字段就取什么字段,你是不是又开始想念mybatis的好处了,未来有一天两者结合是不是就好了。

你得开始了解一下PO的概念了,po:持久化对象,也可以说就是我们的model类,表字段与model里的属性一一对应。

VO的概念:视图对象,也可以说是业务层对象,我们后台返回的属性和前端的数据属性一一对应。

上面的问题就可以这样解决了,先得到PO对象,然后根据你前端需要什么字段写一个PO转VO的方法。具体例子如下:

效果图:员工姓名和所属部门皆为外表所取


PO层:


PO转VO:这是我手写的,当然你可以借用工具类,BeanProperties貌似是这个,你可以了解一下,这里我考虑的是你自动转的话是依靠它的反射来实现的,而我个人是比较厌恶自己的框架有反射代码实现功能的而且还得频频调用,所以牺牲点开发速度来提高点性能。(这几行死代码写起来也挺快的吧)


Controller方法:

@RequestMapping(value = "/leaveWorkReqList", method = RequestMethod.POST)
	@ResponseBody
	public Map<String, Object> leaveWorkReqList(HttpServletRequest request, int rows, int page, String searchData, String sort, String order) {
		log.info("LeaveWorkReqAction : leaveWorkReqList.do");

		initWhereAndValue(searchData);

		result.put("total", leaveWorkReqService.count(where, value));
		List<LeaveWorkReq> list=leaveWorkReqService.find(where, value, page, rows, initSortOrder(sort, order));
	    result.put("rows", new LeaveWorkReqVO().transformLeaveWorkReqVOList(list));

		return result;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3wtczs93点抗母

钱癌晚期

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值