只查询实体类中部分属性的实现方法

package cn.com.songjy.sh.test;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.com.songjy.sh.domain.User;
import cn.com.songjy.sh.util.HibernateSessionFactory;
import junit.framework.TestCase;

public class TestUser extends TestCase {

	/*查询实体类中的所有属性*/
	public void query_for_user(){
		Session session = HibernateSessionFactory.getSession();
		Query query = session.createQuery("FROM User u WHERE u.id=2");
		List<User> list = query.list();
		for(User user:list){
			System.out.println(user.getPassword());
			System.out.println(user.getEmail());
		}
		HibernateSessionFactory.closeSession(session);
	}
	
	/*只查询实体类中password及email属性*/
	public void query_for_list(){
		Session session = HibernateSessionFactory.getSession();
		/*id=2存在2条数据,查询报错:
		 * org.hibernate.HibernateException: 
		 * More than one row with the given identifier was found: 2, for class: cn.com.songjy.sh.domain.User
		User user = (User) session.load(User.class, 2);
		System.out.println(user.getEmail());
		*/
		Query query = session.createQuery("SELECT u.password,u.email FROM User u WHERE u.id=2");
		List list = query.list();
		Object[] obj = null;
		for(int i=0; i<list.size(); i++){
			obj = (Object[]) list.get(i);
			for(Object o : obj){
				System.out.println(o);
			}
		}
		HibernateSessionFactory.closeSession(session);
	}
	
	/*只查询实体类中password及email属性*/
	public void query_for_iterator(){
		Session session = HibernateSessionFactory.getSession();
		Query query = session.createQuery("SELECT u.password,u.email FROM User u WHERE u.id=2");
		Iterator iterator = query.iterate();
		Object[] obj = null;
		while(iterator.hasNext()){
			obj = (Object[]) iterator.next();
			for(Object o : obj){
				System.out.println(o);
			}
		}
		HibernateSessionFactory.closeSession(session);
	}
	
	/*增加操作*/
	public void add(){
		User user = new User();
		user.setEmail("[email protected]");
		user.setId(001);
		user.setPassword("123456");
		user.setRegisterDate(new Date());
		user.setUsername("song001");
		
		Session session = HibernateSessionFactory.getSession();
		Transaction transaction = null;
		try {
			transaction = session.beginTransaction();
			System.out.println(session.save(user));
			transaction.commit();
		} catch (Exception e) {
			if(transaction.isActive())
				transaction.rollback();
		} finally {
			HibernateSessionFactory.closeSession(session);
		}
	}
	
}


表结构如下:
create table TBL_USER_BAK
(
  ID           NUMBER(10) not null,
  EMAIL        VARCHAR2(255 CHAR) not null,
  PASSWORD     VARCHAR2(200),
  REGISTERDATE TIMESTAMP(6),
  USERNAME     VARCHAR2(255 CHAR)
)


User.hbm.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
	<class name="cn.com.songjy.sh.domain.User" table="TBL_USER_BAK">
		
		<id name="id" column="ID" type="java.lang.Integer">
			<generator class="sequence"></generator>
		</id>

		<property name="email" column="EMAIL" type="java.lang.String" length="255" not-null="true"></property>
		<property name="password" column="PASSWORD" type="java.lang.String" length="255"></property>
		<property name="registerDate" column="REGISTERDATE" type="java.util.Date"></property>
		<property name="username" column="USERNAME" type="java.lang.String" length="255"></property>
	</class>
</hibernate-mapping>



查询实体类中的所有属性发出的sql语句如下:
--Hibernate: 
    select
        user0_.ID as ID2_,
        user0_.EMAIL as EMAIL2_,
        user0_.PASSWORD as PASSWORD2_,
        user0_.REGISTERDATE as REGISTER4_2_,
        user0_.USERNAME as USERNAME2_ 
    from
        TBL_USER_BAK user0_ 
    where
        user0_.ID=2

只查询实体类中password及email属性发出的sql语句如下:
--Hibernate: 
    select
        user0_.PASSWORD as col_0_0_,
        user0_.EMAIL as col_1_0_ 
    from
        TBL_USER_BAK user0_ 
    where
        user0_.ID=2

猜你喜欢

转载自songjianyong.iteye.com/blog/1709584