hibernate 查询表中某几个字段:
如,表emp中有如下的字段
Name Type Nullable Default Comments
-------- ------------ -------- ------- -------
EMPNO NUMBER(4)
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4) Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y
现在只需要查出其中的3个字段:EMPNO、ENAME、COMM
由于已经有一个实体类 EmpEntity 对应了表 emp,且类EmpEntity 中的属性都对应了表emp中的所有字段。
所以,要查询其中的3个字段,需要新建一个实体类 Employees,但是不需要配置 *.hbm.xml 关联文件。
代码如下:
实体类:Employees.java
public class Employees extends BaseEntity {
/**
* @Fields serialVersionUID :
*/
private static final long serialVersionUID = 3106850299455862020L;
private BigDecimal empNO;
private String empName;
private BigDecimal comm;
/**
* <p>Title: toString</p>
* <p>Description: 重写 toString() 方法</p>
* @return
* @see java.lang.Object#toString()
* @author
*/
@Override
public String toString() {
StringBuffer buf = new StringBuffer("");
buf.append("[EmpEntity:empNO=").append(empNO)
.append("\n")
.append("empName=").append(empName)
.append("\n")
.append("comm=").append(comm)
.append("]");
return buf.toString();
}
//下面省略 setter()/getter()
}
测试类:(使用junit 4.0)
@Test
public void findEmps() {
String hql = "select EMPNO,ENAME,COMM from emp";
Session session = HibernateUtil.currentSession();
Query query = session.createSQLQuery(hql);
List list = query.list();
List<Employees> el = setList(list);
if (null != el) {
System.out.println("size=" + el.size());
Employees emp = null;
System.out.println("EMPNO\tENAME\tCOMM");
try {
for (int i = 0; i < el.size(); i++) {
emp = el.get(i);
System.out.println(emp.getEmpNO() + "\t" + emp.getEmpName()
+ "\t" + emp.getComm());
}
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
System.out.println("null");
}
HibernateUtil.closeSession();
}
private List<Employees> setList(List list) {
List<Employees> empList = new ArrayList<Employees>(10);
Employees emp = null;
try {
Object[] arr = null;
BigDecimal empNO = null;
String empName = null;
BigDecimal comm = null;
for (int i = 0; i < list.size(); i++) {
emp = new Employees();
arr = (Object[]) list.get(i);
empNO = (BigDecimal) arr[0];
empName = (String) arr[1];
comm = (BigDecimal) arr[2];
emp.setComm(comm);
emp.setEmpName(empName);
emp.setEmpNO(empNO);
empList.add(emp);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return empList;
}
测试结果:
size=14
EMPNO ENAME COMM
7369 SMITH null
7499 ALLEN 300
7521 WARD 500
7566 JONES null
7654 MARTIN 1400
7698 BLAKE null
7782 CLARK null
7788 SCOTT null
7839 KING null
7844 TURNER 0
7876 ADAMS null
7900 JAMES null
7902 FORD null
7934 MILLER null