环境: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()); } } } } |