java之Object转Map

原创 2015年07月07日 20:20:04

原项目:

原来的项目中,持久化层符合了JPA规范,Hibernate实现的。后期的数据库优化中,用到了select new map。

代码中是这样写的:

	<span style="white-space:pre">	</span>/**
		 * hql1: hql语句
		 * 第一版查询: 查询结果返回的是list。但是list中存放的是Object数组
		 */
		String hql1 = "select h.name, h.address from Hotel h";
		Query query = session.createQuery(hql1);
		List list1 = query.list();
		
		/**
		 * hql2:hql语句
		 * 第二版查询: 查询结果返回的是list。但是list中存放的是Map。
		 * 		Map中: key是索引字段(0, 1, 2, 3...) value是查询的字段值(name, address)
		 * 		注意:key是字符串类型的,不是int类型
		 */
		String hql2 = "select new map(h.name, h.address) from Hotel h ";
		Query query = session.createQuery(hql);
		List<Map> list = query.list();
		
		for(Map hotel: list){
			String name = hotel.get("0");
			String address =hotel.get("1");
			System.out.println("name = " + name + ", address = " + address);
		}
		
		/**
		 * hql3:hql语句
		 * 第三版查询: 同第二版查询
		 * 			不同的地方是:key的索引字段是定义的别名(name, address)
		 */
		String hql3 = "select new map(h.name as name, h.address as address) from Hotel h";
		Query query = session.createQuery(hql);
		List<Map> list = query.list();
		
		for(Map hotel: list){
			String name = hotel.get("name");
			String address = hotel.get("address");
			System.out.println("name = " + name  + ", address = " + address);
		}


现项目:

现在的项目进行了重构,持久化层依然选择JPA规范,但是实现换成了EclipaseLink。

以上的查询返回类型是list。list中存放的是object数组。为了将Object转成map,手动封装了一个类进行转换。

<span style="white-space:pre">	</span>public List<Map> queryOutMap(){
		/**
		 * hql: hql语句
		 * 查询结果返回list,list中是Object数组
		 */		
		String hql = "select h.name,h.address from HotelGuest h where h.name =:name";
		Map map = new HashMap();
		map.put("name", "张三");
		
		Query query = getEntityManager().createQuery(hql);
		for(Serializable key: map.keySet()){
				query.setParameter((String)key, map.get(key));
		}			
		List result = query.getResultList();;
		
		/**
		 * 将查询的字段
		 * 注意:按hql语句中的顺序放到List中
		 */
		List fields = new ArrayList();
		String name = "name";
		String province = "province";
		fields.add(name);
		fields.add(province);
		
		//调用转换方法
		return convertToMap(fields, result);
		
	}
	/**
	 * 将查询结果转成Map
	 * @param fields
	 * @param result
	 * @return
	 */
	public List<Map> convertToMap(List fields, List result){
		List<Map> list = new ArrayList<Map>();
		for(int i=0;i<result.size();i++){
			Map map = new HashMap();
			Object[] obj = (Object[])result.get(i);
			for(int j=0;j<fields.size();j++){
				 map.put(fields.get(j), obj[j]);
			}
			list.add(map);
		}
		return list;
	}

以上核心就是讲Object转换乘Map。除了以上的方法外,还有其它的方法,可以借鉴:

http://www.open-open.com/code/view/1423280939826


java实现map和object互转的三种方法

/*  * Copyright (C), 2016-2016, 上海牛娃互联网金融信息服务有限公司  * FileName: MapAndObject.java  * Author:   zhangx...

java实现map和object互转的三种方法

文章转载自 java实现map和object互转的三种方法 /** * 使用org.apache.commons.beanutils进行转换 */ class A { ...

Java对象转换(Map转换Object或者反转)

Map转换Object、Object转换Map、List转换List、List转换List、对象拷贝

java Map与Object互转

/*** * map转换成对象 */ public static Object mapToObject(Map map, Class beanClass) ...

java实现map和object互转的三种方法

/** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToO...

java实现map和object互转的三种方法

/**  * 使用org.apache.commons.beanutils进行转换  */  class A {              public...

java怎么将json字符串转换成list,map,object等

java中似乎没提供一个将json字符串转换成对应的list或者mop

Java 中 List<Map<String,Object>> 转换 List<javaBean> 详解

1.Javabean的实体类/** * 实体类 * @author suny * @date 2017-7-4 * * desc: * */ public class Person...

java 使用反射转换对象 Object to Map

Object to Map 转换的三种方法 就是把对象以及其对应的属性名 和属性值, 映射到一个Map中 import java.beans.BeanInfo; import java.bea...
  • hpf911
  • hpf911
  • 2014年05月08日 15:04
  • 9341

利用java反射机制实现List<Map<String, Object>>转化为List<JavaBean>

BEGIN; 最近在用hibernate做项目,由于后续的业务功能比较多,然后框架原设计没有使用到一对多、一对一等特性,(艹TA妹)没办法,只能用原生sql语句获得需要的结果集。但是返回过来...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java之Object转Map
举报原因:
原因补充:

(最多只允许输入30个字)