hibernate/ssh 实现多表连接查询 查询结果映射到自定义类中
背景
1、项目(ssh框架或者就是hibernate框架)
2、有两张表,post(帖子表) ,user(用户表),
3、需要实现的功能
post表和user表中含有共同的属性user_id
查看帖子详情的时候(根据post_id查询post表对应的数据)
同时也需要根据post表中user_id属性来查找对应的user表中的其他某个属性
4、一次查看数据库就可以把想要的结果放在一个自定义类的集合里面,方便前台显示
可用的方案
一、使用连接查询
优点:不用做复杂的操作
确定:返回的是Object[]类型,不方便前台显示数据
String sql="select a,b.userlogo from AnswerPost a , User b where a.answer_name=b.username and a.post_id=?";
二、增加一个映射类如AnswerUser
操作
1、新建一个实体类,里面有你想要查询的数据属性(有user表,有post表的属性,名称可以变,但是变了的话,如果后期有对list集合数据进行操作,会晕掉的)
2、给这个实体类添加set和get方法,无参构造器,一个有参的构造器
3、一个映射文件如 实体类名.hbm.xml
4、sql语句的查询要和有参构造器的属性顺序一值
优缺点
优点:query.list()的返回值List中的值都是UsersVoGoods型的,方便前台读取数据。
缺点:增加一个类,还有映射文件,麻烦
sql语句如下
String sql="select new AnswerUser(b.userlogo, a.answer_id,a.post_id,a.answer_content,a.answer_name,a.byanswer_name,a.byanswer_content,a.answer_time) from AnswerPost a , User b where a.answer_name=b.username and a.post_id=?";
读取结果如下