Hibernate多表查询数据转JSON格式

Hibernate的查询方式具有面向对象的思想,在查询的时候,都是动过gei(id)的方式查询一条数据,然后Hibernate自动设置进去到POJO类对象,返回一个代理类给我们。

学生类:

 

 

public class Student {

    private int sId;//学生的id
    private int tId;//教师的id
    private String sName;//学生的姓名
    private String sSex;//学生的性别

    //省略get,set方法,无参构造方法,有参构造方法
}

教师类:

public class Teacher {
    
    private int tId;//教师的id
    private String tName;//教师的姓名
    //同样,省略get,set方法,无参构造方法,有参构造方法
} 

这里有学生和教师两个类,同时映射数据库中学生表和教师表,如果我们想要拿到这两个表的数据,那么我们可以

hql=“select s.sId,s.sName,s.sSex,t.tId,t.tName from Student s,Teacher t where s.tId=t.tId ”,用Query类执行这句hql语句,调用query.list()得到一个list集合,注意这个list集合里存放的都是Object[]。

String hql="select s.sId,s.sName,s.sSex,t.tId,t.tName from Student s,Teacher t where s.tId=t.tId";
Query q=session.createQuery(hql);
List<Object> list=q.list();
for (Object object : list) {
	Object[] objs=(Object[])object;
        System.out.println(Arrays.toString(objs));
}
JSONArray jsonArr=JSONArray.fromObject(list);
System.out.println(jsonArr.toString());

遍历list集合,我们就拿到了我们想要的数据了

[3, 夏侯惇, 男, 1, 魏老师]
[1, 张飞, 男, 2, 蜀老师]
[2, 关羽, 男, 2, 蜀老师]
[6, 刘备, 男, 2, 蜀老师]
[4, 周瑜, 男, 3, 吴老师]
[5, 大乔, 女, 3, 吴老师]

但是这样的数据是无法直接转成json格式数据的。

[[{"sId":3,"sName":"夏侯惇","sSex":"男","tId":1},{"tId":1,"tName":"魏老师"}],[{"sId":1,"sName":"张飞","sSex":"男","tId":2},{"tId":2,"tName":"蜀老师"}],[{"sId":2,"sName":"关羽","sSex":"男","tId":2},{"tId":2,"tName":"蜀老师"}],[{"sId":6,"sName":"刘备","sSex":"男","tId":2},{"tId":2,"tName":"蜀老师"}],[{"sId":4,"sName":"周瑜","sSex":"男","tId":3},{"tId":3,"tName":"吴老师"}],[{"sId":5,"sName":"大乔","sSex":"女","tId":3},{"tId":3,"tName":"吴老师"}]]

 

 

 

不过hibernate还支持另一种方式,就是增加一个映射类

这个新的映射类的属性,应该包含素有你需要查找的字段以及get()和set()方法

更重要的是,需要新增一个构造函数,这个构造函数的参数为你需要查询出来的属性,并且在构造函数里面为其赋值。

public class TeaAndStu {

    private int tId;//教师的id
    private int sId;//学生的id
    private String tName;//教师的姓名
    private String sName;//学生的姓名
    private String sSex;//学生的性别
    //省略get,set方法,省略构造方法
}
Session session=SessionUtil.getSession();
Transaction tran=session.beginTransaction();
String hql="select new com.test.entity.TeaAndStu(t.tId,s.sId,t.tName,s.sName,s.sSex) from Student s,Teacher t where s.tId=t.tId";
Query q=session.createQuery(hql);
List<TeaAndStu> list=q.list();
for (TeaAndStu teaAndStu : list) {
	System.out.println(teaAndStu.toString());
}
JSONArray jsonArr=JSONArray.fromObject(list);
System.out.println(jsonArr);

这样通过映射类得到的list集合数据就可以转成json格式数据了。

TeaAndStu [tId=1, sId=3, tName=魏老师, sName=夏侯惇, sSex=男]
TeaAndStu [tId=2, sId=1, tName=蜀老师, sName=张飞, sSex=男]
TeaAndStu [tId=2, sId=2, tName=蜀老师, sName=关羽, sSex=男]
TeaAndStu [tId=2, sId=6, tName=蜀老师, sName=刘备, sSex=男]
TeaAndStu [tId=3, sId=4, tName=吴老师, sName=周瑜, sSex=男]
TeaAndStu [tId=3, sId=5, tName=吴老师, sName=大乔, sSex=女]
[{"sId":3,"sName":"夏侯惇","sSex":"男","tId":1,"tName":"魏老师"},{"sId":1,"sName":"张飞","sSex":"男","tId":2,"tName":"蜀老师"},{"sId":2,"sName":"关羽","sSex":"男","tId":2,"tName":"蜀老师"},{"sId":6,"sName":"刘备","sSex":"男","tId":2,"tName":"蜀老师"},{"sId":4,"sName":"周瑜","sSex":"男","tId":3,"tName":"吴老师"},{"sId":5,"sName":"大乔","sSex":"女","tId":3,"tName":"吴老师"}]

ps:上面文章中有哪些错误还请指出,我会一一修正。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值