package simple.page.service.database; import java.util.List; import java.util.Map; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.hibernate.SQLQuery; import org.hibernate.transform.Transformers; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; /** * 执行原生SQL Service * @author 周超 2014-6-16 */ @Component public class SqlService { @PersistenceContext EntityManager em; public List<Map<String,Object>> queryBySql(String sql){ Query query = em.createNativeQuery(sql); @SuppressWarnings("unchecked") List<Map<String,Object>> list = query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list(); return list; } @Transactional public void excuteSql(String sql){ Query query = em.createNativeQuery(sql); query.executeUpdate(); } }
em.createNativeQuery(sql)返回的是javax.persistence.Queryjava
能够用unwrap方法转换成SQLQuery(这个是hibernate的)spring
以后再用setResultTransformer方法将结果转换成Map类型。sql
这样能够便于抽成通用方法。网上的大多数都是没有列名的,返回数组经过下标取值。数组