关闭

java之Object转Map

标签: javaObject转Map
101人阅读 评论(0) 收藏 举报
分类:

原项目:

原来的项目中,持久化层符合了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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:359次
    • 积分:25
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档