首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate中三种结果转换的详细说明

2012-11-10 
Hibernate中3种结果转换的详细说明Hibernate中3种结果转换的详细说明在hibernate使用的过程中.我们通常需

Hibernate中3种结果转换的详细说明
Hibernate中3种结果转换的详细说明
在hibernate使用的过程中.我们通常需要对结果进行解释.
Hibernate为我们提供了以下3种解释方法:

Transformers.ALIAS_TO_ENTITY_MAP //把输出结果转换成mapTransformers.TO_LIST //把结果按顺序排进Listransformers.aliasToBean(target) //把结果通过setter方法注入到指定的对像属性中


在Hibernate中Transformers的所有转换都是需要实现ResultTransformer接口

详解ALIAS_TO_ENTITY_MAP ,太简单了就是把key和值直接转换到Map当中
/** * {@inheritDoc} *///aliases key//tuple valuepublic Object transformTuple(Object[] tuple, String[] aliases) {Map result = new HashMap(tuple.length);for ( int i=0; i<tuple.length; i++ ) {String alias = aliases[i];if ( alias!=null ) {result.put( alias, tuple[i] );}}return result;}


详解TO_LIST,转换过程很简单,就是把value转换成List对像
/** * {@inheritDoc} *///aliases key//tuple valuepublic Object transformTuple(Object[] tuple, String[] aliases) {return Arrays.asList( tuple );}


详解aliasToBean,转换过程就是通过读取查询后的字段.然后通过使用setter方法注入到目标对像中
public AliasToBeanResultTransformer(Class resultClass) {if ( resultClass == null ) {throw new IllegalArgumentException( "resultClass cannot be null" );}this.resultClass = resultClass;//定义属性访问器.propertyAccessor = new ChainedPropertyAccessor(new PropertyAccessor[] {PropertyAccessorFactory.getPropertyAccessor( resultClass, null ),PropertyAccessorFactory.getPropertyAccessor( "field" )});}public Object transformTuple(Object[] tuple, String[] aliases) {Object result;try {if ( setters == null ) {setters = new Setter[aliases.length];for ( int i = 0; i < aliases.length; i++ ) {String alias = aliases[i];if ( alias != null ) {//初始指定的setter方法setters[i] = propertyAccessor.getSetter( resultClass, alias );}}}//实例实体对像result = resultClass.newInstance();for ( int i = 0; i < aliases.length; i++ ) {if ( setters[i] != null ) {//向setter方法中指定的属性注入值setters[i].set( result, tuple[i], null );}}}catch ( InstantiationException e ) {throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() );}catch ( IllegalAccessException e ) {throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() );}return result;}

热点排行