只查询实体类中一部分属性的实现方法
只查询实体类中部分属性的实现方法
表结构如下:
User.hbm.xml配置文件
查询实体类中的所有属性发出的sql语句如下:
只查询实体类中password及email属性发出的sql语句如下:
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("song001@163.com"); 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