`

Hibernate自定义SQL查询结果自动反射到POJO

 
阅读更多

转自: http://blog.csdn.net/caodegao/article/details/7196872

 

在hibernate中,当自己用到自定义SQL查询时,结果集和pojo类的字段一模一样,又想方便快捷的不用手动的映射到pojo上,相信大家都遇到过.

看如下代码POJO

	private String month;
	// 月份
	private String year;
	// 状态
	private Long status;
	// 创建人
	private String createEmpCode;
	// 创建时间
	private Date createDate;
	// 修改人
	private String updateEmpCode;
	// 修改时间
	private Date updateDate;   get() set()省略....

 Mapping.xml略...相信大家都会

 

查询的SQL:

SELECT
        nvl(t.e_year,
        '无') AS year,
        l.m AS month,
        nvl(t.status,0) as status,
        t.create_emp_code as createEmpCode,
        t.create_date as createDate,
        t.update_emp_code as updateEmpCode,
        t.update_date as updateDate 
    FROM
        (SELECT
            LEVEL m 
        FROM
            dual CONNECT 
        BY
            LEVEL <= 12) l 
    LEFT OUTER JOIN
        table t 
            ON l.m = t.e_month 
            AND t.e_year = 1 
            AND t.e_page = 4
    ORDER BY
        l.m 

 

要注意的是,查询出来的字段名称最好和POJO类的属性名一致,要是出现什么行对应不上的错误,大家自己可以去尝试.

 

SSH整合查询代码,纯Hibernate写法,主要涉及到一个类(关键呐!) 

@SuppressWarnings("unchecked")
	public Collection<Table> findBy(final QueryObj queryObj) {
		final String sql = "SELECT nvl(t.e_year, '无') AS year,l.m AS month,nvl(t.status, 0) as status,"
			+ " t.create_emp_code as createEmpCode,t.create_date as createDate," 
			+ " t.update_emp_code as updateEmpCode,t.update_date as updateDate"
			+ " FROM (SELECT LEVEL m FROM dual CONNECT BY LEVEL <= 12) l"
			+ " LEFT OUTER JOIN table t ON l.m = t.e_month AND t.e_year = ? AND t.e_page = ?"
			+ " ORDER BY l.m ";
		final String year = "year";
		final Long page = 1;
		return (Collection<Table>) super.getHibernateTemplate().execute(
				new HibernateCallback() {
					public Object doInHibernate(Session session)
							throws HibernateException, SQLException {
						SQLQuery query = session
								.createSQLQuery(sql);
						query.setString(0, year);
						query.setLong(1, page);
						//这里用addScalar指定查询结果集字段转换,尤其是用到sql函数时第一个参数是as 别名,第二个是返回值的类型
						query.addScalar("year", Hibernate.STRING);
						query.addScalar("month", Hibernate.STRING);
						query.addScalar("status", Hibernate.LONG);
						query.addScalar("createEmpCode", Hibernate.STRING);
						query.addScalar("updateEmpCode", Hibernate.STRING);
						query.addScalar("createDate", Hibernate.DATE);
						query.addScalar("updateDate", Hibernate.DATE);
						//关键转换方法query.setResultTransformer,参数AliasToBeanResultTransformer(映射到的POJO类).
						query.setResultTransformer(new AliasToBeanResultTransformer(Table.class));
						//OK hibernate会自动映射过去,如果不用这个方法它返回的时候是Collection<Object>,所以不能起到转换的作用,在JBoss中运行查询时会报错的.
						return query.list();
					}
				});
	}

 

以上的方法用query.addEntity(将查询到的记录与特定的实体关联。)不管用可能是sql的原因,查询的基表为Table时才关联上,如果是多表关联,基表又不对应,必须是哪个方法才行,还要设置addScalar方法,还有:查询类是SQLQuery可不是Query,两个类提供的方法是不一样的.

分享到:
评论

相关推荐

    java反射封装结果集内容到pojo

    当我们从数据库读出数据得到ResultSet或RowSet的时候,我们的做法是遍历结果集,然后封装到pojo里面,再封装到List,那么,每次封装是不是很麻烦呢,前段时间小弟看了下反射的东西,试着写了个类,目的在于方便封装...

    hibernate自动生成Pojo

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,而无需编写大量的SQL语句。在开发过程中,手动创建所有对应的Java POJO(Plain Old Java Object,简单Java对象)类...

    让hibernate输出sql语句参数配置.doc

    hibernate.session_factory_name 参数用于 SessionFactory 创建后,将自动使用这个名字绑定到 JNDI 中。其取值为 jndi/composite/name。 7. hibernate.max_fetch_depth hibernate.max_fetch_depth 参数用于设置...

    hibernate生成pojo

    通过Hibernate,开发者可以将对象模型映射到关系型数据库中,从而实现对数据库的操作而无需编写复杂的SQL语句。在实际开发过程中,为了提高效率并减少出错的可能性,通常会利用工具自动生成与数据库表对应的POJO...

    myeclipse中自动生成hibernate的POJO、DAO和hbm.xml文件

    MyEclipse中自动生成Hibernate的POJO、DAO和hbm.xml文件 MyEclipse是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者快速构建和维护项目。其中,MyEclipse提供了对Hibernate的支持,...

    eclipse 配置 hibernate tools 反向生成 pojo类 注解

    为了提高开发效率,开发者经常使用Hibernate Tools来反向工程数据库模式,自动生成POJO(Plain Old Java Object)类,这些类可以直接用于数据操作。本文将详细讲解如何在Eclipse中配置Hibernate Tools以实现注解方式...

    hibernate tools 生成pojo

    源码层面,Hibernate Tools是开源的,开发者可以深入研究其生成POJO的实现过程,理解其工作原理,这对于优化自定义的代码生成规则或是扩展工具功能非常有帮助。 **六、总结** 总的来说,Hibernate Tools是Java开发...

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作.docx

    Java反射JavaBean对象自动生成插入、更新、删除、查询sql语句操作是指通过Java反射机制,依据提供的表名、POJO类型、数据对象自动生成sql语句的技术。这种技术具有很好的参考价值,对开发者有很大的帮助。 Java...

    根据hibernate.cfg.xml文件生成POJO数据库表的工具类

    在Java的Web开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL的细节。`hibernate.cfg.xml`是Hibernate配置文件,用于定义数据库连接...

    数据表生成pojo

    查询时,Hibernate将SQL结果自动转化为POJO实例。 - MyBatis:MyBatis允许开发者自由编写SQL,将结果集映射到POJO,提供灵活的数据操作。 6. **注意事项** - POJO类应遵循JavaBean规范,提供默认构造函数以及...

    MyEclipe自动生成Pojo、DAO的方式

    对于使用Hibernate框架的开发者来说,MyEclipse提供了自动生成POJO(Plain Old Java Object)类和对应的hbm.xml映射文件的功能,这在处理大量的数据库操作时尤其方便。下面我们将详细探讨如何在MyEclipse中实现这一...

    mybati自动生成mapper,dao,pojo

    MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的Mapper接口、XML配置文件、DAO实现类以及对应的POJO实体类。这款工具极大地简化了开发过程,减少了手动编写这些重复代码的工作量,使得开发者能够...

    Spring的JDBCTemplate

    第一、使用Hibernate 的sql 查询函数,将查询结果对象转为Entity对象。 第二、使用Hibernate Session的getConnection 获得JDBC Connection,然后进行纯JDBC API操作; 第三、选择把Spring的JDBCTemplate作为一种很...

    简单数据库逆向工程 自动生成POJO类

    1.1.1版本 简单数据库逆向工程 自动生成POJO类 JAVA WEB jsp

    使用PD(PowerDesigner)自动生成Hibernate的POJO文件及xml配置文件

    ### 使用PD(PowerDesigner)自动生成Hibernate的POJO文件及xml配置文件 #### 知识点解析 **一、Hibernate框架简介** Hibernate是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。...

    Mybatis自动生成pojo、mapper、xml工具

    这些自动生成的文件可以直接导入到你的项目中,然后在业务逻辑中使用。通过这种方式,Mybatis使得数据库操作更加便捷,同时保持了代码的整洁和可维护性。 总的来说,Mybatis自动生成POJO、Mapper和XML工具是提高...

    hibernate生成的订单信息映射文件以及pojo类

    在IT行业中,Hibernate是一个强大的Java持久化框架,它简化了与关系型数据库的交互,使得开发者无需编写大量的SQL代码即可实现对象-关系映射(ORM)。在这个场景中,我们讨论的是如何使用MyEclipse工具来生成...

    eclipse插件,根据数据库表自动生成DTO(pojo)插件

    在生成的DTO和POJO类中,注解可以用来标记字段,以便于框架如Hibernate或MyBatis进行ORM(对象关系映射)操作。 `JavaBeanTool_2.0`可能是插件的一个版本号,暗示这个工具已经经过了多次迭代和优化。JavaBean是一种...

    ssm框架自动生成pojo,mapper

    在实现这个接口时,我们需要编写对应的XML文件,其中包含了具体的SQL语句和结果映射。Mapper接口和XML文件之间的关联是通过`@Mapper`注解和`&lt;mapper&gt;`标签实现的。 为了在没有自动生成功能的环境下快速创建这些文件...

    自动生成hibernate映射文件和实体类

    "自动生成 Hibernate 映射文件和实体类" 自动生成 Hibernate 映射文件和实体类是使用 MyEclipse 工具来实现的,这可以大大提高开发效率,减少开发时间。下面将详细介绍如何使用 MyEclipse 自动生成 Hibernate 映射...

Global site tag (gtag.js) - Google Analytics