環境:Eclipse-j2ee+Tomcate6.x+mysql5.1+hibernate3.05 java
迴歸正題,首先建一張沒有主鍵的表。命名爲person_demo.表結構以下: mysql
name | Date Type | Size |
name | varchar | 20 |
age | int | 4 |
建立vo對象 sql
package com.lc.demo.vo; import java.io.Serializable; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; /** * 複合主鍵類的對應類別必須實現Serializable接口 * 以及重寫equals和hashCode兩個方法//本身測試若是沒有重寫這兩個方法也沒有報錯 * @author LC * */ public class Demo implements Serializable{ private String name; private int age; public Demo(){ } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof Demo)) { return false; } Demo demo = (Demo) obj; return new EqualsBuilder() .append(this.name, demo.getName()) .append(this.age, demo.getAge()) .isEquals(); } public int hashCode() { return new HashCodeBuilder() .append(this.name) .append(this.age) .toHashCode(); } } |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping > <class name="com.lc.demo.vo.Demo" table="person_demo" > <composite-id> <key-property name="name" column="name" type="java.lang.String"> </key-property> <key-property name="age" column="age" type="java.lang.Integer"> </key-property> </composite-id> </class> </hibernate-mapping> |
測試DAO apache
package com.lc.demo.dao; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.junit.Test; import com.lc.demo.hibernate.HibernateSessionFactory; import com.lc.demo.vo.Demo; public class DemoDAO { @Test public void query() { //原生態sql語句 String sql = "select {p.*} from person_demo p"; Session session = HibernateSessionFactory.getSession(); //addEntity方法指定了當前返回實體的別名,並且在SQL語句裏使用{p.*}這樣的語句, //它的意思是向別名爲p的這個對象注入全部屬性值. //用這個方法能夠直接把list集合中的對象直接轉換爲實體Bean List<Demo> ls = session.createSQLQuery(sql).addEntity("p",Demo.class).list(); if(ls.size()!=0) { for(int i=0;i<ls.size();i++) { System.out.println(ls.get(i).getName()); } } } } |