SELECT
u.id,
u.username,
r.name
FROM
users u,
rights AS r
WHERE
u.right_id = r.id
假设SQL是这样的。
我在Hibernate中就需要这样获得查询后的数据。
Session currentSession = hibernateTemplate.getSessionFactory().getCurrentSession();
Query query = currentSession.createQuery(sql);
query.setString(0, id);
List<Object[]> list = query.list();
User user = new User();
Object[] o = list.get(0); <pre name="code" class="java"> user .setId((String) o[0]);
user.setUsername((String) o[1]);
user.setName((String) o[2]);
为什么呢?我打断点看到的数据是这样的!
所以我们得自己拿出来再强制转换。
而Hibernate为什么不能映射呢?我猜是因为我们没有传User.class类似这种参数,他不能反射到相对应的属性名上。
而JdbcTemplate就是这样的。
jdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(User.class));
我们只需要将SQL语句中的字段昵称改为java中定义的就行。
例如:
SELECT u.right_id rightId FROM users
/* ******************************* 2015年11月20日 11:26:23 ******************************* */
今天看到别人的代码,顿时明白了我之前是多么的逗~
Query query = session.createSQLQuery(sql).addEntity("a", AAA.class).addEntity("f", BBB.class);
之后再进行强制类型转换就OK~
/* ******************************* 2015年12月2日 15:38:22 ******************************* */
上面的代码只能用这种SQL 语句
SELECT a.*,f.* FROM A a, F f