hibernate的formula的初级使用

  1. 实体类的一个属性可以对应数据库表里的多个列,这个属性的值由formula 获得
  2. <property formula="。。。" name="topicCount"/>
   以前片面的理解为sql语句必须写在()里,如下面
  1. <property name="rank" formula="(select count(*) from score s where s.student_score>student_score)"/>
   举个例子说明formula真正的用法,假设user表里面有first_name和last_name属性。在映射的vo里面指定了name属性用于表示两个字段合起来的字符串,使用formula实现如下(数据库用的mysql)
  1. <property name="name" formula="concat(first_name,last_name)"/>
   假设我们获取了一个id为1的vo实例,那么hibernate就是执行如下sql语句用于取得name的值
  1. select concat(first_name, last_name) from user where id=1;
   这下子对于formula里的sql语句为什么必须放在括号里应该明白了,因为formula里面的值会作为一条sql语句select和from之间的内容,我们把sql语句放到括号里实际上就是做为一条子查询执行!!! 例如最开始示例的的rank对应的sql语句就应如下样子
  1. select (select count(*) from score s where s.score>sc.score) from score sc where sc.id=1;

相关推荐