问题描述
场景: 之前系统用mysql数据库,很多数据经过hibernate如此查出 public List<Map<String, Object>> getAllPortalPorletItemLstUnderWorkZoneSiteByWorkZoneSiteId(final long projectId, final long orgRoleId,final long workZoneSiteId) {List<Map<String, Object>> list = this.hibernateTemplate.execute(new HibernateCallback<List<Map<String, Object>>>() {public List<Map<String, Object>> doInHibernate(Session session) throws HibernateException,SQLException {List find = null;String sql = "select t2.* , t1.title ,t1.showTitle, t1.type, t1.isLocal, t1.url,t1.maxUrl,t1.defaultHeight,t1.defaultWidth, t1.status "+ "from portal_item as t1,portal_default_workzonesite_item as t2 "+ "where t1.status=1 and t1.id=t2.portalItemId and t2.workZoneSiteId='"+ workZoneSiteId+ "' and t2.projectId='"+ projectId+ "' and t2.orgRoleId='"+ orgRoleId + "'";SQLQuery query = session.createSQLQuery(sql);query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);find = query.list();return find;}});return list;}现在改为oracle之后,表字段全是大写,经过sql查出的放回Map中的key全是大写的, 这个一个Map要传递到action 甚至页面上, 之前key全是mysql中的数据字段(小写,有驼峰规则),现在全变成大写了。请问,谁有好的解决经验,在DAO这层拿到Map时就把里面的key全转化成之前驼峰规则的key(mysql里的小写)值吗?? 您的回答,是我学习的动力,不甚感激!! 问题补充:比如我需要的数据是title,showTitle,isLocal ,而现在查询出来的是TITLE,SHOWTITLE,ISLOCAL
解决方案
在查询的字段后面加as试试
解决方案二:
很简单啊,让mysql忽略大小写敏感就行了,这样随便你定义什么规则,驼峰也好,马峰也好。。。。在配置文件my.conf中mysqld字段增加lower_case_table_name=1,1为不区分大小写,0是区分大小写,然后重启mysql即可
解决方案三:
你可以定义一个全局静态Map,保存大写->驼峰的对应关系,然后就很容易通过一个全局静态方法去适配一下,