`

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

阅读更多
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
分享到:
评论

相关推荐

    基于java8新特性+反射机制实现list不同实体类互转.zip

    在这个实现中,反射可能用于创建目标实体类的实例,设置属性值以及调用构造函数。通过反射,我们可以根据源实体类的对象,创建目标实体类的对象并复制相应的属性值。 要实现不同实体类的List之间的转换,首先我们...

    任意XML转实体类 实体类 转XML 方法 JAVA

    SOAP消息通常包含一个封装了业务数据的主体部分,这部分可以映射到Java实体类。因此,理解XML与Java实体类之间的转换对开发SOAP Web服务非常重要。 总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java...

    C#自动生成实体类

    在IT行业中,实体类是软件开发中的重要组成部分,特别是在基于对象的编程语言如C#中。实体类通常代表数据库中的表,它们封装了数据并提供了操作这些数据的方法。手动创建和维护这些实体类可能会非常耗时,尤其是在...

    匹配实体类的实现了大部分功能分页 网页分页

    这里我们关注的标题是“匹配实体类的实现了大部分功能分页 网页分页”,描述中提到了使用了数据库MySQL以及Spring 3.0框架来实现这一功能。下面将详细讨论这些知识点。 1. 分页原理与实现: 分页通常由两个关键...

    GreenDao保存实体类套实体类

    实体类是GreenDao的核心概念,它代表数据库中的一个表,类中的属性对应表中的列。 当涉及到实体类套实体类的情况时,这通常指的是实体类之间的关联关系,比如一对一、一对多或多对多关系。例如,一个用户(User)可能...

    精简版本实体类生成工具(可选择是否生成构造方法)

    在实体类中,构造方法通常用来设置属性的初始值或进行必要的数据校验。选择生成构造方法可以方便地在创建对象时一次性设置所有属性,提高了代码的可读性和可维护性。如果不生成构造方法,开发者可能需要通过setter...

    根据表名创建实体类的字段和属性.(单个表生成)存储过程快速生成

    在实际项目中,这种存储过程可以嵌入到自动化构建工具或IDE插件中,使得开发者只需输入表名,即可自动获取或更新对应的实体类。这对于团队协作、版本控制和持续集成等场景尤其有用,可以显著减少维护成本,提高开发...

    修改mybatis-generator源码实现实体类字段上方加上数据库中填写的注释

    标题 "修改mybatis-generator源码实现实体类字段上方加上数据库中填写的注释" 描述了一种增强MyBatis Generator(MBG)功能的方法,目的是在生成的实体类字段上添加对应数据库字段的注释。这能提高代码的可读性和...

    vs实体类生成工具

    实体类生成工具的一个关键特性是它可以根据数据库中的约束关系生成导航属性,比如外键关联,这在处理一对多或多对多关系时非常有用。此外,一些高级插件还可能支持代码模板定制,让用户可以根据自己的编码风格调整...

    实体类生成器

    在实体类生成器中,Swing被用来设计和实现用户交互部分,例如输入数据库连接信息、选择表以及生成实体类的设置等。 FreeMarker则是一个开源的模板引擎,主要用于生成动态内容。在本场景中,开发者可以预定义一套...

    java实体类生成工具

    在实际项目中,合理利用实体类生成工具,可以使开发团队更专注于业务逻辑的实现,而不是基础代码的编写。当然,为了确保代码质量,开发者还需要对生成的代码进行审查和调整,以满足项目的特定需求。在使用这类工具时...

    .netC#实体类自动生成器

    4. 自定义模板:部分自动生成器还允许用户自定义生成的实体类模板,可以添加自定义属性或方法,满足特定的项目需求。 5. 整合ORM:与流行的ORM框架(如Entity Framework、NHibernate等)兼容,生成的实体类可以直接...

    自动生成实体类

    在Java世界里,实体类通常代表数据库中的表,每个属性对应表的一列,而实体类的方法则提供了对这些属性的操作。通过这种方式,开发者可以方便地在代码中操作数据库,进行CRUD(创建、读取、更新、删除)操作。 自动...

    三层架构 实体类实现日记系统

    在业务逻辑层中定义日记实体类`Diary`,包含属性`ID`、`Title`、`Content`和`CreateTime`。这些属性应与数据库表中的字段相对应,便于后续的数据操作。 ```csharp public class Diary { public int ID { get; set;...

    sql server数据库表生成实体类生成工具

    开发者只需通过工具连接到数据库,选择相应的表,工具就能根据表结构自动生成对应的实体类代码,包括属性(对应字段)、构造函数、属性访问器(Get和Set方法)等。 C#是.NET框架的主要编程语言,它支持面向对象编程...

    mybatis自动生成Java实体类和映射文件的自动生成类工具

    在Java开发中,实体类是数据表的映射,包含了数据库表中的字段和属性。生成实体类可以避免手动创建每个字段,减少了错误的可能性。而Mapper接口和XML映射文件则是MyBatis的核心部分,它们定义了SQL语句及其执行逻辑...

    java生成mysql实体类

    在Java开发中,数据库操作是不可或缺的一部分,而实体类(Entity)是ORM(对象关系映射)中的关键概念,它代表了数据库中的一个表。`java生成mysql实体类`这个主题涉及到了如何利用Java程序自动化地从MySQL数据库中...

    把实体类数组转换为DataTable C#

    当我们有一个实体类数组,可能是因为我们从数据库查询了数据并将其封装在实体类对象中,然后想要将这些数据转换成DataTable,以便进行进一步的数据操作或绑定到控件上。 要实现这个转换,我们需要以下步骤: 1. ...

    生成实体类工具

    实体类通常代表数据库中的表,每个属性对应表中的字段,它们为业务逻辑层提供了一种直接操作数据的方式。为了提高开发效率,开发者会使用自动化工具来生成这些实体类,避免手动编写。"生成实体类工具"就是这样的一个...

    实体类代码生成器

    在.NET开发环境中,实体类是数据访问层的重要组成部分,它们代表了数据库中的表或者视图,提供了一种面向对象的方式来操作数据库数据。 在"模板.cs"文件中,通常包含了生成代码的基础模板。这个模板定义了实体类的...

Global site tag (gtag.js) - Google Analytics