hibernate 联表查询 ,用一个vo来装联表查询字段的数据


在hibernate操作对象中,entity都做好了映射,查询到的数据能直接赋值到这些entity。

有些时候会用到复杂的联表查询,这时候需要新建一个vo来装联表查询字段的数据。

假设我的查询语句是:

final String sql = "select a.firstname,a.lastname,b.name,b.age from user a right join dog b on a.firstname=b.name order by b.id desc";


新建一个vo,属性和要查询的字段的类型要一致。

public class MultiData {

	private String firstname;
	private String lastname;
	private String name;
	private int age;

	public String getFirstname() {
		return firstname;
	}

	public void setFirstname(String firstname) {
		this.firstname = firstname;
	}

	public String getLastname() {
		return lastname;
	}

	public void setLastname(String lastname) {
		this.lastname = lastname;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

然后dao的实现,中间的service就不写了

	@SuppressWarnings("unchecked")
	public List<MultiData> getMultiData() {
		final String sql = "select a.firstname,a.lastname,b.name,b.age from user a right join dog b on a.firstname=b.name order by b.id desc";
		List<MultiData> md = (List<MultiData>) this.hibernateTemplate
				.execute(new HibernateCallback() {

					public Object doInHibernate(Session session)
							throws HibernateException, SQLException {
						// TODO Auto-generated method stub
						Query query = session.createSQLQuery(sql)
								.setResultTransformer(
										Transformers
												.aliasToBean(MultiData.class));
						return query.list();
					}
				});
		return md;
	}

junit测试一下

@Test
	public void testGetMultiData() {
		List<MultiData> list = this.um.getMultiData();
		for (MultiData m : list) {
			if (m.getFirstname() == null && m.getLastname() == null) {
				System.out.println("user get nullllllllllllllllllll");
			}
			System.out.println("user : " + m.getFirstname() + "   "
					+ m.getLastname() + " ------- dog : " + m.getName() + "   "
					+ m.getAge());
		}
	}

结果:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值